You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FIWARE IoT-Agent MQTT JSON解析错误及MongoDB数据不更新问题求助

问题诊断与解决

核心原因

  1. 协议不匹配:设备注册时指定了PDI-IoTA-UltraLight(UltraLight 2.0)协议,但实际通过MQTT发送的是JSON格式数据。IoT-Agent会严格按照注册的协议解析消息,JSON格式无法被UltraLight解析器处理,直接导致解析失败,触发TypeError: parsedMessage.reduce is not a function致命错误,最终数据无法存入MongoDB。
  2. 服务注册命令语法错误:resource字段缺少双引号,正确格式应为"resource": "/iot/d",该错误会导致JSON无效,可能影响服务注册的有效性。

解决方法

提供两种可行方案,按需选择:

方案一:切换设备协议为JSON格式

修改设备注册命令,将协议改为PDI-IoTA-JSON,同时修复服务注册的语法错误:

1. 修复并重新注册IoT服务

curl -iX POST 'http://localhost:4041/iot/services' \
-H 'Content-Type: application/json' \
-H 'Fiware-Service: myClassRoom' \
-H 'Fiware-ServicePath: /' \
-d '{ 
  "services": [ 
    { 
      "apikey": "12345", 
      "cbroker": "http://localhost:1026", 
      "entity_type": "Device", 
      "resource": "/iot/d" 
    } 
  ] 
}'

2. 重新注册设备(使用JSON协议)

curl -iX POST 'http://localhost:4041/iot/devices' \
-H 'Content-Type: application/json' \
-H 'Fiware-Service: myClassRoom' \
-H 'Fiware-ServicePath: /' \
-d '{ 
  "devices": [ 
    { 
      "device_id": "SensTemp", 
      "entity_name": "urn:ngsi-ld:temperature-sensor:001", 
      "entity_type": "Device", 
      "protocol": "PDI-IoTA-JSON", 
      "transport": "MQTT", 
      "timezone": "Europe/Madrid", 
      "attributes":[ 
        { 
          "object_id": "temperature", 
          "name": "temperature", 
          "type": "Integer"
        } 
      ] 
    } 
  ] 
}'

方案二:修改MQTT消息格式为UltraLight 2.0

保持设备注册的PDI-IoTA-UltraLight协议不变,将发送的JSON数据改为UltraLight格式:

  • 原JSON消息:{"temperature": 47}
  • 修改为UltraLight格式:temperature|47

同时确保MQTT主题符合规则:/<api-key>/<device-id>/attrs,即/12345/SensTemp/attrs,IoT-Agent才能正确识别设备和API密钥。

内容的提问来源于stack exchange,提问作者Srdjan Zec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:24:32