#amazon-web-services #aws-iot
#amazon-веб-сервисы #aws-iot
Вопрос:
Я просматриваю документацию AWS IoT для теневых состояний и пытаюсь лучше понять использование desired
reported
теневого файла и в нем.
В документации указано:
При изменении состояния тени AWS IoT отправляет / разностные сообщения всем подписчикам MQTT с разницей между желаемым и сообщенным состояниями.
После просмотра остальной части документации я не чувствую, что у меня есть четкое представление о варианте использования desired
vs reported
. Может кто-нибудь объяснить пример использования? Когда мы используем один или другой?
Ответ №1:
Давайте начнем с самого начала, тень устройства — это постоянная виртуальная тень объекта, определенного в реестре AWS IoT. По сути, это документ состояния JSON, который используется для хранения и извлечения информации о текущем состоянии объекта. Вы можете взаимодействовать с теневым файлом устройства с помощью разделов MQTT или вызовов REST API. Основное преимущество Shadows заключается в том, что вы можете взаимодействовать с ним, независимо от того, подключен объект к Интернету или нет.
Теневой документ содержит свойство состояния, описывающее аспекты состояния устройства:
{
"state": {
"desired": {
"color": "RED"
},
"reported": {
"color": "GREEN"
},
"delta": {
"color": "RED"
}
}
}
Вот описание каждого состояния:
- Приложения определяют желаемые состояния свойств устройства путем обновления
desired
объекта. - Устройства сообщают о своем текущем состоянии в
reported
объекте. - AWS IoT сообщает о различиях между желаемым и зарегистрированным состоянием
delta
объекта.
У каждой тени есть зарезервированная тема MQTT и URL-адрес HTTP, который поддерживает get
, update
, и delete
действия над тенью. Давайте посмотрим:
$aws/things/THING_NAME/shadow/update
: опубликовать в этом разделе, чтобы обновить / создать Thing Shadow;$aws/things/THING_NAME/shadow/update/accepted
: AWS IoT публикуетreported
илиdesired
часть документа состояния в этом разделе после принятия запроса на обновление;$aws/things/THING_NAME/shadow/update/rejected
: AWS IoT публикует сообщение об ошибке в этом разделе, когда отклоняет запрос на обновление;$aws/things/THING_NAME/shadow/update/documents
: AWS IoT публикует документ состояния с предыдущей и текущей информацией о состоянии в этом разделе всякий раз, когда успешно выполняется обновление теневого файла;$aws/things/THING_NAME/shadow/update/delta
: AWS IoT публикует документ состояния разности ответов на этот раздел, когда принимает изменение для теневого объекта, а документ состояния запроса содержит разные значения для желаемого и сообщенного состояний.
Вот пример. Допустим, у нас есть очиститель воздуха, и мы хотим изменить скорость вращения вентилятора. Поток будет следующим:
- Пользователь изменяет скорость вращения вентилятора в мобильном приложении air purifier
- Мобильное приложение публикует следующее сообщение в формате JSON в этом разделе MQTT:
$aws/things/THING_NAME/shadow/update
для обновления тени устройства с новым желаемым состоянием :"fanSpeed": 50
. Это будет выглядеть так:
{
"state": {
"desired": {
"fanSpeed": 50
}
}
}
- При успешном обновлении теневого файла, если предыдущее
reported
состояние отличается от"fanSpeed": 50
, AWS IoT опубликуетdesired
состояние в разделе delta$aws/things/THING_NAME/shadow/update/delta
. - Документ о теневом состоянии может выглядеть следующим образом:
{
"state": {
"desired": {
"fanSpeed": 50
},
"reported": {
"fanSpeed": 100
},
"delta": {
"fanSpeed": 50
}
}
}
- Устройство (наш очиститель воздуха), подписанное на раздел delta, выполнит запрошенную операцию (в данном случае установите скорость вентилятора на 50) и сообщит о новом состоянии в AWS IoT Device Shadow, используя раздел Обновления
$aws/things/THING_NAME/shadow/update
со следующим сообщением JSON:
{
"state": {
"reported": {
"fanSpeed": 50
}
}
}
Теперь скорость вращения вентилятора нашего очистителя воздуха составляет 50… и вот как это работает 😉