Azure IOT Central - сообщения от облака к устройству с использованием MQTT - PullRequest
1 голос
/ 24 февраля 2020

Мое устройство IOT подключено к центральному IOT и может получать данные с помощью функции экспорта. Теперь я хочу отправить некоторую команду на Мое устройство, например, ниже json данных, которые он ожидает отправить сердцебиение устройства по подписанному URL'у устройства / .... ba50621 / messages / devicebound / # '

{ "action": "heartBeat", 
  "requestId": "b2c3d4e5-3424-4dca-32dc-12b73290cfed"
}

я создал приложение-службу, сославшись на ссылки ниже, чтобы отправить сообщение Cloud на устройство,

Stackoverlow и и Пример приложения

используемое соединение строка как,

"HostName=asdasdas.azure-devices.net;DeviceId=asdasdasda50621;SharedAccessKey=nXmyveEPrV....pmo9jULvDtik="

Эта строка подключения была получена, когда устройство получило регистр через dps. Я использовал это в приложении службы для подключения. Я не знаю, правильно ли это.

Когда приложение попыталось отправить сообщение, я получил несанкционированную ошибку. В документации выше ссылка говорит, чтобы получить строку подключения из политики общего доступа IOT-хаба. но я использую iot central и использовал приведенную выше строку подключения.

Kindl, помогите мне исправить это.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

В случае, когда ваше приложение IoT C является НЕ устаревшим приложением, вы можете использовать предварительное приложение IoT C (которое является CapabilityModel управляемым типом модели) с поддержкой API REST для вызова вашего устройства. В настоящее время предварительная версия не имеет функции, которой вы пытаетесь достичь, такой как отправка C2D-сообщения на устройство.

Предварительный просмотр IoT C поддерживает только вызов метода устройства - Выполнить команду . Следующие фрагменты экрана продемонстрировали эту функцию. В этом примере я использую свой Azure IoT Hub Tester , где виртуальные устройства используют протокол MQTT непосредственно к базовому IoT Hub Центрального приложения IoT.

Я создал бесплатное приложение IoT Central с шаблоном AzureKit ESP32 , зарегистрировано и подготовлено для device1 и подключено с помощью Azure IoT Hub Tester:

  1. Отображение команды echo Модель PnP: enter image description here

  2. Вызов команды echo вызовом REST POST. Обратите внимание, что sastoken авторизации должен быть создан на странице Токены администрирования / API .

enter image description here

Устройство 1 получило прямой вызов и опубликовало свой ответ (обратите внимание, что этот экран не был снят из-за его короткого ограничения времени ответа). В следующем фрагменте экрана показан полный вызов syn c REST с устройством1. Обратите внимание, что эта предварительная версия не обрабатывает полезную нагрузку ответа на основе упомянутого документа и модели PnP.

enter image description here

Наконец, этот фрагмент экрана показывает историю этого командного действия через REST:

enter image description here

Обратите внимание, что также отсутствует объект ответа от устройства, как описано, описан в схеме CapabilityModel.

ОБНОВЛЕНИЕ

Я добавил отсутствующий фрагмент экрана на стороне устройства, когда метод echo было вызвано:

enter image description here

Как видно на рисунке выше, устройство получило полезную нагрузку REST POST и опубликовало ответ на invoker на основе схемы модели PnP.

ОБНОВЛЕНИЕ 2

Следующие фрагменты экрана демонстрируют вызов команды upgrade для device4 . Обратите внимание, что device4 - это устройство PnP, созданное из шаблона SmartConnect FM-201 IoT Gateway .

enter image description here

device4 получил сообщение прямым методом upgrade :

enter image description here

device4 отправлено ответ обратно на invoker и приложение IoT C. На следующем рисунке показана его история:

enter image description here

Обратите внимание, снова отсутствует объект ответа в ответе REST, а также в приложении IoT C , Я надеюсь, что это ошибка в этой предварительной версии, и она скоро исправит ее, следуя схеме CapabilityModel.

1 голос
/ 24 февраля 2020

Обмен сообщениями между облаками и устройствами в IoT Central работает несколько иначе, чем в обычном концентраторе IoT. Вместо того, чтобы подключать клиент службы к вашему IoT-концентратору, вы должны использовать IoT Central REST API.

Вы можете отправлять команды на ваше устройство или обновлять свойство. Полная документация, включая образцы, здесь . Вы можете найти документацию для отправки команд на ваши устройства здесь .

...