Как клиент Интернета вещей сообщает об изменении свойства в Центр Интернета вещей?

Я использую библиотеку azure-iot-sdk-c, чтобы устройство iot могло взаимодействовать с центром Интернета вещей. Я использую IoTHubDeviceClient_LL_SetDeviceTwinCallback () для регистрации функции обратного вызова в моем клиентском коде, которая вызывается при изменении свойства состояния двойника устройства. В этом коде я изменяю свойства своего устройства и вызываю IoTHubDeviceClient_LL_SendReportedState (), чтобы уведомить концентратор, что я внес запрошенные изменения.

Но что произойдет, если кто-то войдет в комнату, где находится мое устройство, и изменит одно из этих свойств. Код моего устройства получает уведомление об изменении этого свойства, но я хотел бы использовать эту возможность, чтобы центр Интернета вещей знал, что свойство изменилось. Как я могу это сделать? В клиентском sdk нет "set_desired_property".


person Jon Th    schedule 25.07.2019    source источник


Ответы (1)


Вы бы отправили его обратно как отчет о состоянии. Например, если устройство отслеживает свет, и кто-то физически его выключает, то состояние света выключено. Вы отправляете это как сообщенное состояние света.

person Mark Radbourne    schedule 25.07.2019
comment
Спасибо. Я действительно этим занимаюсь. И кажется, что иногда это работает, а иногда нет. Мне еще предстоит выяснить, в каком сценарии, но это, вероятно, связано с тем, когда и сервер, и клиент меняют свойства, потому что иногда свойство синхронизируется. Я предполагаю, что сервер настаивает на определенном значении свойства, клиент хочет чего-то еще, а сервер хочет сказать последнее слово или что-то в этом роде. Возможно, мне нужно позаботиться о каком-то обратном вызове, чтобы сервер знал, что клиент действительно изменил свойство, и теперь клиент может изменить его по своему желанию? - person Jon Th; 26.07.2019
comment
Я могу воспроизвести ошибку следующим образом: если сервер устанавливает для свойства значение 1, то клиент, похоже, не может установить для этого же свойства значение 0 - свойство переходит в режим синхронизации. Возможно, 0 означает то же самое, что и null или что-то в этом роде? Но если сервер устанавливает для свойства значение 0, то клиент может изменять его взад и вперед. - person Jon Th; 26.07.2019
comment
Пожалуйста .... так что в основном кажется, что если сервер устанавливает определенное свойство в 1, клиент не может изменить его на 0. Но если сервер устанавливает его в 0, клиент может изменять его взад и вперед. Кто-нибудь знает, является ли значение 0 каким-то особым значением? Кстати. единственные возможные значения - 0 и 1. - person Jon Th; 29.07.2019
comment
Хорошо, я сделал еще тест. Похоже, это не связано с особым значением 0. Что это такое: кто решает, какой должна быть ценность свойства - сервер или клиент? Иногда я попадаю в состояние синхронизации свойства, когда сервер запросил изменение свойства, клиент отправил правильное указанное свойство - а затем клиент хочет изменить свойство, и сервер уходит - нет, я попросил другое значение и Будет ли установлено состояние для синхронизации. Кто-нибудь может помочь? Кто отвечает за изменения собственности, клиент или сервер? У них обоих должна быть поговорка, ИМО. - person Jon Th; 29.07.2019