Wakaama (anciennement liblwm2m) est une implémentation du protocole M2M léger M2M de l'Open Mobile Alliance (LWM2M).
Liste de diffusion des développeurs: https://dev.eclipse.org/mailman/listinfo/wakaama-dev
La seule version officielle de Wakaama, version 1.0, est affectée par divers problèmes de sécurité (CVE-2019-9004, CVE-2021-41040).
Veuillez utiliser le commit le plus récent dans la branche principale. La version 1.0 n'est plus prise en charge.
Ce travail est à double licence en vertu de la licence publique Eclipse V2.0 et de la licence de distribution Eclipse V1.0.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
git clone https://github.com/eclipse-wakaama/wakaama.git
Lorsque vous travaillez sur Wakaama lui-même ou en ayant l'intention d'exécuter l'exemple de l'application client, les sous-modules doivent être vérifiés:
git clone --recurse-submodules https://github.com/eclipse-wakaama/wakaama.git
Wakaama est une bibliothèque hautement configurable. Il est construit avec Cmake. Regardez des exemples / server / cmakelists.txt pour un exemple de la façon de l'inclure.
Les différents paramètres peuvent être configurés avec des variables de cache CMake (par exemple cmake -DLOG_LEVEL=INFO ).
Wakaama prend en charge plusieurs modes. Au moins un mode doit être défini avec des variables de cache Cmake.
Wakaama prend en charge des options supplémentaires liées au client. Ceux-ci ne sont disponibles que si le mode client est activé.
Veuillez noter: LWM2M Version 1.0 n'est pris en charge que par les clients, tandis que les serveurs sont compatibles en arrière.
Les formats de données suivants sont configurables pour Wakaama:
L'infrastructure de journalisation peut être configurée avec des variables de cache cmake (par exemple cmake -DWAKAAMA_LOG_LEVEL=INFO ).
Si NONE choisi, l'utilisateur de Wakaama doit implémenter une couche de transport personnalisée. Vérifiez les implémentations disponibles pour plus d'informations.
Si NONE choisi, l'utilisateur de Wakaama doit implémenter une couche d'abstraction de plate-forme personnalisée. Vérifiez l'implémentation POSIX disponible pour plus d'informations.
Wakaama fournit une simple bibliothèque CLI. Il peut être activé avec:
Sur Ubuntu 24.04, utilisé dans CI, les dépendances peuvent être installées comme telles:
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.txtPour les macOS, les dépendances de développement peuvent être installées en tant que telles:
brew install automake clang-format cmake cppcheck cunit gcc gitlint gnu-getopt make ninja
Le nouveau code C doit être formaté avec Clang-Format.
Le style est basé sur le style LLVM, mais avec 4 au lieu de 2 espaces d'indentation et permettant 120 au lieu de 80 caractères par ligne.
Pour vérifier si votre code correspond au style attendu, les commandes suivantes sont utiles:
git clang-format-18 --diff : Montrez ce qui doit être modifié pour correspondre au style de code attendugit clang-format-18 : Appliquez toutes les modifications nécessaires directementgit clang-format-18 --commit main : Correction du style de code pour toutes les modifications depuis Main Si le code existant est reformaté, cela doit être fait dans un engagement distinct. Son identifiant de validation doit être ajouté au fichier .git-blame-ignore-revs et engagé dans un autre engagement.
Tout le code CMake doit être formaté avec CMake-Format.
Pour vérifier si votre code correspond au style attendu, les commandes suivantes sont utiles:
tools/ci/run_ci.sh --run-cmake-format : tester tous les fichiers CMake, imprimer les offendantscmake-format --in-place <unformatted-file> : appliquer toutes les modifications nécessaires directement à Pour éviter une charge inutile sur l'infrastructure GitHub, veuillez envisager d'exécuter tools/ci/run_ci.sh --all tout avant de pousser.
cd wakaama
tools/ci/run_ci.sh --run-build
pytest -v tests/integration
Il existe quelques exemples d'applications fournies pour tester les capacités du serveur, du client et de la bootstrap de Wakaama. Les recettes suivantes supposent que vous êtes sur une plate-forme UNIX et que vous avez Cmake et que vous vous installez.
cmake -S examples/server -B build-servercmake --build build-server./build-server/lwm2mserver [Options]Le LWM2MSERVER écoute sur le port UDP 5683. Il dispose d'une interface de ligne de commande de base. Tapez «Aide» pour une liste des commandes prises en charge.
Les options sont:
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]À côté de LWM2MClient, il existe également des exemples avec DTLS activés et avec le transfert BROCK1 RAW activé.
Le LWM2MClient dispose de neuf objets LWM2M:
Objet de sécurité (ID: 0)
Objet serveur (ID: 1)
Objet de contrôle d'accès (ID: 2) comme squelette
Objet de périphérique (ID: 3) contenant des valeurs codées durs à partir de l'exemple Client LWM2M de l'annexe E de la spécification technique LWM2M.
Objet de surveillance de la connectivité (ID: 4) comme squelette
Objet de mise à jour du firmware (ID: 5) comme squelette.
Objet d'emplacement (ID: 6) comme squelette.
Objet statistique de connectivité (ID: 7) comme squelette.
Objet de test (ID: 31024) avec la description suivante:
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 | |
Le LWM2MClient ouvre le port UDP 56830 et essaie de s'inscrire sur un serveur LWM2M au 127.0.0.1:5683. Il dispose d'une interface de ligne de commande de base. Tapez «Aide» pour une liste des commandes prises en charge.
Les options sont:
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
Valeurs supplémentaires pour le binaire 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
Pour lancer une session bootstrap: ./lwm2mclient -b
cmake -S examples/lightclient -B build-lightclientcmake --build build-lightclient./build-lightclient/lightclient [Options]Le LightClient est beaucoup plus simple que le LWM2MClient et ne dispose que de quatre objets LWM2M:
Le LightClient ne présente aucune interface de ligne de commande.
Les options sont:
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]Reportez-vous à des exemples / bootstrap_server / Readme pour plus d'informations.