如何制作Orion NGSIv2订阅,通知NGSIv1中的天鹅座?

时间:2016-05-17 13:04:55

标签: fiware fiware-orion fiware-cygnus

编辑2

curl  --include \
      --header 'Content-Type: application/json' \
      --request POST \
      --data-binary '{
                       "description": "Day subscription",
                       "subject": {
                         "entities": [
                           {
                             "idPattern": "es-leon-.*",
                             "type": "Event"
                           }
                         ],
                         "condition": {
                           "attrs": [
                              "Title",
                              "dFlag"
                           ],
                           "expression": {
                             "q": "dFlag>0"
                           }
                         }
                       },
                       "notification": {
                         "http": {
                             "url" : "http://localhost:5050/notify"
                         },
                         "attrs": [
                           "Title",
                           "dFlag"
                         ],
                         "attrsFormat":"legacy"
                       }
                     }' \
      'http://localhost:1026/v2/subscriptions'

在Orion订阅注册确定(感谢评论中的提示)但我遇到的问题与here中的问题相同,即使我使用"attrsFormat":"legacy" 我做错了什么?为什么猎户座没有使用ngsiv1向天鹅座发送通知?

The cygnus error trace.

天鹅座显示猎户座正在回应这个:

{
    "subscriptionId": "574315e77775f31b8d3da719",
    "data": [{
        "id": "es-leon-0",
        "type": "Event",
        "Title": {
            "type": "none",
            "value": "pepe",
            "metadata": {}
        },
        "dFlag": {
            "type": "text",
            "value": "1",
            "metadata": {}
        }
    }]
}

如果必须回复下面的行,请在ngsiv1:

{
    "subscriptionId": "5743178d7775f31b8d3da71a",
    "originator": "localhost",
    "contextResponses": [{
        "contextElement": {
            "type": "Event",
            "isPattern": "false",
            "id": "es-leon-0",
            "attributes": [{
                "name": "Title",
                "type": "text",
                "value": "pep"
            }, {
                "name": "dFlag",
                "type": "text",
                "value": "1"
            }]
        },
        "statusCode": {
            "code": "200",
            "reasonPhrase": "OK"
        }
    }]
}

原始问题

正如other question所说:

  

编辑:还要注意您可以使用NGSIv2来创建/更新实体   Orion并在NGSIv1中收到通知,如果您:

     

使用NGSIv1操作创建订阅

     

使用相同于传统的attrsFormat的NGSIv2操作创建订阅。   请查看更详细的信息here

所以我编写了这个订阅:

curl  --include \
      --header 'Content-Type: application/json' \
      --request POST \
      --data-binary '{
                       "description": "Day subscription",
                       "subject": {
                         "entities": [
                           {
                             "idPattern": "es-leon-.*",
                             "type": "Event"
                           }
                         ],
                         "condition": {
                           "attributes": [
                              "Title",
                              "dFlag"
                           ],
                           "expression": {
                             "q": "dFlag > 0"
                           }
                         }
                       },
                       "notification": {
                         "callback": "http://localhost:5050/notify",
                         "attributes": [
                           "Title",
                           "dFlag"
                         ]
                       }
                     }' \
      'http://localhost:1026/v1/subscriptions'

但是猎户座不让我注册它会引发这个错误:

HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Content-Length: 67
Content-Type: application/json
Fiware-Correlator: 2ecdfc74-1c2f-11e6-82d7-000d3a23bf27
Date: Tue, 17 May 2016 12:59:25 GMT

{"error":"BadRequest","description":"no condition attrs specified"}

这是使用遗产属性的方式,因此它可以与NGNSv2的天鹅座一起使用吗? 谢谢你的帮助。

编辑1:

根据答案,订阅应该是这样的:对吗?

curl  --include \
      --header 'Content-Type: application/json' \
      --request POST \
      --data-binary '{
                       "description": "Day subscription",
                       "subject": {
                         "entities": [
                           {
                             "idPattern": "es-leon-.*",
                             "type": "Event"
                           }
                         ],
                         "condition": {
                           "attributes": [
                              "Title",
                              "dFlag"
                           ],
                           "expression": {
                             "q": "dFlag > 0"
                           }
                         }
                       },
                       "notification": {
                         "http": {
                             "url" : "http://localhost:5050/notify"
                         },
                         "attributes": [
                           "Title",
                           "dFlag"
                         ],
                         "attrsFormat":"legacy"
                       }
                     }' \
      'http://localhost:1026/v2/subscriptions'

但我仍然收到错误:

HTTP/1.1 100 Continue

HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Content-Length: 67
Content-Type: application/json
Fiware-Correlator: 60a0a1d2-1ddf-11e6-8bd6-000d3a23bf27
Date: Thu, 19 May 2016 16:33:11 GMT

{"error":"BadRequest","description":"no condition attrs specified"}

1 个答案:

答案 0 :(得分:2)

使用attrs代替attributessubject.conditionsnotification)。

此外,请注意,不再使用callback。你必须使用:

"notification": {
  "http": {
    "url": "http://localhost:5050/notify"
  },
  ..
}

此外,如果您希望通知使用NGSIv1格式,则应在attrsFormat中包含值legacy的{​​{1}}字段,如the documentation中所述。

最后请注意,严格操作网址为notification,而不是/v2/subscriptions,如您的示例所示。

编辑1:考虑问题中编辑1部分中的新有效负载,请注意:

  • 您应该在/v1/subscriptions内使用attrs,而不是condition(错误消息正在抱怨)

  • 您应该在attributes内使用attrs,而不是notification

  • 您应该使用attributes(即查询字符串中没有空格)。请查看NGSIv2 specification

  • 中的示例

例如:

"q": "dFlag>0"

编辑2: 1.2以前的猎户座版本在"expression": { "q": "temperature>40" } 字段之外使用attrsFormat。因此,如果您使用的是Orion 1.1,请尝试使用notification作为订阅有效内容JSON中的第一级字段。