MQTT 上的 IoTAgent (JSON) 不会接收来自 mosquitto 的测量值



目标:使用FIWARE提供的MQTT传输协议的IoTAgent (JSON)。特别是,我想提供一个服务组而不是单个设备,这样匿名设备就可以通过mosquito to Broker将它们的测量值发送到IoTAgent。

问题:mosquito Broker接收消息(由MQTT发布者发送),但IoTAgent没有。两者都在同一个网络上(我使用的是docker compose),所以排除了这可能是问题的原因。

docker-compose。Yaml文件看起来像这样:

version: "3.5"
services:
mosquitto:
image: eclipse-mosquitto:1.6.14
hostname: mosquitto
container_name: mosquitto
expose:
- "1883"
- "9001"
ports:
- "1883:1883"
- "9001:9001"
networks:
- default
iot-agent:
image: fiware/iotagent-json:latest
hostname: iot-agent
container_name: fiware-iot-agent
depends_on:
- mongo-db
- mosquitto
networks:
- default
expose:
- "4041"
ports:
- "4041:4041"
environment:
- IOTA_CB_HOST=orion
- IOTA_CB_PORT=1026
- IOTA_CB_NGSI_VERSION=ld
- IOTA_JSON_LD_CONTEXT=http://context/ngsi-context.jsonld
- IOTA_NORTH_PORT=4041
- IOTA_MQTT_HOST=mosquitto
- IOTA_MQTT_PORT=1883
- IOTA_MQTT_QOS=1
- IOTA_MQTT_KEEPALIVE=60
- IOTA_DEFAULT_RESOURCE= # Default is blank. I'm using MQTT so I don't need a resource
- IOTA_REGISTRY_TYPE=mongodb
- IOTA_MONGO_HOST=mongo-db
- IOTA_MONGO_PORT=27017
- IOTA_MONGO_DB=iotagentjson
- IOTA_LOG_LEVEL=DEBUG
- IOTA_TIMESTAMP=true
- IOTA_AUTOCAST=true
- IOTA_FALLBACK_TENANT=openiot

完整的docker-compose。在GitLab存储库中可以找到。

服务组配置如下所示:

{
"services": [
{
"apikey": "4jggokgpepnvsb2uv4s40d59ov",
"entity_type": "TrafficFlowObserved",
"resource": "",
"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"}
]
}
]   
}

我希望IoTAgent能够接收来自匿名设备以及蚊子的测量。相反,目前,IoTAgent没有接收到测量值,并且在提供服务组时给出以下错误:DEVICE_GROUP_NOT_FOUND.

日志显示在GitLab存储库

我想不出这个问题。

假设您已经按如下方式配置了一个设备:

curl -iX POST 
'http://localhost:4041/iot/services' 
-H 'Content-Type: application/json' 
-H 'fiware-service: openiot' 
-H 'fiware-servicepath: /' 
-d '{
"services": [
{
"apikey":      "4jggokgpepnvsb2uv4s40d59ov",
"cbroker":     "http://orion:1026",
"entity_type": "Thing",
"resource":    ""
}
]
}'
curl -iX POST 
'http://localhost:4041/iot/devices' 
-H 'Content-Type: application/json' 
-H 'fiware-service: openiot' 
-H 'fiware-servicepath: /' 
-d '{
"devices": [
{
"device_id":   "motion001",
"entity_name": "urn:ngsi-ld:Motion:001",
"entity_type": "Motion",
"protocol":    "PDI-IoTA-UltraLight",
"transport":   "MQTT",
"timezone":    "Europe/Berlin",
"attributes": [
{ "object_id": "c", "name": "count", "type": "Integer" }
]
}
]
}'

您需要将您的数据发布到/json/<api-key>/<device-id>/attrs主题。重要的是要包括正确的协议json和正确的<api-key>—消息体类似于{"c": 1}

这可用于在没有实际设备的情况下测试物联网代理南端口-假设它有效,然后您可以检查设备是否发布到正确的主题。

最新更新