Amazon web services 如何从AWS物联网分析管道中的MQTT主题中获取对象名称?

Amazon web services 如何从AWS物联网分析管道中的MQTT主题中获取对象名称?,amazon-web-services,aws-iot-analytics,Amazon Web Services,Aws Iot Analytics,我在AWS物联网分析中创建了以下内容: 渠道:物联网核心主题模式=>$aws/things/+/shadow/update/accepted 管道:从上一个通道馈送,从消息中选择属性 用于保存消息的数据存储 发送到通道的传入消息是阴影更新/接受,如下所示: { "state": { "reported": { "active": false, "telemetry": { "temperature": 72, "humidi

我在AWS物联网分析中创建了以下内容:

  • 渠道:物联网核心主题模式=>$aws/things/+/shadow/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
如果我想在这里使用它进行处理,是否有任何方法可以做到这一点,或者必须将其直接包含在消息体中


谢谢。

显然,这是通过在将有效载荷传输到物联网分析的物联网核心规则中添加SQL语句来丰富离开物联网核心的有效载荷来实现的。

在SQL语句中使用
topic()
函数:

SELECT *, topic() AS topic FROM 'your/thing/+/topic'

有一个公认的答案,但它似乎遗漏了问题的这一部分,即

我想从主题结构中提取事物名称,我 这里有一张通配符

$aws/things/+/shadow/update/accepted
我想我会为那些需要提取东西名称的人发布这篇文章。如果要提取对象名称,则可以使用
主题(3)
,因为它的计算结果为3(即对象名称在主题中的位置)。下面是一个规则示例,该规则重新发布到使用从主题检索的thingname的主题

{
  "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"
      }
    }
  ]
}
下面是上述示例的示例。“
topic()
”返回完整的主题。这些被称为


另一个需要注意的重要事项(可能会导致一些不必要的调试时间)是,要重新发布到以
$
开头的保留主题,请使用
$
(使用另一个“$”转义“$”)。例如,要重新发布到设备阴影主题
$aws/things/MyThing/shadow/update
,请将该主题指定为
$$aws/things/MyThing/shadow/update

,如果您使用mqtt,则意味着您可以通过消息将其提取出来。回调函数中的主题当前sql查询是
从“$aws/things/+/shadow/update/accepted”中选择*
。我怎样才能丰富它,使结果包含事物名称@施耐德女士