【问题标题】:FIWARE Orion: servicePath of a subscriptionFIWARE Orion:订阅的 servicePath
【发布时间】:2017-05-29 11:26:47
【问题描述】:

我正在尝试创建订阅以通知我某些传感器值的变化。

curl broker.waziup.io/v2/subscriptions -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Fiware-Service:watersense' --header 'Fiware-ServicePath:/#' -d @- <<EOF
{
  "description": "Send XXX when YYY",
  "subject": {
    "entities": [
      {
        "id": "WS_UPPA_Sensor2",
        "type": "SensingDevice"
      }
    ],
    "condition": {
      "attrs": [
        "SM1"
      ],
      "expression": {
        "q": "SM1>400"
      }
    }
  },
  "notification": {
    "httpCustom": {
      "url": "https://api.plivo.com/v1/Account/MAMDA5ZDJIMDM1NZVMZD/Message/",
      "headers": {
        "Content-type": "application/json",
        "Authorization": "Basic XXX"
      },
      "method": "POST",
      "payload": "{ %22src%22: %2200393806412092%22, %22dst%22: %2200393806412093%22, %22text%22: %22WaterSense: Field is too dry. \${id} humidity value is \${SM1} %22}"
    },
    "attrs": [
      "SM1"
    ]
  },
  "expires": "2040-05-24T20:00:00.000Z",
  "throttling": 1
}
EOF

第一个问题,ServicePath 在订阅中的作用是什么? 似乎在检索与该订阅相关的实体时使用它。所以/# 是有效的。是否正确(我在文档中找不到)?

其次,假设您要基于多个实体属性的值创建订阅。如果这些实体属性具有相同的名称(通常是这种情况),您如何引用它们?你能做这样的事情吗:

"q": "Sensor1.SM1>100, Sensor2.SM1>100"

payload 也有类似的东西?

【问题讨论】:

  • 我已经回答了第一个问题。对于第二个问题,我需要澄清一下。您的意思是 不同 实体中具有 same 名称的属性?那是对的吗?谢谢!
  • 我认为他可以使用 idPattern 之类的东西,就像此链接中所述:https://stackoverflow.com/questions/43230064/fiware-orion-subscribe-to-all-entities 。或者,也许只是将所有感兴趣的实体放在订阅结构中的id 字段中。 @fgalan,这样做的正确方法是什么,在订阅结构中指定许多实体 ID?
  • @fgalan 是在不同实体中具有相同名称的属性。
  • @Dalton 我知道如何在entities 字段中放置多个实体。但是如何在q表达式字段和payload字段中区分它们是否具有相同的属性名称?
  • 我认为在您的entities 字段中,您会为您提供所有感兴趣的实体;在expression 字段中,您将输入您的正常表达式。

标签: notifications fiware-orion broker


【解决方案1】:

关于第一个问题,使用Fiware-Service: /# 表示订阅涵盖任何服务路径中的实体。换言之,任何实体(无论其在服务中的服务路径如何)都可能触发订阅(当然,只要其他条件匹配,例如实体 ID/类型、属性、过滤器等)。

关于第二个问题,请考虑到给定订阅是由 single 实体上的更新触发的。换句话说,Orion 接收到给定实体的更新,如果它与订阅条件匹配,则触发订阅并发送包含该实体的通知。因此,q 过滤器始终指代正在更新的实体(在某些情况下,如果满足 q 过滤器和其他条件,则会收到通知)。

subject.entities 字段的作用是定义订阅所引用的实体子集。例如,您可以使用{ "idPattern": ".*", "type": "TempMeter" } 来引用TempMeter 类型的所有实体。但是,如果 Orion 获得了类型为 TempMeter 的实体 ID Meter1 的更新,则 q 过滤器仅引用该实体。

关于将多个实体更新“打包”到一个中的操作(例如POST /v2/update),它们被分解为多个单一实体更新,上述规则适用。

例外:在订阅创建时发送的初始通知将包括subject.entities 涵盖的所有实体。然而,这是一个非常特殊的情况(更接近同步查询操作而不是常规订阅行为),所以它不是很有意义。在这种情况下,q 过滤器添加到 subjects.entities 所涵盖的集合中,以便选择哪些实体将包含在初始通知中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多