Wakaama(以前のLiblWM2M)は、Open Mobile Allianceの軽量M2Mプロトコル(LWM2M)の実装です。
開発者メーリングリスト:https://dev.eclipse.org/mailman/listinfo/wakaama-dev
ワカマの唯一の公式リリースであるバージョン1.0は、さまざまなセキュリティ問題(CVE-2019-9004、CVE-2021-41040)の影響を受けます。
メインブランチでの最新のコミットを使用してください。リリース1.0はサポートされていません。
この作業は、Eclipse Public License v2.0およびEclipse Distributionライセンスv1.0の下で二重ライセンスされています。
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
git clone https://github.com/eclipse-wakaama/wakaama.git
Wakaama自体に取り組んでいる場合、またはクライアントアプリケーションのサンプルを実行する場合は、サブモジュールをチェックアウトする必要があります。
git clone --recurse-submodules https://github.com/eclipse-wakaama/wakaama.git
Wakaamaは高度に構成可能なライブラリです。 Cmakeで構築されています。例を含める方法の例については、Examples/server/cmakelists.txtをご覧ください。
異なる設定は、Cmakeキャッシュ変数( cmake -DLOG_LEVEL=INFO )で構成できます。
Wakaamaは複数のモードをサポートしています。 Cmakeキャッシュ変数で少なくとも1つのモードを定義する必要があります。
Wakaamaは、追加のクライアント関連オプションをサポートしています。これらは、クライアントモードが有効になっている場合にのみ使用できます。
注:LWM2Mバージョン1.0はクライアントによってのみサポートされていますが、サーバーは後方互換性があります。
次のデータ形式は、Wakaama用に構成できます。
ロギングインフラストラクチャは、Cmakeキャッシュ変数( cmake -DWAKAAMA_LOG_LEVEL=INFO )で構成できます。
NONE選択されていない場合、Wakaamaのユーザーはカスタムトランスポートレイヤーを実装する必要があります。詳細については、利用可能な実装を確認してください。
選択されてNONE場合、Wakaamaのユーザーはカスタムプラットフォームの抽象化レイヤーを実装する必要があります。詳細については、利用可能なPOSIX実装を確認してください。
ワカマはシンプルなCLIライブラリを提供します。で有効にすることができます:
CIで使用されるUbuntu 24.04では、依存関係をそのようにインストールできます。
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.txtMacOSの場合、開発依存関係をそのためインストールできます。
brew install automake clang-format cmake cppcheck cunit gcc gitlint gnu-getopt make ninja
新しいCコードは、Clang-Formatでフォーマットする必要があります。
このスタイルはLLVMスタイルに基づいていますが、2つのスペースインデントではなく4つのインデントで、1行あたり80文字ではなく120を許可します。
コードが期待されるスタイルと一致するかどうかを確認するには、次のコマンドが役立ちます。
git clang-format-18 --diff :予想されるコードスタイルに合わせて変更する必要があるものを示しますgit clang-format-18 :必要なすべての変更を直接適用しますgit clang-format-18 --commit main :メイン以来のすべての変更のコードスタイルを修正既存のコードが再フォーマットされた場合、これは別のコミットで行う必要があります。そのコミットIDは、ファイル.git-blame-ignore-revsに追加され、さらに別のコミットでコミットする必要があります。
すべてのcmakeコードは、cmake-formatでフォーマットする必要があります。
コードが期待されるスタイルと一致するかどうかを確認するには、次のコマンドが役立ちます。
tools/ci/run_ci.sh --run-cmake-format :すべてのcmakeファイルをテストし、違反しているファイルを印刷しますcmake-format --in-place <unformatted-file> :必要なすべての変更を直接適用しますGitHubインフラストラクチャの不必要な負荷を避けるために、プッシュする前にtools/ci/run_ci.sh --all実行することを検討してください。
cd wakaama
tools/ci/run_ci.sh --run-build
pytest -v tests/integration
Wakaamaのサーバー、クライアント、ブートストラップ機能をテストするために提供されるアプリケーションの例がいくつかあります。次のレシピは、あなたがプラットフォームのようなUnixにいると想定しており、cmakeとインストールを行います。
cmake -S examples/server -B build-servercmake --build build-server./build-server/lwm2mserver [Options]LWM2MSERVERは、UDPポート5683に耳を傾けます。基本的なコマンドラインインターフェイスを備えています。サポートされているコマンドのリストの「ヘルプ」と入力します。
オプションは次のとおりです。
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]LWM2MClientの隣には、DTLSが有効になり、RAW BLOCK1転送が有効になっている例もあります。
LWM2MClientは、9つのLWM2Mオブジェクトを備えています。
セキュリティオブジェクト(ID:0)
サーバーオブジェクト(ID:1)
スケルトンとしてのアクセス制御オブジェクト(ID:2)
LWM2M技術仕様の付録Eの例のLWM2Mクライアントの例からハードコーディングされた値を含むデバイスオブジェクト(ID:3)。
スケルトンとしての接続監視オブジェクト(ID:4)
スケルトンとしてのファームウェア更新オブジェクト(ID:5)。
スケルトンとしてのロケーションオブジェクト(ID:6)。
スケルトンとしての接続統計オブジェクト(ID:7)。
次の説明を使用して、オブジェクト(ID:31024)をテストします。
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 | |
LWM2MClientはUDPポート56830を開き、127.0.0.1:5683のLWM2Mサーバーに登録しようとします。基本的なコマンドラインインターフェイスを備えています。サポートされているコマンドのリストの「ヘルプ」と入力します。
オプションは次のとおりです。
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
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
ブートストラップセッションを起動するには: ./lwm2mclient -b
cmake -S examples/lightclient -B build-lightclientcmake --build build-lightclient./build-lightclient/lightclient [Options]LightClientは、LWM2MClientよりもはるかに簡単で、4つのLWM2Mオブジェクトのみを備えています。
LightClientは、コマンドラインインターフェイスを備えていません。
オプションは次のとおりです。
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]詳細については、例/bootstrap_server/readmeを参照してください。