Двойник устройства не полностью возвращается с помощью GetTwinAsync()

Я использую пакет SDK клиента устройства Azure IoT для .NET Core (1.17.0-preview-001, но пробовал и стабильную версию 1.7.0). При вызове deviceClient.GetTwinAsync()все поля NULLкроме Properties (есть как требуемые, так и сообщенные): введите здесь описание изображения

По крайней мере, такие вещи, как DeviceId, я ожидаю там. Кроме того, когда я добавляю какие-либо теги в DeviceTwin, они не доходят до устройства.

Это ошибка или я что-то упускаю?


person silent    schedule 21.03.2018    source источник


Ответы (2)


Двойник устройства, состоящий из тегов, свойств (желаемых, заявленных) и метаданных. И мы можем запрашивать свойства только из приложения для устройства, как показано на рисунке ниже, в виде документа указано: введите здесь описание изображения

Вы также можете ссылаться на конечные точки Azure IoT Hub для поддержки конкретной операции центром Интернета вещей Azure, как показано на рисунке ниже:

введите здесь описание изображения

Управление двойниками устройств. Каждый центр Интернета вещей предоставляет набор конечных точек HTTPS REST, обращенных к службе, для запроса и обновления двойников устройств (обновление тегов и свойств).

Это поведение также легко проверить, отслеживая необработанные данные с помощью Fiddler. Например, вот запрос на получение двойника устройства из Azure IoT Hub с использованием протокола MQTT через MQTTBOX: введите здесь описание изображения

И, насколько я понимаю, приложению на устройстве редко нужна эта информация. Вы можете управлять двойником устройства из конечной точки службы, а не из клиентского приложения. Если у вас есть такой особый сценарий, вы можете отправить отзыв из Azure IoT — UserVoice .

person Fei Xue - MSFT    schedule 23.03.2018

Вы можете использовать Microsoft.Azure.Devices, чтобы получить двойник устройства. Это SDK клиента службы для Центра Интернета вещей Azure.

dynamic registryManager = RegistryManager.CreateFromConnectionString("{connectionString}");
var deviceTwin = await registryManager.GetTwinAsync("{device name}");

В этой статье вы, возможно, получите больше информации о пакетах SDK Azure IoT.

  • Device SDK позволяют создавать приложения, которые работают на ваших IoT-устройствах. Эти приложения отправляют данные телеметрии в ваш центр Интернета вещей и при необходимости получают сообщения из вашего центра Интернета вещей.
  • Сервисные SDK позволяют вам управлять центром Интернета вещей и при необходимости отправлять сообщения на ваши устройства Интернета вещей.
person Michael Xu - MSFT    schedule 22.03.2018
comment
Я думаю, вы упустили смысл моего вопроса: я работаю над устройством, а не над сервисным сервером. В этом случае использование SDK клиента службы было бы очень плохой идеей, поскольку я не хочу использовать служебные ключи на устройствах. - person silent; 22.03.2018
comment
@silent, вы можете обратиться к Понять и использовать дубликаты устройств в Центре Интернета вещей и разрешения Центра Интернета вещей, это связано с требованием разрешения ServiceConnect. - person Michael Xu - MSFT; 22.03.2018
comment
Хорошо, я вижу, что там написано: Теги не видны приложениям устройства. (не уверен, почему, но я предполагаю, что за этим стоит какая-то логика дизайна). Но он ничего не говорит о других данных, таких как DeviceId. То же самое относится ко всем полям, кроме свойств? Если это так, то это должно быть указано. - person silent; 22.03.2018
comment
@silent, есть еще один необязательный способ получить двойники устройств, используя REST API-интерфейсы Azure IoT Hub Device Twins. См. API-двойник устройства. - person Michael Xu - MSFT; 23.03.2018