Пограничный шлюз преобразования идентификационной информации Azure IOT: понимание

Я пытаюсь создать шлюз преобразования идентификационной информации, как описано в здесь.

Я также прочитал много документации Microsoft об их решении IoT.

У меня есть :

  1. листовые устройства (A), подключенные к моему шлюзу по настраиваемому протоколу без прямого подключения к концентратору.
  2. шлюзовые устройства (B), действующие как устройство IoT Edge, подключенные к A и к IoT Hub.
  3. Мой Центр Интернета вещей.

Насколько я понимаю:

  • мой IoT Edge должен зарегистрировать каждое устройство в Центре Интернета вещей, таким образом, каждое устройство A будет представлено в моем концентраторе, и мы сможем отправлять сообщения напрямую через его идентификатор.
  • Я могу отправлять сообщения и прослушивать их на своем шлюзе через маршрут / устройства / {deviceId} / messages

Для примера скажем, что у меня есть:

  • устройство IoTEdge с идентификатором: Edge1
  • устройство IoTEdge с идентификатором: Edge2
  • устройство с идентификатором: DeviceA, подключенное к Edge1
  • устройство с идентификатором: DeviceB, подключенное к Edge2

То, что я не понимаю, поскольку нет связи между концентратором и конечными устройствами, заключается в том, как, когда я отправлю сообщение на DeviceA с помощью / devices / DeviceA / messages, концентратор будет знать, какой адрес шлюза и как слушать это из моего шлюза. Короче говоря, выполнение (раз) мультиплексирования

  • Есть ли способ справиться с этим автоматически с помощью Центра Интернета вещей, которого я не вижу? GatewayHostName внутри строки подключения помогает?
  • Должен ли я обрабатывать это вручную, отправляя вместо этого все мои сообщения на свой идентификатор шлюза (например, на устройства / Edge1 / messages) и отправляя окончательный идентификатор целевого устройства в теле моего сообщения? Если да, я не понимаю преимущества регистрации каждого устройства в HuB.
  • Должен ли я прослушивать маршрут каждого подключенного устройства внутри моего шлюза (например, / devices / DeviceA / messages для Edge1)?

Спасибо за помощь.


person Magnas    schedule 14.02.2018    source источник


Ответы (1)


Исходя из того, что я понимаю о вашем сценарии, вы пытаетесь отправить сообщение из облака в модуль, работающий на устройстве Edge, а затем этот модуль отправляет сообщение на устройство ниже по потоку. Сообщения C2D (облако на устройство) не поддерживаются для пограничных устройств и модулей. Вы можете использовать методы C2D, предоставляемые ServiceClient в следующем пакете https://www.nuget.org/packages/Microsoft.Azure.Devices/1.16.0-preview-001 и вызовите метод модуля. Затем модуль может передать соответствующие данные своему нижерасположенному устройству.

person jadsa    schedule 15.02.2018
comment
Итак, если я понимаю, я закодирую метод на модуле моего пограничного устройства, передающий данные его подчиненной службе, вызываемой сервером с помощью ServiceClient.InvokeDeviceMethodAsync (...)? : D - person Magnas; 19.02.2018
comment
Пожалуйста, поясните в своем сообщении значение нижестоящего сервиса и сервера. Я думаю, вы правильно сформулировали это, но я хочу убедиться. - person jadsa; 20.02.2018
comment
Это уже не правильно. По крайней мере, с iotedge 1.0.9+ вы можете вызывать прямые методы в пограничном модуле - на портале Azure или программно. - person cardinalPilot; 10.06.2020