EMQX5启用LwM2M网关,测试设备连接之后,emqx后端一直提示no_xml_definition,收不到注册消息报文

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 定义文件。

  1. 缺少 XML 定义文件:EMQX LwM2M 网关需要对象定义来解析来自 LwM2M 设备的数据。对象定义由组织以 XML 格式声明,您可以从 LwM2MRegistry 找到这些 XML 文件,并将它们放入 lwm2m.xml_dir 指定的目录中。如果找不到关联的对象定义,来自设备的响应将被丢弃并在日志中报告错误消息 GitHubGitHub
  2. Object ID 31024:从错误日志可以看出,您的测试设备使用了 Object ID 31024,这很可能是一个自定义对象厂商特定对象,不在标准的 OMA LwM2M 对象注册表中。

解决方案:

  1. 获取 31024 对象的 XML 定义
  • 联系您的设备厂商获取 Object ID 31024 的 XML 定义文件
  • 或者检查设备文档是否提供了相应的对象定义
  1. 放置 XML 文件到正确目录
  • 将 XML 定义文件放置到 EMQX 配置中 xml_dir 参数指定的目录(默认为 etc/lwm2m_xml/EMQXEMQX
  1. 配置示例

hocon

   gateway.lwm2m {
     xml_dir = "etc/lwm2m_xml/"
     # ... 其他配置
   }
  1. 验证配置
  • 确保 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}]}]

我按照 使用 EMQX 接入 LwM2M 协议设备 | EMQ 这个教程执行的,但是我收不到注册消息