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

时间:2018-08-01 14:46:47

标签: amazon-web-services aws-iot-analytics

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

  • 渠道:物联网核心主题模式=> $ 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

有什么办法做到这一点,或者如果我想在这里使用它来将其直接包含在消息正文中?

谢谢。

3 个答案:

答案 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