【问题标题】:How to get thing name from MQTT topic in AWS Iot Analytics pipeline?如何从 AWS IoT Analytics 管道中的 MQTT 主题获取事物名称?
【发布时间】:2020-10-05 15:57:10
【问题描述】:

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

  • 频道:Iot Core 主题模式 => $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

如果我想在此处使用它进行处理,是否有任何方法可以做到这一点,或者必须将其直接包含在消息正文中?

谢谢。

【问题讨论】:

  • 如果你使用mqtt意味着你可以通过回调函数中的message.topic提取它

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


【解决方案1】:

在 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】:

    显然,这是通过添加到将有效负载传输到 IOT Analytics 的 IOT Core 规则中的 SQL 语句来丰富离开 IOT Core 的有效负载来完成的。

    【讨论】:

    • 当前sql查询为SELECT * FROM '$aws/things/+/shadow/update/accepted'。如何丰富它以使结果包含事物名称? @ms-schneider-electric
    【解决方案3】:

    有一个公认的答案,但似乎错过了问题的这一部分

    我想从主题结构中提取事物名称,我 这里有一个外卡

    $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

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 2016-04-05
      • 2017-09-21
      • 2020-08-03
      • 2018-08-14
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多