AWSコンソールのテストページからデバイスシャドウの更新・取得の動作確認をしてみる

2020.03.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

AWSでIoTデバイスのステート管理を行う場合は、IoT Coreのデバイスシャドウがよく利用されます。そしてこのデバイスシャドウを利用したシステムを実装する際に、

  • デバイスシャドウのステータスをMQTTトピックを使って更新・取得する簡単な動作確認をしたい。
  • ただし、端末のローカルにMQTTクライアントやデバイスの証明書及び秘密鍵を用意してテストするほどではない。

ということがあります。そんな時にはAWS IoTのコンソールのテストページを利用すると便利です。

テストページからデバイスシャドウを更新してみる

実際にテストページからデバイスシャドウのステータスを更新してみます。

AWS IoTで作成済みのシングdemoThingがあります。[モノ] - [demothing] - [シャドウ]ページを開くと、下記の通り現在のシャドウステータスはまだ一度も更新されていないため{}であることが確認できます。 image.png

ここでAWS IoTのテストページを開きます。MQTTクライアントへのPublishはページ下部の[発行]から行うことができます。 image.png

デバイスシャドウの更新はトピック$aws/things/<シング名>/shadow/updateにステータスデータをpublishすれば行うことができます。シングdemoThingのデバイスシャドウであれば、対象トピックは$aws/things/demoThing/shadow/updateとなります。

このトピックにテストページから以下のデータをPublishしてみます。「demoThingデバイスの現在のcolorステータスはredである」という更新です。

{
    "state": {
        "reported": {
            "color": "red"
        }
    }
}

テスト画面の[発行]部分でトピック名とデータを指定して、[トピックに発行]をクリックします。 image.png

シングdemoThingのシャドウページを見ると、先ほどPublishしたデータの内容でシャドウステータスが{"color": "red"}に更新されました。 image.png

続けてテストページより「demoThingデバイスのcolorステータスがblueに更新された」というデータをPublishしてみます。 image.png

デバイスシャドウ側のステータスが{"color": "blue"}に更新されました。 image.png

テストページからデバイスシャドウを取得してみる

また、$aws/things/<デバイス名>/shadow/get/acceptedをSubscribeした状態で、$aws/things/<デバイス名>/shadow/getへ空データをPublishすれば、デバイスシャドウのステータスを取得することができます。

これをテストページから行ってみます。テスト画面の[サブスクリプション]部分で[トピックのサブスクリプション]に$aws/things/demoThing/shadow/get/acceptedを指定して[トピックのサブスクライブ]をクリックします。 image.png

するとサブスクリプション一覧に$aws/things/demoThing/shadow/get/acceptedに対するサブスクリプションが作成されます。 image.png

この状態で[サブスクリプション]より[発行]部分で$aws/things/demoThing/shadow/getを指定して[トピックに発行]をクリックします。 image.png

すると先ほど作成したサブスクリプションに緑色のマークが点くので選択すると、 image.png

シングdemoThingの現在のデバイスシャドウのステータスを取得することができました。 image.png

おわりに

テストページを利用してデバイスシャドウのMQTTトピックを利用した動作確認を簡単に行うことができました。

実を言いますとシャドウステータスの画面からデバイスシャドウのデータは直接編集することもできますが、今回のように実際にMQTTトピックへのPublish・Subscribeを介してデバイスシャドウの操作を行うことにより、実際の動作がよりイメージしやすくなると思います。

以上