【问题标题】:AWS IoT Rule results in empty PayloadAWS IoT 规则导致空负载
【发布时间】:2016-03-13 19:36:07
【问题描述】:

我的气象站正在通过 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 或其他部分。这些消息通常由应用程序或控制服务器发送,如下所示注意,它有desired

,而不是reported
{
 "state": {
   "desired": {
      "led1" : "on",
      "locked" : true
   }
 }

因此,当这些消息到达时,它们仍由规则处理,并以 {} 空负载到达 DynamoDb 表。

有没有办法强制规则忽略不包含state.reported 元素的消息?

【问题讨论】:

  • 如果您尝试通过 MQTT 更新事物影子,则主题应为 $aws/things/<thing_name>/shadow/update
  • 感谢@cementblocks 的建议,但我认为您在这种情况下是不正确的。为了接收 AWS IoT “确认”的更新,您需要订阅 $aws/things/<thing_name>/shadow/update/accepted,或者如果您对增量感兴趣,请订阅 ../shadow/update/delta。如果您只订阅..shadow/update,您并没有真正使用影子服务,而只是取回您发送的更新(包括格式错误的更新)。您可以在docs.aws.amazon.com/iot/latest/developerguide/… 上阅读更多信息
  • 你的问题The message is published to topic $aws/things/my-weather-station-001/update and looks like this:中的这一行有错误的主题,你应该发布到$aws/things/my-weather-station-001/shadow/update
  • @cementblocks 对不起,我的错。这只是问题中的一个错字(将解决它)。正如您对$aws/things/my-weather-station-001/shadow/update 所说,实际代码正在发布

标签: amazon-web-services mqtt aws-iot


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2018-04-26
  • 2019-05-03
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多