アプリケーションに AWS IoT を使用することを考えています。このアプリケーションでは、数千の小さなビットマップ ディスプレイ (独自のワイヤレス プロトコルで接続) が分散ゲートウェイ (PC または Raspberry Pi) の背後 (おそらく数百) に配置されています。
これまでのところ、次のコンセプトを思いつきました。
ゲートウェイ PC は MQTT セッションを終了します。独自のデバイス テーブルはありません。
thingname = <gatewayId>_<displayId>
表示ビットマップは S3 に保存されます (ファイル名 = モノの名前)
ディスプレイの更新は、S3 ファイルを置き換えてから、デバイス シャドウの目的の状態でビットマップ バージョン (SHA など) を更新するだけです。
ゲートウェイは、次のような更新にサブスクライブする必要があります
/update/<gatewayId>/#
/update/<gatewayId>_<displayId>
from toを再発行するルールがあります/update/<gatewayId>/<displayId>
(モノの名前にスラッシュを含めることはできず、MQTT のワイルドカードは完全なパス コンポーネントでなければならないため)。受信したメッセージごとに、ゲートウェイは S3 からビットマップをダウンロードしてディスプレイに送信し、報告された状態を新しいバージョンに更新します。
オンラインに戻った切断されたゲートウェイをどのように処理しますか?
サブスクリプションは永続的ではないため、(そのゲートウェイから) 目的の状態 != 報告された状態のすべてのものを何らかの方法で見つけて、それらを再度更新する必要があります。
それを行うためのルールはありますか?アイデアは、ゲートウェイが/reconnect/<gatewayId>
オンラインに戻ったときに再接続メッセージ ( など) を発行することです。ルールは、望ましい状態 != 報告された状態である、そのゲートウェイのすべてのデバイス シャドウを見つけて公開する必要があります。
注:デバイス シャドウを使用せずに、独自のデータベースを使用してメカニズムをプログラムできることはわかっています。しかし、アイデアはそのために IoT メカニズムを使用することでした。
別の質問: ビットマップの作成は非常に高速です (1 秒あたり 1000 の可能性があります) が、ディスプレイへの送信は非常に遅くなる可能性があります (特に、最初のビットマップの送信には 1 分かかる場合があります)。したがって、最初のメッセージが確認される前に、(1 つのゲートウェイに対して) 数千のビットマップが作成される可能性があります。これは問題ですか?