FIWARE IoTAgent-json适配MQTT固定主题与嵌套JSON问题咨询
解决FIWARE IoTAgent-JSON接入MQTT传感器的两个问题
1. 修改MQTT订阅主题适配传感器固定上报路径
IoTAgent-JSON允许通过配置文件或环境变量自定义MQTT订阅主题模板,无需局限于默认的/json/{{api-key}}/{{device-id}}/attrs。
配置方式
- 通过配置文件(config.js):找到MQTT配置段,修改
subTopic字段为传感器的上报主题模板。如果传感器主题包含设备ID(如示例中的shellyplus1pm-7c87ce64d540/events/rpc),可用{{device-id}}占位符匹配设备注册时的device_id:
module.exports = { // 其他配置项... mqtt: { host: 'your-mqtt-broker-host', port: 1883, protocol: 'mqtt', subTopic: '{{device-id}}/events/rpc', // 匹配传感器的固定上报主题 pubTopic: '/json/{{api-key}}/{{device-id}}/cmd', qos: 0 } };
- 通过环境变量:启动IoTAgent时设置
IOTA_MQTT_SUBTOPIC环境变量,效果与配置文件一致:
IOTA_MQTT_SUBTOPIC="{{device-id}}/events/rpc" npm start
注意事项
确保设备注册时的device_id与传感器上报主题中的DeviceId完全一致(如示例中的shellyplus1pm-7c87ce64d540),IoTAgent才能正确匹配并接收消息。
2. 解析嵌套多层JSON数据
IoTAgent-JSON支持通过属性映射的objectPath字段定位嵌套JSON中的数据,无需修改Payload结构即可提取深层字段。
设备注册时配置属性映射
在注册设备的请求中,为每个需要提取的属性指定objectPath,路径用点分隔符表示层级,带特殊字符(如冒号)的键直接写入即可。以下是针对示例Payload的注册请求示例:
POST /iot/devices HTTP/1.1 Host: your-iotagent-host:4041 Content-Type: application/json Fiware-Service: your-service Fiware-ServicePath: /your-service-path { "devices": [ { "device_id": "shellyplus1pm-7c87ce64d540", "entity_name": "urn:ngsi-ld:ShellySwitch:shellyplus1pm-7c87ce64d540", "entity_type": "ShellySwitch", "protocol": "json", "transport": "mqtt", "attributes": [ { "object_id": "ts", "name": "timestamp", "type": "Number", "objectPath": "params.ts" // 提取params下的ts字段 }, { "object_id": "apower", "name": "activePower", "type": "Number", "objectPath": "params.switch:0.apower" // 提取params.switch:0下的apower字段 } ] } ] }
原理说明
objectPath字段遵循简单层级路径规则:
- 用
.分隔嵌套对象层级 - 非标识符键(如带冒号、空格的键)直接写入路径即可,IoTAgent会按字符串键解析
配置完成后,IoTAgent会自动从上报的嵌套JSON中提取对应字段,转换为NGSI实体属性存入Context Broker。
内容的提问来源于stack exchange,提问作者Yanpeng Wu
相关产品推荐
相关产品推荐

