Ожидает ли агент Fiware JSON IoT ответа от устройств? - PullRequest
0 голосов
/ 29 марта 2019

Я использую пример агента Iware Fiware локально.План состоит в том, чтобы подключить это к какому-то устройству и сделать демо.Я использую запрос bin для проверки запросов, отправленных агентом IoT.

После запуска среды с ./services start я вызываю этот сценарий оболочки для регистрации устройства звонка вагент, а затем запустить команду «кольцо».

curl -iX POST \
  'http://localhost:4041/iot/devices' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
  "devices": [
    {
      "device_id": "bell001",
      "entity_name": "urn:ngsi-ld:Bell:001",
      "entity_type": "Bell",
      "protocol": "PDI-IoTA-UltraLight",
      "transport": "HTTP",
      "endpoint": "https://requestbin.fullcontact.com/zhygotzh/iot/bell001",
      "commands": [
        { "name": "ring", "type": "command" }
       ],
       "static_attributes": []
    }
  ]
}
'

curl -iX POST \
  'http://localhost:4041/v1/updateContext' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
    "contextElements": [
        {
            "type": "Bell",
            "isPattern": "false",
            "id": "urn:ngsi-ld:Bell:001",
            "attributes": [
                { "name": "ring", "type": "command", "value": "" }
            ],
            "static_attributes": []
        }
    ],
    "updateAction": "UPDATE"
}'

Это хорошо работает, я получаю ответ 200, и я вижу запрос в корзине запросов.

$ ./setup-ul.sh
HTTP/1.1 201 Created
X-Powered-By: Express
Fiware-Correlator: 8298b65a-8550-4b6e-8a4d-21bc32abdf8a
Content-Type: application/json; charset=utf-8
Content-Length: 2
ETag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
Date: Fri, 29 Mar 2019 11:34:05 GMT
Connection: keep-alive

{}HTTP/1.1 200 OK
X-Powered-By: Express
Fiware-Correlator: c79a1146-05d8-4eb1-8e1c-bf19661cb403
Content-Type: application/json; charset=utf-8
Content-Length: 208
ETag: W/"d0-6+Ce6hwRVmP90ZI667iON6zHtdA"
Date: Fri, 29 Mar 2019 11:34:07 GMT
Connection: keep-alive

{"contextResponses":[{"contextElement":{"attributes":[{"name":"ring","type":"command","value":""}],"id":"urn:ngsi-ld:Bell:001","isPattern":false,"type":"Bell"},"statusCode":{"code":200,"reasonPhrase":"OK"}}]}

Однако, запрос в формате Ultra Light.Я бы предпочел формат JSON.Поэтому я решил заменить изображение в файле составления докера.

  iot-agent:
    image: fiware/iotagent-ul:1.8.0
    hostname: iot-agent

Получает значение

  iot-agent:
    image: fiware/iotagent-json
    hostname: iot-agent

в docker-compose.yml.

Теперь, когдаЯ пытаюсь сделать то же самое с обновленным файлом docker-compose и получаю следующий результат:

$ ./setup.sh
HTTP/1.1 201 Created
X-Powered-By: Express
Fiware-Correlator: 69d6a6ad-a44a-4e57-87dd-4e512d499fee
Content-Type: application/json; charset=utf-8
Content-Length: 2
ETag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
Date: Fri, 29 Mar 2019 11:44:36 GMT
Connection: keep-alive

{}HTTP/1.1 400 Bad Request
X-Powered-By: Express
Fiware-Correlator: 6c9a28b5-0505-456c-bcdb-841df2bc6f62
Content-Type: application/json; charset=utf-8
Content-Length: 388
ETag: W/"184-RqfzTJc6iD9nXX3kAbxZqwruJC0"
Date: Fri, 29 Mar 2019 11:44:37 GMT
Connection: keep-alive

{"contextResponses":[{"contextElement":{"contextElements":[{"type":"Bell","isPattern":"false","id":"urn:ngsi-ld:Bell:001","attributes":[{"name":"ring","type":"command","value":""}],"static_attributes":[]}],"updateAction":"UPDATE"},"statusCode":{"code":400,"reasonPhrase":"HTTP_COMMAND_RESPONSE_ERROR","details":"There was an error in the response of a device to a command [400 ]:null"}}]}

Это, кажется, важная часть: There was an error in the response of a device to a command [400 ]:null.Означает ли это, что агент IoT ожидал какой-то более конкретный ответ от «устройства»?

Запрос можно увидеть в корзине запросов, поэтому он работал до сих пор.Но почему агент думает, что была проблема?Ожидается ли какой-то определенный формат ответа?

Я также попытался связать «протокол» на этапе регистрации устройства с «PDI-IoTA-JSON».Это не помогло.

1 Ответ

0 голосов
/ 03 апреля 2019

Проблема в том, что агент IoT предполагает, что устройство ответит JSON.Ответом по умолчанию на запрос является строка «ok».Это вызвало сбой в агенте.

Запрос считается успешным, если устройство возвращает {}, и еще более успешным, если он возвращает некоторую информацию о результате выполнения команды.Например,

{
  "ring": "successfully rung"
}
...