[英]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.