如何从 AWS Iot Analytics 管道中的 MQTT 主题获取事物名称?
How to get thing name from MQTT topic in AWS Iot Analytics pipeline?
我在 AWS Iot Analytics 中创建了以下内容:
- 频道:Iot 核心主题模式 => $aws/things/+/shadow/update/accepted
- 管道:从上一个通道馈送,从消息中选择属性
- 用于保存消息的数据存储
频道的传入消息是阴影 update/accepted,看起来像这样:
{
"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
有没有什么办法可以做到,或者如果我想在这里使用它来处理,必须直接包含在消息正文中吗?
谢谢。
显然,这是通过在将有效负载传输到 IOT Analytics 的 IOT 核心规则中添加 SQL 语句来丰富离开 IOT 核心的有效负载来完成的。
在 SQL 语句中使用 topic()
函数:
SELECT *, topic() AS topic FROM 'your/thing/+/topic'
https://docs.aws.amazon.com/en_us/iot/latest/developerguide/iot-substitution-templates.html
有一个可接受的答案,但似乎遗漏了问题的这一部分,即
I want to extract the thing name from the topic structure, which I
have as a wild card here
$aws/things/+/shadow/update/accepted
我想我 post 为那些需要提取事物名称的人准备的。如果要提取事物名称,则可以使用 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 to the above example. "topic()
" returns the complete topic. These are called Substitution templates.
还有一件需要注意的重要事情(这可能会导致一些不必要的调试时间)是要重新发布到以 $
开头的保留主题,请使用 $$
(转义 '$ ' 使用另一个 '$')。例如,要重新发布到设备影子主题 $aws/things/MyThing/shadow/update
,请将主题指定为 $$aws/things/MyThing/shadow/update
我在 AWS Iot Analytics 中创建了以下内容:
- 频道:Iot 核心主题模式 => $aws/things/+/shadow/update/accepted
- 管道:从上一个通道馈送,从消息中选择属性
- 用于保存消息的数据存储
频道的传入消息是阴影 update/accepted,看起来像这样:
{
"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
有没有什么办法可以做到,或者如果我想在这里使用它来处理,必须直接包含在消息正文中吗?
谢谢。
显然,这是通过在将有效负载传输到 IOT Analytics 的 IOT 核心规则中添加 SQL 语句来丰富离开 IOT 核心的有效负载来完成的。
在 SQL 语句中使用 topic()
函数:
SELECT *, topic() AS topic FROM 'your/thing/+/topic'
https://docs.aws.amazon.com/en_us/iot/latest/developerguide/iot-substitution-templates.html
有一个可接受的答案,但似乎遗漏了问题的这一部分,即
I want to extract the thing name from the topic structure, which I have as a wild card here
$aws/things/+/shadow/update/accepted
我想我 post 为那些需要提取事物名称的人准备的。如果要提取事物名称,则可以使用 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 to the above example. "topic()
" returns the complete topic. These are called Substitution templates.
还有一件需要注意的重要事情(这可能会导致一些不必要的调试时间)是要重新发布到以 $
开头的保留主题,请使用 $$
(转义 '$ ' 使用另一个 '$')。例如,要重新发布到设备影子主题 $aws/things/MyThing/shadow/update
,请将主题指定为 $$aws/things/MyThing/shadow/update