msg: ignore_observer_resource, mfa: emqx_lwm2m_session:observe_object_list/3, line: 522, peername: 112.6.246.185:56830, clientid: testlwm2mclient, object_id: 31024, reason: no_xml_definition
5.0.22 时修复过相关的 bug:可以考虑试试 5.8.x
如果还是不行,那就是真的找不到 Object ID 31024 的 XML 定义文件。
- 缺少 XML 定义文件:EMQX LwM2M 网关需要对象定义来解析来自 LwM2M 设备的数据。对象定义由组织以 XML 格式声明,您可以从 LwM2MRegistry 找到这些 XML 文件,并将它们放入 lwm2m.xml_dir 指定的目录中。如果找不到关联的对象定义,来自设备的响应将被丢弃并在日志中报告错误消息 GitHubGitHub。
- Object ID 31024:从错误日志可以看出,您的测试设备使用了 Object ID 31024,这很可能是一个自定义对象或厂商特定对象,不在标准的 OMA LwM2M 对象注册表中。
解决方案:
- 获取 31024 对象的 XML 定义:
- 联系您的设备厂商获取 Object ID 31024 的 XML 定义文件
- 或者检查设备文档是否提供了相应的对象定义
- 放置 XML 文件到正确目录:
- 配置示例:
hocon
gateway.lwm2m {
xml_dir = "etc/lwm2m_xml/"
# ... 其他配置
}
- 验证配置:
- 确保 XML 文件命名正确(通常为
31024.xml) - 重启 EMQX 服务以加载新的对象定义
临时解决方案:
如果暂时无法获得正确的 XML 定义,您可以:
- 禁用自动观察功能(
auto_observe = false) - 或者创建一个基本的 31024.xml 文件作为占位符
我临时关闭 自动观察功能,报这个错了
[error] msg: failed_to_execute, mfa: emqx_hooks:safe_execute/2, line: 210, peername: 112.6.246.185:56830, clientid: testlwm2mclient, exception: error, failed_call: {emqx_sys,on_client_disconnected,[#{clientid => <<“testlwm2mclient”>>,enable_authn => true,endpoint_name => <<“testlwm2mclient”>>,is_bridge => false,is_superuser => false,lifetime => 300,listener => ‘lwm2m:udp:default’,mountpoint => <<“lwm2m”>>,password => undefined,peerhost => {112,6,246,185},protocol => lwm2m,sockport => 5783,username => <<“testlwm2mclient”>>,zone => default},timeout,#{clean_start => true,clientid => <<“testlwm2mclient”>>,conn_mod => emqx_gateway_conn,connected_at => 1758272709719,expiry_interval => 0,keepalive => 300,peercert => nossl,peername => {{112,6,246,185},56830},proto_name => <<“LwM2M”>>,proto_ver => <<“1.0.1”>>,sockname => {{0,0,0,0},5783},socktype => udp}]}, reason: function_clause, stacktrace: [{emqx_sys,on_client_disconnected,[#{clientid => <<“testlwm2mclient”>>,enable_authn => true,endpoint_name => <<“testlwm2mclient”>>,is_bridge => false,is_superuser => false,lifetime => 300,listener => ‘lwm2m:udp:default’,mountpoint => <<“lwm2m”>>,password => undefined,peerhost => {112,6,246,185},protocol => lwm2m,sockport => 5783,username => <<“testlwm2mclient”>>,zone => default},timeout,#{clean_start => true,clientid => <<“testlwm2mclient”>>,conn_mod => emqx_gateway_conn,connected_at => 1758272709719,expiry_interval => 0,keepalive => 300,peercert => nossl,peername => {{112,6,246,185},56830},proto_name => <<“LwM2M”>>,proto_ver => <<“1.0.1”>>,sockname => {{0,0,0,0},5783},socktype => udp}],[{file,“emqx_sys.erl”},{line,251}]},{emqx_hooks,safe_execute,2,[{file,“emqx_hooks.erl”},{line,200}]},{emqx_hooks,do_run,2,[{file,“emqx_hooks.erl”},{line,167}]},{emqx_lwm2m_channel,handle_timeout,3,[{file,“emqx_lwm2m_channel.erl”},{line,196}]},{emqx_gateway_conn,with_channel,3,[{file,“emqx_gateway_conn.erl”},{line,764}]},{emqx_gateway_conn,process_msg,2,[{file,“emqx_gateway_conn.erl”},{line,405}]},{emqx_gateway_conn,handle_recv,3,[{file,“emqx_gateway_conn.erl”},{line,368}]},{proc_lib,wake_up,3,[{file,“proc_lib.erl”},{line,236}]}]

