Wakaama (formerly liblwm2m) is an implementation of the Open Mobile Alliance's LightWeight M2M protocol (LWM2M).
Developers mailing list: https://dev.eclipse.org/mailman/listinfo/wakaama-dev
-+- core (the LWM2M engine) | +- coap (CoAP stack adaptation) | | | +- er-coap-13 (Modified Erbium's CoAP engine from | https://web.archive.org/web/20180316172739/http://people.inf.ethz.ch/mkovatsc/erbium.php) | +- data (data formats serialization/deserialization) | +- tests (test cases) | +- examples | +- bootstrap_server (a command-line LWM2M bootstrap server) | +- client (a command-line LWM2M client with several test objects) | +- lightclient (a very simple command-line LWM2M client with several test objects) | +- server (a command-line LWM2M server) | +- shared (utility functions for connection handling and command- line interface)
Wakaama is not a library but files to be built with an application. Wakaama uses CMake >= 3. Look at examples/server/CMakeLists.txt for an example of how to include it. Several compilation switches are used:
Depending on your platform, you need to define LWM2M_BIG_ENDIAN or LWM2M_LITTLE_ENDIAN. LWM2M_CLIENT_MODE and LWM2M_SERVER_MODE can be defined at the same time.
There are some example applications provided to test the server, client and bootstrap capabilities of Wakaama. The following recipes assume you are on a unix like platform and you have cmake and make installed.
cmake [wakaama directory]/examples/server
The lwm2mserver listens on UDP port 5683. It features a basic command line interface. Type 'help' for a list of supported commands.
cmake [wakaama directory]/examples/client
DTLS feature requires the tinydtls submodule. To include it, on the first run, use the following commands to retrieve the sources:
git submodule init
git submodule update
You need to install autoconf and automake to build with tinydtls.
Build with tinydtls:
cmake -DDTLS=1 [wakaama directory]/examples/client
The lwm2mclient features nine LWM2M objects:
Security Object (id: 0)
Server Object (id: 1)
Access Control Object (id: 2) as a skeleton
Device Object (id: 3) containing hard-coded values from the Example LWM2M Client of Appendix E of the LWM2M Technical Specification.
Connectivity Monitoring Object (id: 4) as a skeleton
Firmware Update Object (id: 5) as a skeleton.
Location Object (id: 6) as a skeleton.
Connectivity Statistics Object (id: 7) as a skeleton.
Test Object (id: 31024) with the following description:
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 | |
The lwm2mclient opens udp port 56830 and tries to register to a LWM2M Server at 127.0.0.1:5683. It features a basic command line interface. Type 'help' for a list of supported commands.
If DTLS feature enable:
To launch a bootstrap session:
In the any directory, run the following commands:
cmake [wakaama directory]/examples/lightclient
The lightclient is much simpler that the lwm2mclient and features only four LWM2M objects:
The lightclient does not feature any command-line interface.
cmake [wakaama directory]/examples/bootstrap_server
Refer to examples/bootstrap_server/README for more information.