Как Azure IoT Hub взаимодействует с устройствами Embedded / IoT?

13

Я работаю на платформе IoT Azure и понимаю, как устройства отправляют данные в концентратор IoT (если я не ошибаюсь, это просто вызов веб-службы или что-то подобное).

Но мне интересно, как концентратор IoT отправляет данные / команды / ввод на устройства, потому что мы не работаем над концентратором IoT для связи между устройствами (у нас нет требования передавать данные на устройства). Может ли IoT-концентратор напрямую взаимодействовать с устройствами? (Использование уникального идентификатора устройства или использование любого уникального идентификатора, такого как IP, Mac-адрес и т. Д.).

Где-то я читал, что устройства продолжают запрашивать IoT-концентратор, если IoT-концентратор имеет какой-либо вход для них, а IoT-центр затем отправляет данные / команды / ввод устройствам в ответ. Это правда? Если нет, то, пожалуйста, объясните.

Shri
источник

Ответы:

14

Модель, которую используют подключенные к IoT Hub устройства, заключается в том, что они никогда не будут принимать входящие подключения. Устройства-концентраторы IoT никогда не выступают в роли «сервера», и это является важной частью модели безопасности в IoT Azure. Окончательная модель на этом заключена в Клеменс Вастерс «Служба помощи связи» .

Поэтому устройства всегда «опрашивают» внешнюю службу для отправки данных или получения команд. API-интерфейсы создают впечатление, что данные отправляются на устройство, но это всегда устройство, устанавливающее исходящее соединение.

Центр IoT делает это двумя способами:

  1. Отправляя данные в конечную точку устройства /devices/{deviceId}/messages/devicebound. Это конечная точка обмена сообщениями AMQP, похожая на очередь или подписку на тему. При чтении команд устройство должно подтвердить получение, если это необходимо, что является частью базового протокола AMQP. Это работает так же с MQTT, и https является допустимым запасным вариантом. API оборачивает все это для вас. Существуют дополнительные концепции, такие как «прямые методы», которые представляют собой обертку API по сути того же базового протокола сообщений.
  2. С помощью серверного устройства-близнеца, который является способом логической синхронизации свойств между устройством и сервером. Вы устанавливаете свойство для двойника устройства, и когда устройство синхронизируется, это свойство будет синхронизироваться с устройством. Это меньше основано на сообщениях и основано на протоколе управления устройством LWM2M.

Большая часть «опроса», соединения, совместного использования соединений, квитанций и т. Д. Должна рассматриваться как часть протокола AMQP (или MQTT), который, в свою очередь, включен в IoT Hub SDK. Таким образом, вышесказанное очень упрощено, но, повторюсь, IoT Hub не может и никогда не будет пытаться отправлять данные на ip-адрес / порт вашего устройства.

Саймон Манро
источник
Спасибо @Simon, теперь мне ясно, что устройства отвечают только за то, чтобы вызывать IoT-хаб для отправки или получения данных. Вы упомянули «Azure IoT» в своем ответе, поэтому просто хотите подтвердить, что ваше приложение для ответов на всех платформах IoT? или только для Azure IoT.
Шри
@ShrikantBhusalwad Ответ не может быть применим ко всем платформам, потому что многие еще не разработаны. Это обычная модель, это хорошо для безопасности, но другие модели могут быть оправданы - особенно в новой среде.
Шон
2
Я не знаком со всеми платформами, но большинство облачных платформ будут похожими. AWS использует MQTT, который в основном одинаков. Как отмечает @sean, он не может применяться ко всем платформам, но очень мало облачных платформ будут препятствовать рискованным мерам безопасности. Методы, в которых используются модели «устройство-сервер», будут либо устаревшими, либо будут гораздо более строгими в плане безопасности (по мере развития шаблонов границ или ячеек). IoT Azure архитектурно поддерживает полевые и облачные шлюзы для решения проблем с устаревшими или периферийными устройствами
Simon Munro
Правила Azure IoT Hub MQTT изложены по адресу docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support
Поддержка Gambit