Amazon web services 是否可以动态更改aws物联网核心规则?

Amazon web services 是否可以动态更改aws物联网核心规则?,amazon-web-services,iot,aws-iot,Amazon Web Services,Iot,Aws Iot,我正在从事物联网自动化机器行业,该行业使用aws物联网核心。 每台机器都有自己的基准温度水平,该温度水平随时间而变化 希望根据基准温度水平触发AWS SNS。 每台机器将数据发布到同一主题,主题之间用分隔符分隔 他们的身份证。 主题名称看起来像bellow machine/+/data 其中+符号表示机器id 我的规则写得像贝娄 select * from machine/+/data where temperature > 25 这适用于所有主题现在问题是温度水平 并非所有机器

我正在从事物联网自动化机器行业,该行业使用aws物联网核心。 每台机器都有自己的基准温度水平,该温度水平随时间而变化 希望根据基准温度水平触发AWS SNS。 每台机器将数据发布到同一主题,主题之间用分隔符分隔 他们的身份证。 主题名称看起来像bellow

 machine/+/data
其中+符号表示机器id 我的规则写得像贝娄

 select * from machine/+/data where temperature > 25 
这适用于所有主题现在问题是温度水平 并非所有机器都相同,例如id=1的机器可能 温度水平为30 id=2的另一台机器可能有28

我的问题是,是否有可能根据机器温度触发SNS 使用规则或其他方法来实现这一点吗


提前感谢您的回复。

您的方法的问题在于AWS物联网查询的工作方式——一旦查询被激活,AWS将根据您在SELECT子句中提供的主题过滤器,尝试验证/执行每条消息

因此,您不能通过一个查询来实现所需的内容(使用不同的温度水平值)

您的问题中有两个变量-机器id、温度和级别。两者都是相互关联的

您可能希望通过以下方式解决您的问题:

选项1::基本的-创建多个查询(机器id、温度组合各一个)并部署

选项2::Dynamic-将变量作为元组存储在您选择的存储器中,例如AWS DynamoDB。拥有一个DB流/触发器,用于通知表的更改,并使用AWS Lambda进行处理,当数据在DynamoDB中更改时,AWS Lambda会动态地(使用AWS SDK/API)重新创建AWS IoT规则


希望有帮助

可以通过使用,
WHERE
子句中的或函数使物联网规则成为动态的

在AWS IoT主题规则中有3种获取数据的方法。可以在WHERE子句求值中使用All

  • aws_lambda()函数(),该函数将从规则评估中的lambda返回所需的数据。最有助于从其他服务中获取价值
  • get_dynamodb()函数(),用于从dynamodb表中获取数据。您可以在表中保留每件事的阈值
  • get\u thing\u shadow()函数(),用于从thing shadow文档中获取数据。如果您已经在使用一个物体阴影,这可能是保持每物体阈值的最简单方法
  • 例如,
    get\u thing\u shadow
    文档包括:

    SELECT * from 'a/b'
    WHERE
    get_thing_shadow("MyThing","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
      .state.reported.alarm = 'ON'
    
    如果您的基准温度水平在thing registry中,则可以使用类似的规则:

    SELECT * FROM machine/+/data
    WHERE
    temperature > get_thing_shadow(topic(2),"arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
      .state.threshold
    

    为什么不将其存储为设备属性?然后对该属性的查询进行参数化?它位于AWS愿望列表上,功能尚未公开--请参见AWS讨论--愿望列表中的3年?哈哈!说得好。