Dimitry K
Dimitry K

Reputation: 2356

AWS IoT Rule results in empty Payload

My weather-station is publishing its status via MQTT to AWS IoT.

The message is published to topic $aws/things/my-weather-station-001/shadow/update and looks like this:

{
 "state": {
   "reported": {
      "temperature" : 22,
      "humidity" : 70,
       ....
      "wind" : 234,
      "air" : 345
   }
 }

After message is received I have create a rule to store it in AWS DynamoDB the rules select statement is:

SELECT state.reported.* FROM $aws/things/+/shadow/update/accepted

And when this works well, whilst I am sending messages containing state.reported field.

However sometimes to the topic $aws/things/weather-station-0001/shadow/update are sent "control" messages telling device to switch on an LED or some other part. These messages would be usually sent by an app or a controlling server and look like this notice that instead of reported field it hasdesired

{
 "state": {
   "desired": {
      "led1" : "on",
      "locked" : true
   }
 }

So when these messages are arriving, they ARE STILL processed by the rule and arrive to the DynamoDb table with {} empty payload.

Is there any way to force the Rule to ignore messages not containing state.reported element?

Upvotes: 1

Views: 1491

Answers (1)

cementblocks
cementblocks

Reputation: 4606

You can add a where clause to your SQL statement. Try

SELECT state.reported.* FROM $aws/things/+/shadow/update/accepted WHERE state.reported <> ''

Upvotes: 1

Related Questions