FIWARE Orion,具有结构化值的属性中的 NGSIv2 订阅

FIWARE Orion, NGSIv2 subscription in attributes with structured values

我正在使用 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}" 尚未实施。

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

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

"attrs":[
   "address.streetAddress"
]

需要:

"attrs":[
   "address"
]

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