Wakaama (anteriormente Liblwm2M) é uma implementação do protocolo M2M da Open Mobile Alliance (LWM2M).
LISTA DE EMPRESA DESENVOLVIDADES: https://dev.eclipse.org/mailman/listinfo/wakaama-dev
O único lançamento oficial de Wakaama, versão 1.0, é afetado por vários problemas de segurança (CVE-2019-9004, CVE-2021-41040).
Por favor, use o compromisso mais recente no ramo principal. A versão 1.0 não é mais suportada.
Este trabalho é licenciado duplo sob a licença pública Eclipse v2.0 e a licença de distribuição do Eclipse v1.0.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
git clone https://github.com/eclipse-wakaama/wakaama.git
Ao trabalhar no próprio Wakaama, ou com a intenção de executar o exemplo do aplicativo cliente, os submódulos devem ser verificados:
git clone --recurse-submodules https://github.com/eclipse-wakaama/wakaama.git
Wakaama é uma biblioteca altamente configurável. É construído com cmake. Veja exemplos/servidor/cmakelists.txt para um exemplo de como incluí -lo.
As diferentes configurações podem ser configuradas com variáveis de cache cmake (por exemplo, cmake -DLOG_LEVEL=INFO ).
Wakaama suporta vários modos. Pelo menos um modo precisa ser definido com variáveis de cache cmake.
Wakaama suporta opções adicionais relacionadas ao cliente. Estes estão disponíveis apenas se o modo do cliente estiver ativado.
Observação: o LWM2M versão 1.0 é suportado apenas pelos clientes, enquanto os servidores são compatíveis com versões anteriores.
Os seguintes formatos de dados são configuráveis para Wakaama:
A infraestrutura de registro pode ser configurada com variáveis de cache cmake (por exemplo, cmake -DWAKAAMA_LOG_LEVEL=INFO ).
Se NONE for escolhido, o usuário de Wakaama precisa implementar uma camada de transporte personalizada. Verifique as implementações disponíveis para obter mais informações.
Se NONE for escolhido, o usuário do Wakaama precisa implementar uma camada de abstração de plataforma personalizada. Verifique a implementação do POSIX disponível para obter mais informações.
Wakaama fornece uma biblioteca da CLI simples. Pode ser ativado com:
No Ubuntu 24.04, usado no IC, as dependências podem ser instaladas como tal:
apt install build-essential clang-format clang-format-18 clang-tools-18 cmake cppcheck gcovr git libcunit1-dev ninja-build python3-pippip3 install -r tools/requirements-compliance.txtPara MacOS, as dependências de desenvolvimento podem ser instaladas como tal:
brew install automake clang-format cmake cppcheck cunit gcc gitlint gnu-getopt make ninja
O novo código C deve ser formatado com formato de clang.
O estilo é baseado no estilo LLVM, mas com 4 em vez de 2 espaços indentação e permitir 120 em vez de 80 caracteres por linha.
Para verificar se o seu código corresponde ao estilo esperado, os seguintes comandos são úteis:
git clang-format-18 --diff : mostre o que precisa ser alterado para corresponder ao estilo de código esperadogit clang-format-18 : aplique todas as alterações necessárias diretamentegit clang-format-18 --commit main : Corrija o estilo de código para todas as alterações desde o principal Se o código existente for reformatado, isso deve ser feito em um compromisso separado. Seu ID de confirmação deve ser adicionado ao arquivo .git-blame-ignore-revs e cometido em mais uma confirmação.
Todo o código CMake deve ser formatado com formato cmake.
Para verificar se o seu código corresponde ao estilo esperado, os seguintes comandos são úteis:
tools/ci/run_ci.sh --run-cmake-format : teste todos os arquivos cmake, imprima os ofensivoscmake-format --in-place <unformatted-file> : aplique todas as alterações necessárias diretamente para Para evitar carga desnecessária na infraestrutura do GitHub, considere executar tools/ci/run_ci.sh --all antes de pressionar.
cd wakaama
tools/ci/run_ci.sh --run-build
pytest -v tests/integration
Existem alguns aplicativos de exemplo fornecidos para testar os recursos de servidor, cliente e bootstrap de Wakaama. As receitas a seguir assumem que você está em uma plataforma UNIX como você tem cmake e instale.
cmake -S examples/server -B build-servercmake --build build-server./build-server/lwm2mserver [Options]O LWM2MSERVER escuta na porta UDP 5683. Possui uma interface básica de linha de comando. Digite 'Ajuda' para uma lista de comandos suportados.
As opções são:
Usage: lwm2mserver [OPTION]
Launch a LwM2M server on localhost.
Options:
-4 Use IPv4 connection. Default: IPv6 connection
-l PORT Set the local UDP port of the Server. Default: 5683
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
cmake -S examples/client/udp -B build-client-udpcmake --build build-client-udp./build-client-udp/lwm2mclient [Options]Ao lado do LWM2MClient, também existem exemplos com o DTLS ativado e com a transferência RAW Block1 ativada.
O LWM2mclient possui nove objetos LWM2M:
Objeto de segurança (ID: 0)
Objeto do servidor (ID: 1)
Objeto de controle de acesso (ID: 2) como um esqueleto
Objeto do dispositivo (ID: 3) contendo valores codificados do exemplo do cliente LWM2M do Apêndice E da especificação técnica LWM2M.
Objeto de monitoramento de conectividade (ID: 4) como um esqueleto
Objeto de atualização do firmware (ID: 5) como um esqueleto.
Objeto de localização (ID: 6) como um esqueleto.
Objeto de estatística de conectividade (ID: 7) como um esqueleto.
Objeto de teste (ID: 31024) com a seguinte descrição:
Multiple
Object | ID | Instances | Mandatory |
Test | 31024 | Yes | No |
Resources:
Supported Multiple
Name | ID | Operations | Instances | Mandatory | Type | Range |
test | 1 | R/W | No | Yes | Integer | 0-255 |
exec | 2 | E | No | Yes | | |
dec | 3 | R/W | No | Yes | Float | |
O LWM2MClient abre a porta UDP 56830 e tenta se registrar em um servidor LWM2M em 127.0.0.1:5683. Possui uma interface básica de linha de comando. Digite 'Ajuda' para uma lista de comandos suportados.
As opções são:
Usage: lwm2mclient [OPTION]
Launch a LwM2M client.
Options:
-n NAME Set the endpoint name of the Client. Default: testlwm2mclient
-l PORT Set the local UDP port of the Client. Default: 56830
-h HOST Set the hostname of the LwM2M Server to connect to. Default: localhost
-p PORT Set the port of the LwM2M Server to connect to. Default: 5683
-4 Use IPv4 connection. Default: IPv6 connection
-t TIME Set the lifetime of the Client. Default: 300
-b Bootstrap requested.
-c Change battery level over time.
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
Valores adicionais para o binário lwm2mclient_tinydtls:
-i Set the device management or bootstrap server PSK identity. If not set use none secure mode
-s Set the device management or bootstrap server Pre-Shared-Key. If not set use none secure mode
Para iniciar uma sessão de bootstrap: ./lwm2mclient -b
cmake -S examples/lightclient -B build-lightclientcmake --build build-lightclient./build-lightclient/lightclient [Options]O LightClient é muito mais simples que o LWM2MClient e apresenta apenas quatro objetos LWM2M:
O LightClient não possui nenhuma interface de linha de comando.
As opções são:
Usage: lwm2mclient [OPTION]
Launch a LwM2M client.
Options:
-n NAME Set the endpoint name of the Client. Default: testlightclient
-l PORT Set the local UDP port of the Client. Default: 56830
-4 Use IPv4 connection. Default: IPv6 connection
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
cmake -S examples/bootstrap_server -B build-bootstrapcmake --build build-bootstrap./build-bootstrap/bootstrap_server [Options]Consulte Exemplos/Bootstrap_server/ReadMe para obter mais informações.