2016-05-17 4 views
2

EDIT 2Wie erstellt man ein Orion NGSIv2-Abonnement, das Cygnus in NGSIv1 benachrichtigt?

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' 

In Orion das Abonnement Register ok (danke für die Tipps in den Kommentaren), aber ich bin das gleiche Problem wie in here sagte, obwohl ich "attrsFormat":"legacy" Ich mache etwas stimmt nicht? Warum verwendet Orion nicht ngsiv1, um die Benachrichtigung an Cygnus zu senden?

The cygnus error trace.

Cygnus zeigt orion antwortet diese:

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

Wenn Sie die folgenden Zeilen in ngsiv1 sein reagieren:

{ 
    "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" 
     } 
    }] 
} 

Original Question

Wie gesagt in 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 .

So bildete ich dieses Abonnement:

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' 

aber orion lass mich nicht registrieren es diesen Fehler zu werfen:

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

Ist das die Möglichkeit, Legacy-Attribute zu verwenden, damit es mit NGSv2 mit Cygnus arbeiten kann? Danke für die Hilfe.

EDIT 1:

die Antwort nach dem Zeichnungstag so sein sollte: Richtig?

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' 

Aber ich bin immer noch einen Fehler:

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

Antwort

2

Verwenden attrs statt attributes (beide in subject.conditions und in notification).

Beachten Sie außerdem, dass callback nicht mehr verwendet wird. Sie müssen verwenden:

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

Außerdem, wenn Benachrichtigungen Sie NGSIv1 Format verwenden sollten in the documentationattrsFormat Feld mit dem Wert legacy in notification wie beschrieben umfassen.

Abschließend ist zu beachten, dass die URL für die korrekte Operation /v2/subscriptions ist, nicht /v1/subscriptions, wie in Ihrem Beispiel gezeigt.

EDIT 1: unter Berücksichtigung der neuen Nutzlast in EDIT 1 Abschnitt in der Frage, dass beachten Sie:

  • Sie attrs innerhalb condition verwenden sollten, nicht attributes (die Fehlermeldung darüber beschwert)

  • sollten Sie attrs innerhalb notification verwenden, nicht attributes

  • Sie sollten "q": "dFlag>0" (d. H. keine Leerzeichen in der Abfragezeichenfolge). Schauen Sie zum Beispiel in den NGSIv2 specification:

ZB:

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

EDIT 2: Orion-Versionen vor 1.2 Verwendung attrsFormat außerhalb notification Feld. Versuchen Sie daher, wenn Sie Orion 1.1 verwenden, "attrsFormat": "legacy" als Feld der ersten Ebene in der Subskriptionsnutzlast JSON zu verwenden.

+0

Vielen Dank für die Antwort, aber ich versuche nur und habe kein Glück, werfen Sie einen Blick auf meine Bearbeitung vielleicht finden Sie, was ich falsch mache –

+0

Ich habe eine "EDIT 1" -Abschnitt zu meinem Beitrag hinzugefügt, um zu beantworten dieser Teil. – fgalan

+0

Bearbeiten 2 in der Frage gemacht, Abonnement ist jetzt registriert, aber Orion reagiert im neuen NGSI-Format. Was habe ich im Abo falsch gemacht? –

Verwandte Themen