A simple and lightweight ( but not full feature ) lwm2m server aim to run on edge router.
- Bootstrap Interface
- Client Registration interface.
- Register
- Update
- Deregister
- Device Management and Service Enablement interface.
- Read Operation, Read Resource, Read Object
- Write Operation, Write Resource, Write Object Instance
- Execute Operation
- Discover Operation
- Create Operation
- Delete Operation
- Write-Attributes Operation
- Read-Composite Operation
- Write-Composite Operation
- Information Reporting interface.
- Observe Operation, Observe Resource, Observe Object
- Cancel Observation Operation
- Observe-Composite Operation
- Cancel Observation-Composite Operation
- Send Operation
- Data formats
- Plain Text
- Opaque
- CBOR
- TLV
- SenML JSON
- SenML CBOR
- LwM2M JSON
- Security
- DTLS with Certificates
- DTLS with PSK, only support DTLS 1.2
- Transport
- UDP transport support.
- TCP transport support.(Some features may not work properly)
- Tested with clients
- Leshan client: coap, coaps + psk
- Anjay client running on ESP32: coap
- Anjay client running on Linux: coap, coaps + psk
- Zephyr LWM2M client running on nrf52840 with w5500 ethernet: coap, coaps + psk
- Zephyr LWM2M client running on nrf52840 with Openthread
You need a working Go environment.
go get github.com/yplam/lwm2m
package main
import (
"github.com/yplam/lwm2m/core"
"github.com/yplam/lwm2m/registration"
"github.com/yplam/lwm2m/server"
"log"
)
func main() {
r := server.DefaultRouter()
deviceManager := core.DefaultManager()
registration.EnableHandler(r, deviceManager)
err := server.ListenAndServe(r,
server.EnableUDPListener("udp", ":5683"),
)
if err != nil {
log.Printf("serve lwm2m with err: %v", err)
}
}
leshan client
# coap
java -jar leshan-client-demo.jar --server-url=localhost:5683
# coaps
java -jar leshan-client-demo.jar --server-url=localhost:5684 -i 123 --psk-key=000102030405060708090a0b0c0d0e0f
anjay client
# coap
./output/bin/demo --endpoint-name $(hostname) --server-uri coap://127.0.0.1:5683
# coap + tcp
./output/bin/demo --endpoint-name $(hostname) --server-uri coap+tcp://127.0.0.1:5685
# coaps
./output/bin/demo --endpoint-name $(hostname) --server-uri coaps://127.0.0.1:5684 --security-mode psk --identity 666f6f --key 000102030405060708090a0b0c0d0e0f --ciphersuites 49320 --tls-version TLSv1.2
Apache License Version 2.0. See the LICENSE file for details.