Wakaama (이전 Liblwm2m)는 Open Mobile Alliance의 Lightweight M2M 프로토콜 (LWM2M)을 구현 한 것입니다.
개발자 메일 링리스트 : https://dev.eclipse.org/mailman/listinfo/wakaama-dev
Wakaama의 유일한 공식 릴리스 인 버전 1.0은 다양한 보안 문제 (CVE-2019-9004, CVE-201-41040)의 영향을받습니다.
메인 브랜치에서 가장 최근 커밋을 사용하십시오. 릴리스 1.0은 더 이상 지원되지 않습니다.
이 작업은 Eclipse Public License v2.0 및 Eclipse Distribution License 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와 함께 제작되었습니다. 포함 방법의 예는 예제/서버/cmakelists.txt를 참조하십시오.
CMAKE 캐시 변수 (예 : cmake -DLOG_LEVEL=INFO )로 다양한 설정을 구성 할 수 있습니다.
와카마는 여러 모드를 지원합니다. CMAKE 캐시 변수로 하나 이상의 모드를 정의해야합니다.
Wakaama는 추가 클라이언트 관련 옵션을 지원합니다. 클라이언트 모드가 활성화 된 경우에만 사용할 수 있습니다.
참고 : LWM2M 버전 1.0은 클라이언트에서만 지원되는 반면 서버는 뒤로 호환됩니다.
다음 데이터 형식은 wakaama에 대해 구성 할 수 있습니다.
로깅 인프라는 CMAKE 캐시 변수 (예 : cmake -DWAKAAMA_LOG_LEVEL=INFO )로 구성 할 수 있습니다.
NONE 선택되지 않으면 Wakaama 사용자는 사용자 정의 전송 계층을 구현해야합니다. 자세한 내용은 사용 가능한 구현을 확인하십시오.
NONE 선택되지 않으면 Wakaama 사용자는 사용자 정의 플랫폼 추상화 계층을 구현해야합니다. 자세한 내용은 사용 가능한 POSIX 구현을 확인하십시오.
Wakaama는 간단한 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 개가 있으며 라인 당 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의 서버, 클라이언트 및 부트 스트랩 기능을 테스트하기위한 몇 가지 예제 응용 프로그램이 있습니다. 다음 레시피는 유닉스와 같은 플랫폼에 있다고 가정하고 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가 활성화되고 원시 블록 전송이 활성화 된 예가 있습니다.
LWM2MCLIENT는 9 개의 LWM2M 객체를 특징으로합니다.
보안 개체 (ID : 0)
서버 객체 (ID : 1)
액세스 제어 객체 (ID : 2)는 골격으로
장치 객체 (ID : 3) LWM2M 기술 사양의 부록 E의 예제 LWM2M 클라이언트에서 하드 코딩 된 값을 포함합니다.
연결 모니터링 객체 (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 binary의 추가 값 :
-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를 참조하십시오.