LWM2M--协议组件
LWM2M是一种轻量级物联网设备协议,协议主要包含两个主体,一个是LWM2M Server和LWM2M Client,此外,根据需要还可以加入LWM2M引导服务器(Bootstrap Server)或智能卡(SmartCard),对客户端完成引导。当前协议支持LWM2M Client主体,可以通过LWM2M Client连接支持LWM2M Server协议的服务器。通过定时上报客户端信息或者服务器下发对客户端控制完成对设备的管理。
简介
LwM2M全称lightweight Machine to Machine,是OMA(Open Moblile Alliance)定义的物联网协议,主要可以使用在资源受限(包括存储、功耗等)的嵌入式设备。这个协议基于CoAP(Constrained Application Protocol)协议,CoAP协议基于UDP协议,默认UDP端口号非加密为5683,加密端口5684。Eclipse Wakaama:基于C,提供了LwM2M服务器与LwM2M客户端的实现。
目录
使用说明
LWM2M客户端支持加密和非加密方式连接服务器,可以根据LWM2M服务器支持的类型进行选择。
menuconfig配置说明
(Top) → Components→ Network→ Protocols→ LWM2M [*] Enable LWM2M
[ ] Enable LWM2M DTLS encrypt (NEW)
[*] Enable LWM2M sample
(192.168.1.102) LWM2M Server Addr String (NEW)
(5684) LWM2M Server Port String (NEW)
[*] Enable LWM2M client mode
Select log level (Debug Log Level) --->
(Top) → Components→ Network→ Protocols→ LWM2M→ Enable LWM2M → Select log level
( ) Error Log Level
( ) Warn Log Level
( ) Info Log Level
(X) Debug Log Level
( ) Verbose Log Level
( ) None Log Level
Enable LWM2M: 使能LWM2M组件;
Enable LWM2M DTLS encrypt:使能LWM2M示例,可以运行shell命令连接LWM2M服务器;
LWM2M Server Addr String:修改设置LWM2M服务器IP地址;
LWM2M Server Port String:修改设置LWM2M服务器端口地址;
Enable LWM2M client mode:使能LWM2M 客户端模式;
Select log level (Debug Log Level):调试打印log级别,默认为debug级别;
shell命令运行示例
LWM2M示例shell命令和功能有四个分别是:
lwm2m_data_sample:用于测试数据加密和解析接口是否正确;
lwm2m_proc_sample:测试主程序运行流程接口;
lwm2m_connect_server_sample:测试LWM2M客户端连接LWM2M服务器,用于定时更新上报数据与服务器,服务器可以通过下发命令到客户端;
lwm2m_disconnect_server_sample:测试LWM2M客户端注销LWM2M服务器连接;
API列表
接口 | 说明 |
---|---|
lwm2m_init | 初始化一个lwm2m上下文 |
lwm2m_deinit | 关闭一个lwm2m上下文 |
lwm2m_step | 执行任何请求处理操作 |
lwm2m_handle_packet | 发送收到的数据到liblwm2m库处理 |
lwm2m_configure | 配置匹配的服务器对象实例 |
lwm2m_add_object | 添加对象实例 |
lwm2m_remove_object | 去除对象实例 |
lwm2m_update_registration | 发送更新注册信息到指定的服务器 |
API说明
lwm2m_init
该函数用于初始化lwm2m上下文运行环境
void* lwm2m_init(void * userData)
参数 | 说明 |
---|---|
userData | 用于存放用户相关数据格式到上下文中 |
返回 | 说明 |
无 | 无 |
lwm2m_deinit
该函数用于删除链表和内存释放相关操作
void lwm2m_deinit(void * handler)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
返回 | 说明 |
无 | 无 |
lwm2m_step
该函数用于执行任何请求处理操作
int lwm2m_step(void *handler,time_t * timeoutP)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
timeoutP | 请求超时变量 |
返回 | 说明 |
int | 错误码 |
lwm2m_handle_packet
该函数用于发送收到的数据到liblwm2m库进一步处理
void lwm2m_handle_packet(void* handler, uint8_t * buffer, int length, void *fromSessionH)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
buffer | 指向CoAP包的头指针 |
length | 收到的字节数 |
fromSessionH | 存放socket连接信息 |
返回 | 说明 |
无 | 无 |
lwm2m_configure
该函数用于配置匹配的服务器对象实例
int lwm2m_configure(void * handler,const char * endpointName,const char * msisdn,const char * altPath,uint16_t numObject,lwm2m_object_t * objectList[])
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
endpointName | 终端名字 |
msisdn | 移动用户号码 |
altPath | 路径更改 |
numObject | 对象数量 |
objectList[] | 对象链表 |
返回 | 说明 |
错误码 |
lwm2m_add_object
该函数用于添加对象实例到运行环境中
int lwm2m_add_object(void* handler, lwm2m_object_t * objectP)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
objectP | 对象指针 |
返回 | 说明 |
int | 错误码 |
lwm2m_remove_object
该函数用于从运行环境中删除对象实例
int lwm2m_remove_object(void* handler, uint16_t id)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
id | 对象ID |
返回 | 说明 |
int | 错误码 |
lwm2m_update_registration
该函数用于更新已给的服务注册信息
int lwm2m_update_registration(void* handler, uint16_t shortServerID, bool withObjects)
参数 | 说明 |
---|---|
handler | 上下文运行环境变量 |
shortServerID | 服务器短ID |
withObjects | 是否带有对象 |
返回 | 说明 |
int | 错误码 |
API接口函数错误码说明
返回 | 说明 |
---|---|
COAP_NO_ERROR = 0x00 | 没有错误 |
COAP_IGNORE = 0x01 | 忽略错误 |
COAP_201_CREATED = 0x41 | 创建设备 |
COAP_202_DELETED = 0x42 | 删除设备 |
COAP_204_CHANGED = 0x44 | 设备变化 |
COAP_205_CONTENT = 0x45 | 获取内容失败 |
COAP_231_CONTINUE = 0x5F | 可持续的 |
COAP_400_BAD_REQUEST = 0x80 | 错误请求 |
COAP_401_UNAUTHORIZED = 0x81 | 未授权 |
COAP_402_BAD_OPTION= 0x82 | 错误的选择 |
COAP_404_NOT_FOUND= 0x84 | 未发现 |
COAP_405_METHOD_NOT_ALLOWED= 0x85 | 方法不被允许 |
COAP_406_NOT_ACCEPTABLE= 0x86 | 不可接收的 |
COAP_408_REQ_ENTITY_INCOMPLETE= 0x88 | 请求实体未成功 |
COAP_412_PRECONDITION_FAILED= 0x8C | 预处理失败 |
COAP_413_ENTITY_TOO_LARGE= 0x8D | 实体太大 |
COAP_500_INTERNAL_SERVER_ERROR= 0xA0 | 内部服务器错误 |
COAP_501_NOT_IMPLEMENTED= 0xA1 | 未实现的 |
COAP_503_SERVICE_UNAVAILABLE= 0xA3 | 服务不可用 |