如何从 AWS Iot Analytics 管道中的 MQTT 主题获取事物名称?

How to get thing name from MQTT topic in AWS Iot Analytics pipeline?

我在 AWS Iot Analytics 中创建了以下内容:

频道的传入消息是阴影 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