В настоящее время я разрабатываю сеть на основе Fiware, в которой у меня есть устройства, которые сообщают через HTTP и JSON через MQTT и работают нормально. Сеть увеличилась, и теперь мне нужно подключить несколько устройств, использующих протокол UltraLight. При этом я столкнулся с некоторыми проблемами.
Я следовал (насколько мне известно) официальной документации, предоставленной FIWARE Foundation на разных сайтах (официальный репозиторий github, readthedocs и т. д.). Я попытался установить новый агент на тот же компьютер, что и агент JSON, и это не сработало (подробнее об этом позже). Чтобы исключить любые конфликты, я использовал другую виртуальную машину, в которой — на этот раз поверх Docker — я развернул новый экземпляр Orion CB, Mosquitto CB, mongo и агент; новый полный стек Fiware, по сути.
После того, как все было развернуто, я создал новую сервисную группу на агенте через остальные API (POST /iot/devices), дал ей ключ API и адрес CB. На этом шаге я оставил поле ресурса пустым, потому что не знаю, какую роль он играет во всей системе. Ответ был 201, как и ожидалось. Следующим шагом было предоставление устройства, которое я сделал, отправив POST в агент/iot/устройства с нужными мне атрибутами и ключом API, упомянутым в последнем абзаце. И снова ответ был 201.
Проблема возникает, когда я пытаюсь опубликовать новое измерение с помощью mosquitto_pub. Команда работает без сбоев, но объект в Орионе не обновляется. При доступе к базе данных Orions (монго) я могу убедиться, что объект был успешно создан, но имеет пустое значение. Более того, проверка логов дает следующее:
mosquitto | 1559157902: New connection from 10.150.150.173 on port 1883.
mosquitto | 1559157902: New client connected from 10.150.150.173 as mosqpub|28750-mqtt (p1, c1, k60).
fiware-iot-agent | time=2019-05-29T19:25:02.374Z | lvl=DEBUG | corr=2c8aa6e3-faab-4166-9e20-0b362c165939 | trans=2c8aa6e3-faab-4166-9e20-0b362c165939 | op=IoTAgentNGSI.MongoDBGroupRegister arams ["resource","apikey"] with queryObj {"resource":"/iot/d","apikey":"apikeymia"} | comp=IoTAgent
fiware-iot-agent | time=2019-05-29T19:25:02.381Z | lvl=DEBUG | corr=2c8aa6e3-faab-4166-9e20-0b362c165939 | trans=2c8aa6e3-faab-4166-9e20-0b362c165939 | op=IoTAgentNGSI.MongoDBGroupRegister elds [["resource","apikey"]] not found: [{"resource":"/iot/d","apikey":"apikeymia"}] | comp=IoTAgent
fiware-iot-agent | time=2019-05-29T19:25:02.382Z | lvl=ERROR | corr=2c8aa6e3-faab-4166-9e20-0b362c165939 | trans=2c8aa6e3-faab-4166-9e20-0b362c165939 | op=IOTAUL.Common.Binding | srv=n/a | essing device measures [/apikeymia/motion003/attrs] | comp=IoTAgent
mosquitto | 1559157902: Client mosqpub|28750-mqtt disconnected.
после каждой попытки публикации нового измерения.
Любая помощь будет оценена
Спасибо! Хорошо знать
In this step I left the resource field empty, because I don´t really know what role does it play in the whole system
Глядя на логи:
[...] queryObj {"resource":"/iot/d","apikey":"apikeymia"} | comp=IoTAgent
[...] not found: [{"resource":"/iot/d","apikey":"apikeymia"}] | comp=IoTAgent
Я бы предложил использовать "/iot/d"
вместо пустого поля resource
. Может быть, это могло бы решить проблему.
Я попробую. Спасибо за быстрый ответ
Судя по всему, он работал нормально. Я попытаюсь воспроизвести это в производственной среде. Если это сработает, я отмечу ответ как правильный. Не могли бы вы объяснить, какова роль ресурса? И должен ли я каждый раз использовать значение по умолчанию? заранее спасибо
Это сработало! Спасибо! Если бы вы могли ответить на мой вопрос в последнем комментарии, я был бы очень признателен!
Поведение подготовки MQTT связано со следующим проблема — в какой-то момент между выпусками требуемое значение по умолчанию переключалось между пустой и /йот/д.
Отступ текста четыре пробела для форматирования как код. Я отправил правку.