-->

Subscription in Orion Context Broker Fiware

2019-07-26 18:20发布

问题:

I try to send a subscription to my Orion Context Broker instance. I'm sending this JSON:

{
  "duration": "P1M",
  "reference": "http://130.206.127.23:1026/ngsi10/notifyContext",
  "notifyConditions": [
    {
      "condValues": [
        "PT10s"
      ],
      "type": "ONTIMEINTERVAL"
    }
  ],
  "entities": [
    {
      "id": "1.0",
      "type": "Capsule",
      "isPattern": "false"
    }
  ],
  "attributes": [
    "temperature"
  ]
}

And I receive the next message:

<subscribeContextResponse>
  <subscribeError>
    <errorCode>
      <code>400</code>
      <reasonPhrase>Bad Request</reasonPhrase>
      <details>JSON Parse Error: <unspecified file>(1): invalid escape sequence</details>
    </errorCode>
  </subscribeError>
</subscribeContextResponse>

I put all attributes that it is using in the documentation. But in the webinar Orion Context Broker Webinar - Demo part 2 I can see other attribute called Throttling, but I don't see in the documentation.

What I'm doing bad?

Thanks in advance.

回答1:

I have tested with your request (copy-pasted) and this is the result (with Orion 0.17.0).

Command (you can check that the payload is exactly the one you used):

(curl localhost:1026/v1/subscribeContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
  "duration": "P1M",
  "reference": "http://130.206.127.23:1026/ngsi10/notifyContext",
  "notifyConditions": [
    {
      "condValues": [
        "PT10s"
      ],
      "type": "ONTIMEINTERVAL"
    }
  ],
  "entities": [
    {
      "id": "1.0",
      "type": "Capsule",
      "isPattern": "false"
    }
  ],
  "attributes": [
    "temperature"
  ]
}
EOF

Result:

{
    "subscribeResponse": {
        "duration": "P1M", 
        "subscriptionId": "5489e0bfe5007d3271ab5a61"
    }
}

Thus, my test was ok so I tend to think that the problem is related with encoding and it is not shown in your question post, e.g. the usage of (wrong) intead of " and things like that.

EDIT: another common source of problems is using script files containing the curl request to CB in "DOS text" (typically due to the usage of DOS/Windows text editors). This can be easility detected if you run file yourfile.sh and get the following

yourfile.sh: ASCII text, with CRLF line terminators

instead of the following

yourfile.sh: ASCII text

The solution is quite simple: transform the file to "Unix text", for example using the dos2unix command line tool.