我已经在AWS Iot Analytics中创建了以下内容:
该频道的传入消息是影子更新/已接受,看起来像这样:
{
"state": {
"reported": {
"active": false,
"telemetry": {
"temperature": 72,
"humidity": 58,
"occupancy": 28
},
"config": null
}
},
"metadata": {
"reported": {
"active": {
"timestamp": 1533059587
},
"telemetry": {
"temperature": {
"timestamp": 1533059587
},
"humidity": {
"timestamp": 1533059587
},
"occupancy": {
"timestamp": 1533059587
}
},
"config": {
"timestamp": 1533059587
}
}
},
"version": 89,
"timestamp": 1533059587,
"clientToken": "..."
}
我想从主题结构中提取事物名称,我在这里将其作为通配符:
$aws/things/+/shadow/update/accepted
有什么办法做到这一点,或者如果我想在这里使用它来将其直接包含在消息正文中?
谢谢。
答案 0 :(得分:0)
显然,这是通过在IOT核心规则中添加SQL语句来丰富离开IOT Core的有效载荷来完成的,该规则将有效载荷传输到IOT Analytics。
答案 1 :(得分:0)
在SQL语句中使用topic()
函数:
SELECT *, topic() AS topic FROM 'your/thing/+/topic'
https://docs.aws.amazon.com/en_us/iot/latest/developerguide/iot-substitution-templates.html
答案 2 :(得分:0)
有一个可以接受的答案,但似乎在问题的这一部分没有找到
我想从主题结构中提取事物名称, 在这里拥有通配符
$aws/things/+/shadow/update/accepted
我想我应该把这个发布给那些需要提取事物名称的人。如果要提取事物名称,则可以使用topic(3)
,因为它的值为3(这是事物名称在主题中的位置)。这是一个规则的示例,该规则重新发布到使用从该主题检索到的事物名称的主题。
{
"sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'",
"ruleDisabled": false,
"actions": [
{
"republish": {
"topic": "${topic(3)}/delta",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}
]
}
这是上面示例的link。 “ topic()
”返回完整的主题。这些称为Substitution templates。
还要注意的一件事(可能会导致不必要的调试时间)是要重新发布到以$
开头的保留主题,请使用$$
(使用另一个“ $”)。例如,要重新发布到设备影子主题$aws/things/MyThing/shadow/update
,请将该主题指定为$$aws/things/MyThing/shadow/update