Ни один объект JSON не может быть декодирован — брокер контекста

Я пытаюсь использовать связь брокера контекста orion на двух машинах CentOS 6.6. На целевой машине я сделал:

./accumulator-server.py 1028 /accumulate mywebpage.lan on

И на моей локальной машине я сделал:

[DevF12@localhost ~]$ (curl mywebpage.lan:1028/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool ) <<EOF
> {
>     "contextElements": [
>         {
>             "type": "Room",
>             "isPattern": "false",
>             "id": "Room2",
>             "attributes": [
>             {
>                 "name": "temperature",
>                 "type": "float",
>                 "value": "777"
>             },
>             {
>                 "name": "pressure",
>                 "type": "integer",
>                 "value": "711"
>             }
>             ]
>         }
>     ],
>     "updateAction": "APPEND"
> }
> EOF

Результат на целевой машине:

POST http://mywebpage.lan:1028/v1/updateContext
Content-Length: 456
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: mywebpage.lan:1028
Accept: application/json
Content-Type: application/json

{    "contextElements": [        {            "type": "Room",            "isPattern": "false",            "id": "Room2",            "attributes": [            {                "name": "temperature",                "type": "float",                "value": "777"            },            {                "name": "pressure",                "type": "integer",                "value": "711"            }            ]        }    ],    "updateAction": "APPEND"}=======================================

192.168.1.11 - - [14/Apr/2015 15:07:36] "POST /v1/updateContext HTTP/1.1" 200 -

И сообщение, которое я получаю с локальной машины:

No JSON object could be decoded

Так что все это значит?

<сильный>1. Говорит ли код 200 об успешном создании Room2?

<сильный>2. Почему тогда я получаю сообщение «Не удалось декодировать JSON»?

<сильный>3. Все это поднимает еще один вопрос: означает ли это, что метеостанция from-my-remote-sensor/29533030?noredirect=1#comment47232739_29533030">описанный в моем предыдущем посте также должен работать на CentOS для отправки сообщений брокера контекста?


person Vrankela    schedule 14.04.2015    source источник


Ответы (1)


Я думаю, что в вашем тесте есть «концептуальное» недоразумение. Вы отправляете updateContext на 1028, который является не портом CB (предполагаемым для обработки сообщений updateContext), а портом накопителя (целью которого является обработка сообщения notifyContext, отправленного CB как следствие сообщений updateContext , но не обрабатывает сами сообщения updateContext).

Как правило, Orion Context Broker по умолчанию работает на порту 1026.

С учетом этого конкретные ответы таковы:

  • Говорит ли код 200 об успешном создании Room2? Код 200, о котором сообщает аккумулятор, просто означает, что аккумулятор получил и подтверждает сообщение (любое сообщение, учитывая, что аккумулятор является «фиктивным» приложением, просто для тестирования, он не выполняет никакой реальной обработки этого).

  • Почему я получаю сообщение "Не удалось декодировать JSON"? Попробуйте удалить | python -mjson.tool в командной строке curl.

  • Все это поднимает еще один вопрос: означает ли это, что метеостанция, описанная в моем предыдущем посте, также должна работать на CentOS, чтобы отправлять сообщения брокера контекста? Не уверен насчет «метеостанции» в ваш случай, но если вы имеете в виду, что клиент отправляет updateContext в CB, его не нужно запускать в CentOS. Единственным требованием к клиенту является совместимость с Orion API и сетевое подключение к тому хосту (и порту), на котором Orion прослушивает.

person fgalan    schedule 14.04.2015
comment
Итак, вы говорите, что я должен ориентироваться на порт 1026, а не на порт 1028? Поскольку в CentOS у меня возникают проблемы с открытием порта 1026 в брандмауэре, вместо 1026 я получаю нечто, называемое cap. Есть ли способ изменить порт брокера контекста по умолчанию? - person Vrankela; 15.04.2015
comment
вы можете изменить порт, который использует Orion, с помощью параметра командной строки --port NN. Кроме того, не беспокойтесь о шапке имени. Это просто соглашение об именах, которое ОС использует из какого-то файла конфигурации. Вы можете смело игнорировать это. - person LeandroGuillen; 16.04.2015
comment
Пожалуйста, проверьте следующие вопросы и ответы: stackoverflow.com/ вопросы/23292416/ - person fgalan; 16.04.2015