[英]Events and actions in Fiware NGSI entities
假设我们有一个对应于 IoT controller 设备的实体,比如说一扇门 controller。我们想要定义一个可能导致动作(打开/关闭)的事件。 所以我们需要向这个设备发送命令。
我们将如何做到这一点? 在实体中添加一个属性,例如可以通过 NGSI API 写入的 setDoorStatus? 然后让一些 IoT 代理或命令处理程序订阅此属性? 是否有数据 Model 的示例?
最简单的方法是使用任何IoT 代理配置设备。 IoT 代理有一个标准的 API 用于设备配置,其中可以列出commands
:
curl -L -X POST 'http://localhost:4041/iot/devices' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-H 'Content-Type: application/json' \
--data-raw '{
"devices": [
{
"device_id": "door001",
"entity_name": "urn:ngsi-ld:Door:001",
"entity_type": "Door",
"protocol": "PDI-IoTA-UltraLight",
"transport": "HTTP",
"endpoint": "http://context-provider:3001/iot/door001",
"commands": [
{"name": "unlock","type": "command"},
{"name": "open","type": "command"},
{"name": "close","type": "command"},
{"name": "lock","type": "command"}
],
"attributes": [
{"object_id": "s", "name": "state", "type":"Text"}
],
"static_attributes": [
{"name":"refStore", "type": "Relationship","value": "urn:ngsi-ld:Store:001"}
]
}
]
}
'
IoT Agent 节点库定义了通过命令驱动设备的命令范式
在这种情况下,您有一个open
属性,它在上下文代理上注册为来自设备,您可以使用以下请求启动设备:
curl -L -X PATCH 'http://localhost:1026/v2/entities/urn:ngsi-ld:Door:001/attrs' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-H 'Content-Type: application/json' \
--data-raw '{
"open": {
"type" : "command",
"value" : ""
}
}'
curl -L -X PATCH 'http://localhost:4041/ngsi-ld/v1/entities/urn:ngsi-ld:Device:door001/attrs/open' \
-H 'NGSILD-Tenant: openiot' \
-H 'NGSILD-Path: /' \
-H 'Content-Type: application/json' \
-H 'Link: <http://context/ngsi-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"' \
--data-raw '{
"type": "Property",
"value": ""
}'
相关的 IoT 代理接受请求并使用适当的设备语法将其传递给设备。 激活后,只要实体有任何命令进度信息,就会将额外的特殊status
和info
属性添加到实体中。
完整示例可以在 FIWARE 教程中找到:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.