2016-05-17 1 views
2

EDIT 2Как сделать подписку ORION NGSIv2, которая уведомляет cygnus в NGSIv1?

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" Делает что-то не так? почему orion не использует ngsiv1 для отправки уведомления в cygnus?

The cygnus error trace.

Cygnus показывает Ориона реагирует следующим образом:

{ 
    "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:

EDIT: note also that you can use NGSIv2 to create/update entities at Orion and have notifications in NGSIv1 if you:

Create the subscription using NGSIv1 operations

Create the subscription using NGSIv2 operations with attrsFormat equal to legacy. Have a look to more detailed information 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"} 

Это способ использовать устаревшие атрибуты, чтобы он мог работать с cygnus с NGSIv2? Спасибо за помощь.

EDIT 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"} 

ответ

2

attrs Используйте вместо attributes (как в subject.conditions и в notification).

Кроме того, обратите внимание, что callback больше не используется. Вы должны использовать:

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

Кроме того, если вы хотите уведомления использовать формат NGSIv1 вы должны включать в себя attrsFormat поле со значением legacy в notification, как описано в the documentation.

Наконец, обратите внимание, что строгий URL-адрес операции: /v2/subscriptions, а не /v1/subscriptions, как показано в вашем примере.

EDIT 1: рассматривает новую полезную нагрузку в EDIT 1 секции в вопросе, отметим, что:

  • Вы должны использовать attrs внутри condition, не attributes (сообщение об ошибке жалуюсь)

  • Вы должны использовать attrs внутри notification, не attributes

  • Вы должны использовать "q": "dFlag>0" (т. нет пробелов в строке запроса). Посмотрите на пример в NGSIv2 specification:

Eg:

"expression": { 
    "q": "temperature>40" 
} 

EDIT 2: версии Orion ранее 1.2 использования attrsFormat вне notification поля. Таким образом, если вы используете Orion 1.1, попробуйте использовать "attrsFormat": "legacy" в качестве поля первого уровня в полезной нагрузке подписки JSON.

+0

Большое спасибо за ответ, но я просто попробую и не повезло, взгляните на мое редактирование, возможно, вы найдете то, что я делаю неправильно –

+0

Я добавил раздел «EDIT 1» на мое сообщение, чтобы ответить эта часть. – fgalan

+0

Редактировать 2, сделанный в вопросе, подписка теперь зарегистрирована, но orion отвечает в новом формате ngsi. Что я сделал неправильно в подписке? –

Смежные вопросы