首页 > 解决方案 > FIWARE Orion,NGSIv2 订阅具有结构化值的属性

问题描述

我正在使用 Orion Contex Broker,当结构化属性中的参数更改其值时,我需要接收通知。一个例子:

  1. 订阅
curl -iX POST \
--url 'http://localhost:1026/v2/subscriptions' \
--header 'content-type: application/json' \
--data '{
   "description":"Notify me of Store changes in street Address",
   "subject":{
      "entities":[
     {
        "idPattern":".*",
        "type":"Store"
     }
      ],
      "condition":{
     "attrs":[
        "address.streetAddress"
     ]
      }
   },
   "notification":{
      "http":{
     "url":"http://localhost:3000/subscription/store-change"
      }
   }
}'
  1. 创建实体
curl -iX POST \
--url 'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-d '{
   "actionType":"append",
   "entities":[
      {
         "type":"Store",
         "id":"urn:ngsi-ld:Store:001",
         "address":{
            "type":"PostalAddress",
            "value":{
               "streetAddress":"Old",
               "addressRegion":"Berlin"
            }
         },
         "name":{
            "type":"Text",
            "value":"Bösebrücke Einkauf"
         }
      }
   ]
}'
  1. 更新实体
curl -iX PATCH \
--url 'http://localhost:1026/v2/entities/urn:ngsi-ld:Store:001/attrs' \
-H 'Content-Type: application/json' \
-d '{
   "address":{
      "type":"PostalAddress",
      "value":{
         "streetAddress":"Bornholmer"
      }
   }
}'

预期结果将是在创建和更新实体时收到通知。另一种可能性可能是“条件表达式”。然而,一种:"q": "address.streetAddress!=${previousValue}"尚未实施。

标签: fiwarefiware-orion

解决方案


NGSI 中的属性通常是数字或字符串——这通常会导致非常扁平的数据模型。在这种情况下,当属性值更改时,订阅将被触发。

address也支持JSON 对象(例如上面的),但是只要对象发生value更改并且没有专门绑定到子属性,就会发生更改因此

"attrs":[
   "address.streetAddress"
]

需要是:

"attrs":[
   "address"
]

但是,该q参数可用于过滤特定的子属性,例如q=address.streetAddress!="Old"- 监听接口可以在订阅触发后修改订阅。


推荐阅读