我的气象站正在通过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
元素的消息?
答案 0 :(得分:1)
您可以在SQL语句中添加where子句。尝试
SELECT state.reported.* FROM $aws/things/+/shadow/update/accepted WHERE state.reported <> ''