首页 文章

如何在Orion Context Broker NGSIv2上创建高级订阅表达式?

提问于
浏览
3

根据official documentation of Orion Context Broker NGSIv2

您可以在条件中包含过滤表达式 . 例如,不仅要通知压力是否有变化,而且是否在700-800范围内变化 . 这是一个高级主题,请参阅NGSIv2规范中的“订阅”部分 .

在NGSIv2订阅中没有 notifyConditions ,例如NGSIv1,它被subject.condition对象取代:

condition:触发通知的条件 . 此字段是可选的,它可能包含两个属性,两个都是可选的:attrs:属性名称数组表达式:由q,mq,georel,geometry和coords组成的表达式(请参阅上面关于此字段的“List entities”操作)

当我们使用 subject.condition.attrs 时,它包含一个属性名称数组,这些名称定义"triggering attributes",即由于实体创建或更新而在创建/更改时触发通知的属性 .

但是,对于 subject.condition.expression ,官方文件中没有例子 .

获取拼图可以推断:

  • 可以组合 subject.condition.expressionsubject.condition.attrs . 如果我设置和表达不同的表达式,例如 . attr foo用表达式'boo>10'它会做什么?这会表现得像 ORAND 吗?

  • 可以设置多个表达式 . 这会像 ORAND 吗?

将这些更复杂的订阅的一些示例与订阅中的实体分隔的不同方式相结合将会很不错 .

NOTE: 此问题与Orion Version 1.7.0有关

1 回答

  • 2

    我认为以下示例,来自NGSIv2 Overview for Developers That Already Know NGSIv1演示文稿(当前版本中的幻灯片34)可能有助于澄清 .

    示例:当速度大于90时,订阅以Vehicle结尾的任何类型的任何实体的速度变化(例如RoadVehicle,AirVehicle等),其平均元数据在80到90之间,到马德里市中心的车辆距离较少超过100公里

    请求:

    POST /v2/subscriptions
    ...
    {  
      "subject": {
        "entities": [
         {
            "idPattern": ".*",
            "typePattern": ".*Vehicle"
         },
        ],
        "condition": {
          "attrs": [ "speed"  ],
          "expression":  {
             "q": "speed>90",
             "mq": "speed.average==80..100",
             "georel": "near;maxDistance:100000",
             "geometry": "point",
             "coords": "40.418889,-3.691944"
          }
          }
        },
       ...
    }
    

    如此示例所示,您可以使用不同的条件( qmq ,geoquery等),它们在AND意义上进行解释 . Morevoer, qmq 允许在AND意义上解释的复杂表达式,例如:

    "q": "speed>90;engine!=fail",
    

    请注意, qmq 出现在订阅 expression 时遵循的规则与它们出现在同步查询中的规则相同(即 GET /v2/entities?q=... ) . 这些规则在NGSIv2 specification的"Simple Query Language"部分中描述 .

相关问题