FIWARE IoTAgent(JSON)基于MQTT无法接收Mosquitto数据及设备组错误排查
问题定位与解决方案
核心问题
使用FIWARE IoTAgent JSON结合MQTT配置服务组后,Mosquitto Broker可接收设备消息,但IoTAgent无法关联到服务组,抛出DEVICE_GROUP_NOT_FOUND错误,已排除Docker网络连通性问题。
1. 修正MQTT消息主题格式
IoTAgent JSON默认订阅的MQTT主题模板为/{{apiKey}}/{{deviceId}}/attrs,你的服务组apikey为4jggokgpepnvsb2uv4s40d59ov,设备发送消息的主题必须严格遵循以下格式:
/4jggokgpepnvsb2uv4s40d59ov/[自定义设备ID]/attrs
主题格式不匹配是触发DEVICE_GROUP_NOT_FOUND的最常见原因。
2. 补全服务组的租户关联配置
你在IoTAgent环境变量中设置了IOTA_FALLBACK_TENANT=openiot,但服务组配置未指定对应租户信息,导致租户不匹配。修改服务组配置,添加service和servicePath字段:
{ "services": [ { "apikey": "4jggokgpepnvsb2uv4s40d59ov", "entity_type": "TrafficFlowObserved", "resource": "", "service": "openiot", "servicePath": "/", "expressionLanguage": "jexl", "attributes": [ {"name": "id", "type": "Text", "expression": "'urn:ngsi-ld:TrafficFlowObserved:'+idelem"}, {"name": "dateObserved", "type": "Text", "expression": "fecha_hora_inicio|toisodate+'/'+fecha_hora_finalizacion|toisodate"}, {"object_id": "intensidad", "name": "intensity", "type": "Number"} ] } ] }
3. 确保服务组创建请求参数正确
创建服务组时,需通过正确的API端点发送请求,若启用多租户需显式指定租户参数:
curl -X POST \ http://localhost:4041/iot/services?service=openiot&servicePath=/ \ -H "Content-Type: application/json" \ -d '[上述修改后的服务组JSON内容]'
请求成功会返回201 Created状态码,可通过GET http://localhost:4041/iot/services?service=openiot&servicePath=/验证配置是否生效。
4. 检查IoTAgent的MQTT订阅日志
查看IoTAgent的DEBUG日志,确认是否成功订阅对应主题,正常日志应包含:
info: MQTTClient - Subscribed to topic: /4jggokgpepnvsb2uv4s40d59ov/+/attrs
若未出现该日志,说明服务组配置未被正确加载,需检查MongoDB中是否存储了服务组数据。
5. 验证消息负载格式
设备发送的MQTT负载需包含服务组表达式依赖的字段,示例合法负载:
{ "idelem": "sensor_001", "fecha_hora_inicio": "2024-05-20T10:00:00", "fecha_hora_finalizacion": "2024-05-20T10:01:00", "intensidad": 50 }
内容的提问来源于stack exchange,提问作者Francesco Vignola
相关产品推荐
相关产品推荐

