Fiware Ultralight 2.0 IoTAgent设备上报数据失败求助
Hey Krishan,我看了你在Fiware智慧城市IoT POC里遇到的上报数据失败问题,咱们先找到核心原因,再给你一套完整的端到端测试步骤参考。
问题诊断:路径不匹配导致的404错误
你现在遇到的Cannot POST /iot/d错误,本质是IoT Agent的服务配置和上报请求的路径不匹配:
- 你创建的Service里,
resource字段设置的是/iot/dev-restaurants - 但你上报数据时用的请求路径是
/iot/d
IoT Agent只会监听你在Service里配置的resource路径,所以它识别不了/iot/d,直接返回了404。
快速修复方案
你有两个选择来解决这个问题:
方案1:修改上报请求的路径
把POST请求的地址从http://130.206.XXX.XXX:4041/iot/d?k=tourguide-devices&i=restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f改成:http://130.206.XXX.XXX:4041/iot/dev-restaurants?k=tourguide-devices&i=restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f
也就是把路径部分换成你Service里配置的/iot/dev-restaurants,其他请求头和请求体保持不变。
方案2:修改Service的resource配置
如果你更习惯用/iot/d作为上报路径,就更新你的Service配置,把resource改成/iot/d。可以通过PUT请求更新现有Service,或者重新创建一个新的Service(推荐后者,避免配置冲突)。
完整端到端IoT测试分步示例
下面给你一套从容器验证到数据查询的完整测试流程,确保每个环节都能跑通:
1. 验证Fiware容器运行状态
首先确认所有核心容器都正常运行,在终端执行:
docker ps
你应该能看到这四个容器的状态都是Up,端口映射正常:
fiware_iotagent_1:4041、7896端口fiware_orion_1:1026端口fiware_mosquitto_1:1883端口fiware_mongo_1:27017端口
2. 创建IoT Agent Service(适配/iot/d路径)
请求地址:http://130.206.XXX.XXX:4041/iot/services
请求头:
Content-Type: application/jsonfiware-service: tourguidefiware-servicepath: /X-Auth-Token: {{AuthToken}}
请求体(注意把resource设为/iot/d):
{ "services": [ { "apikey": "tourguide-devices", "cbroker": "http://fiware_orion_1:1026", "resource": "/iot/d", "entity_type": "tourguide-devices", "service": "tourguide", "subservice": "/" } ] }
发送请求后,应该返回201 Created的成功响应。
3. 创建IoT Device
请求地址:http://130.206.XXX.XXX:4041/iot/devices
请求头和上面一致,请求体用你之前的配置即可:
{ "device_id": "restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f", "service": "tourguide", "service_path": "/", "entity_name": "0115206c51f60b48b77e4c937835795c33bb953f", "entity_type": "Restaurant", "transport": "HTTP", "attributes": [ { "object_id": "t", "name": "temperature", "type": "number" } ], "protocol": "UL20" }
发送后同样会返回201 Created。
4. 上报测量数据
请求地址:http://130.206.XXX.XXX:4041/iot/d?k=tourguide-devices&i=restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f
请求头:
Content-Type: text/plainfiware-service: tourguidefiware-servicepath: /X-Auth-Token: {{AuthToken}}
请求体:t|25
这次发送后,应该能得到200 OK的响应,不会再出现404错误了。
5. 在Orion Context Broker中查询数据
最后验证数据是否同步到了Orion,发送GET请求:
请求地址:http://130.206.XXX.XXX:1026/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f
请求头:
fiware-service: tourguidefiware-servicepath: /X-Auth-Token: {{AuthToken}}
你会收到包含temperature属性的JSON响应,值就是你上报的25,这样整个端到端流程就跑通了。
内容的提问来源于stack exchange,提问作者Krishan Babbar

