Разница между желаемыми полями теневого файла AWS IoT и полями, о которых сообщается

#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 публикует документ состояния разности ответов на этот раздел, когда принимает изменение для теневого объекта, а документ состояния запроса содержит разные значения для желаемого и сообщенного состояний.

Вот пример. Допустим, у нас есть очиститель воздуха, и мы хотим изменить скорость вращения вентилятора. Поток будет следующим:

  1. Пользователь изменяет скорость вращения вентилятора в мобильном приложении air purifier
  2. Мобильное приложение публикует следующее сообщение в формате JSON в этом разделе MQTT: $aws/things/THING_NAME/shadow/update для обновления тени устройства с новым желаемым состоянием : "fanSpeed": 50 . Это будет выглядеть так:
 {
  "state": {
    "desired": {
      "fanSpeed": 50
    }
  }
}
 
  1. При успешном обновлении теневого файла, если предыдущее reported состояние отличается от "fanSpeed": 50 , AWS IoT опубликует desired состояние в разделе delta $aws/things/THING_NAME/shadow/update/delta .
  2. Документ о теневом состоянии может выглядеть следующим образом:
 {
  "state": {
    "desired": {
      "fanSpeed": 50
    },
    "reported": {
      "fanSpeed": 100
    },
    "delta": {
      "fanSpeed": 50
    }
  }
}
 
  1. Устройство (наш очиститель воздуха), подписанное на раздел delta, выполнит запрошенную операцию (в данном случае установите скорость вентилятора на 50) и сообщит о новом состоянии в AWS IoT Device Shadow, используя раздел Обновления $aws/things/THING_NAME/shadow/update со следующим сообщением JSON:
 {
  "state": {
    "reported": {
      "fanSpeed": 50
    }
  }
}
 

Теперь скорость вращения вентилятора нашего очистителя воздуха составляет 50… и вот как это работает 😉