私の測候所は、MQTT を介して AWS IoT にステータスを公開しています。
メッセージはトピックに発行され
$aws/things/my-weather-station-001/shadow/update
、次のようになります。
{
"state": {
"reported": {
"temperature" : 22,
"humidity" : 70,
....
"wind" : 234,
"air" : 345
}
}
メッセージを受信したら、AWS DynamoDB に保存するルールを作成しました。ルールの select ステートメントは次のとおりです。
SELECT state.reported.* FROM $aws/things/+/shadow/update/accepted
そして、これがうまくいくと、state.reported
フィールドを含むメッセージを送信しています。
$aws/things/weather-station-0001/shadow/update
ただし、デバイスに LED またはその他の部分をオンにするように指示する「制御」メッセージがトピックに送信されることがあります。これらのメッセージは通常、アプリまたは制御サーバーによって送信され、フィールドの代わりに次の通知のように表示されます。reported
desired
{
"state": {
"desired": {
"led1" : "on",
"locked" : true
}
}
{}
したがって、これらのメッセージが到着すると、それらはまだルールによって処理され、空のペイロードで DynamoDb テーブルに到着します。
state.reported
要素を含まないメッセージを無視するようにルールを強制する方法はありますか?