Я подумываю об использовании AWS IoT для приложения, где за (возможно, сотнями) распределенных шлюзов (ПК или Raspberry Pi) есть несколько тысяч небольших растровых дисплеев (связанных с проприетарным беспроводным протоколом).
Пока что я придумал следующую концепцию:
ПК шлюза завершает сеанс MQTT. У него нет собственной таблицы устройств.
thingname = <gatewayId>_<displayId>
Растровые изображения дисплея хранятся на S3 (имя файла = имя объекта)
Обновление дисплеев - это просто замена файла S3, а затем обновление версии растрового изображения (например, SHA) в желаемом состоянии тени устройства.
Шлюз должен будет подписаться на такие обновления, как
/update/<gatewayId>/#
Будет правило, которое повторно публикуется с
/update/<gatewayId>_<displayId>
на/update/<gatewayId>/<displayId>
(поскольку имена вещей не могут содержать косые черты, а подстановочные знаки в MQTT должны быть полными компонентами пути)Для каждого полученного сообщения шлюз загружает растровое изображение из S3, отправляет его на дисплей, а затем обновляет сообщенное состояние до новой версии.
Как мне обрабатывать отключенные шлюзы, которые снова подключены к сети?
Подписки не являются постоянными, поэтому мне как-то нужно найти все вещи (с этого шлюза), где желаемое состояние! = Сообщаемое состояние, и обновить их снова.
Может быть такое правило? Идея состоит в том, чтобы шлюз опубликовал сообщение о повторном подключении (например, /reconnect/<gatewayId>
), когда оно вернется в сеть. Правило должно найти все тени устройств для этого шлюза, где желаемое состояние! = Сообщаемое состояние, и опубликовать их.
NB: Я знаю, что могу запрограммировать механизм без тени устройства с собственной базой данных. Но идея заключалась в том, чтобы использовать для этого механизм IoT.
Другой вопрос: создание растровых изображений происходит очень быстро (может составлять 1000 в секунду), отправка на дисплеи может быть очень медленной (особенно отправка первого растрового изображения из группы может занять минуту). Таким образом, может быть создано несколько тысяч битовых карт (для одного шлюза) до того, как будет подтверждено первое сообщение. Это проблема?