この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
IoT Coreのテスト画面でデバイスシャドウを更新して動作確認することがあります。 このとき「あれ? データをPublishしたけど反映されないぞ??」とハマりました。
結論としては、正しいJSONじゃなかったというオチです。
デバイスシャドウの様子
次のデバイスがあり、デバイスシャドウ(シャドウステータス)は空っぽの状態です。
デバイスシャドウを更新する(正しいJSON)
正しいJSONの場合は、問題なく更新できます。
- トピック:
$aws/things/device_test_1234/shadow/update
- データ: 下記
{
"state" : {
"reported" : {
"color" : "red",
"power" : "on"
}
}
}
正しくないJSONだと更新されない
例えば下記です。JSONデータをPythonコードからコピペした際にやらかしました……。
- シングルクォーテーション「
'
」を使っている - 余計なカンマ「
,
」がある
シングルクォーテーションを使っている例
{
'state' : {
'reported' : {
'color' : 'green',
'power' : 'on'
}
}
}
余計なカンマを使っている例
{
"state" : {
"reported" : {
"color" : "blue",
"power" : "on",
}
}
}
デバイスシャドウの更新失敗をSubscribeして確認しよう
デバイスシャドウは更新失敗時にも特定のトピックにPublishしてくれるので、そのトピックをSubscribeしておくと更新失敗が分かります。
- トピック:
$aws/things/device_test_1234/shadow/update/rejected
{
"code": 400,
"message": "Payload contains invalid json"
}
さいごに
正しくないJSONだった事に気づくまで時間がかかりました。手動テストするときは、あらかじめ更新失敗時のトピックをSubscribeしておくと良いですね。