1

我的气象站正在通过 MQTT 将其状态发布到 AWS IoT。

消息发布到主题 $aws/things/my-weather-station-001/shadow/update,如下所示:

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

收到消息后,我创建了一条规则以将其存储在 AWS DynamoDB 中,规则选择语句为:

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元素的消息?

4

1 回答 1

1

您可以在 SQL 语句中添加 where 子句。尝试

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

于 2016-03-14T20:33:11.403 回答