[英]I cannot properly read Southbound commands through Orion to MQTT devices
我正在尝试按照以下流程向南行方向发送命令:
设备支持的命令规定如下:
"services": [
{
"apikey": "5jggokgpepnvsb2uv4s40d59ov",
"cbroker": "'"http://orion:$ORION_PORT"'",
"entity_type": "Agv",
"transport": "MQTT",
"resource": "",
"commands": [
{
"object_id": "AGV_Alarm",
"name": "AGV_Alarm",
"type": "command",
"value": {
"data": "metadata_for_AGV_Alarm"
}
},
{
"object_id": "AGV_Event",
"name": "AGV_Event",
"type": "command",
"value": {
"data": "metadata_for_AGV_Event"
}
}
],
向南方向发送命令的请求是通过 Orion Context Broker 发出的:
curl -iX PATCH \
'http://orion:1026/v2/entities/urn:ngsi-ld:Agv:001/attrs' \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-d '{
"AGV_Event": {
"type" : "command",
"value": "152"
}
}'
为了模拟执行器,使用了以下工具,它通过 MQTT 侦听命令:
docker run -it --rm --name mqtt-subscriber --network fiware_default efrecon/mqtt-client sub -h mosquitto -t "/5jggokgpepnvsb2uv4s40d59ov/agv001/cmd"
我只能收到命令的一部分有效负载:
ubuntu@ip-172-31-85-246:~/FiwareDockerDevMode$ docker run -it --rm --name mqtt-subscriber --network fiware_default efrecon/mqtt-client sub -h mosquitto -t "/5jggokgpepnvsb2uv4s40d59ov/agv001/cmd"
{"AGV_Event":""}
{"AGV_Event":""}
{"AGV_Event":""}
在临时MongoDB中,命令状态显示为PENDING
AGV_Event_status: {
type: 'commandStatus',
creDate: 1669583822.6813245,
modDate: 1669584130.4993052,
value: 'PENDING',
mdNames: [
'TimeInstant'
],
md: {
TimeInstant: {
type: 'DateTime',
value: 1669584130.495
}
}
},
AGV_Event_info: {
type: 'commandResult',
creDate: 1669583822.6813245,
modDate: 1669583822.6813245,
value: ' ',
mdNames: []
},
更新
另一方面,如果我根据 MongoDB 中的结构发送命令:
curl -iX PATCH \
'http://orion:1026/v2/entities/urn:ngsi-ld:Agv:001/attrs' \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-d '{
"AGV_Event_info": {
"type": "commandResult",
"value": "200"
},
"AGV_Event_status": {
"type": "commandStatus",
"value": "OK"
}
}'
现在,执行器模拟器没有收到任何信息:
ubuntu@ip-172-31-85-246:~/FiwareDockerDevMode$ docker run -it --rm --name mqtt-subscriber --network fiware_default efrecon/mqtt-client sub -h mosquitto -t "/5jggokgpepnvsb2uv4s40d59ov/agv001/cmd"
但是,临时 MongoDB 已正确更新:
AGV_Event_status: {
type: 'commandStatus',
creDate: 1669731581.9883916,
modDate: 1669733857.6557434,
value: 'OK',
mdNames: []
},
AGV_Event_info: {
type: 'commandResult',
creDate: 1669731581.9883916,
modDate: 1669733857.6557305,
value: '200',
mdNames: []
},
IoTAgent-JSON的官方文档表明,当向南方向发送命令时,执行器将发送响应,考虑到我的执行器是假人,这是有道理的。
关于如何接收通过 Orion Context Broker 发送的所有信息的任何建议?
看起来命令配置不正确。 对于测试,请尝试仅使用name
之类的东西:
"commands": [
{ "name": "ring", "type": "command" }
],
对于每个命令而不是添加object_id
或value
。
只有在 Context Broker 数据 model 和 MQTT 主题之间存在不同的命名约定时,才需要object_id
。
XXX_status
和XXX_info
的 PATCH 与此处无关。 这个请求是由。 IoT 代理本身一旦从 MQTT 接收到cmdExe
主题。 由于 MQTT 传输是异步的,除非设备(或 MQTT 上的虚拟主题)明确返回状态更新,否则状态将保持在PENDING
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.