我正在使用aws IoT核心从事支持Iot的自动机械行业。 每台机器都有自己的基准温度水平,随温度变化 希望根据基准温度水平触发AWS SNS。 每台机器将数据发布到同一主题,并用分隔 他们的ID。 主题名称看起来像波纹管
machine/+/data
其中+号表示machine_id 我的规则写得像波纹管一样。
select * from machine/+/data where temperature > 25
它适用于所有主题,现在温度水平是 对于所有机器而言都不相同,例如,id = 1的机器可能 温度级别为30,另一台id = 2的机器可能温度为28。
我的问题是,是否有可能根据机器温度触发SNS 使用“规则”还是其他任何方法?
预先感谢您的答复。
答案 0 :(得分:1)
您的方法存在的问题是AWS IoT查询的工作方式-激活查询后,AWS将尝试根据您在SELECT子句中提供的主题过滤器针对每条消息验证/执行该查询。
因此,您无法通过单个查询来实现所需的目标(具有不同的temperature_level值)。
您的问题中有两个变量-machine_id,temperature_level。两者彼此相关。
您可能想用以下方法解决问题:
Option-1 :: Rudimentary -创建多个查询(每个查询对应于machine_id,温度组合)并部署。
Option-2 :: Dynamic -将变量作为元组存储在您选择的存储中,例如AWS DynamoDB。拥有一个数据库流/触发器来通知表更改并使用AWS Lambda进行处理,当DynamoDB中的数据发生更改时,AWS Lambda会动态(使用AWS开发工具包/ API)动态重新创建AWS IoT规则。
希望有帮助!
答案 1 :(得分:0)
可以通过使用WHERE
子句中的get_dynamodb
,aws_lambda
或get_thing_shadow
函数使IoT规则动态化。
来自https://forums.aws.amazon.com/thread.jspa?messageID=932907󣰫
您有3种方法来获取AWS IoT主题规则中的数据。所有这些都可以在WHERE子句评估中使用。
- aws_lambda()函数(https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda),该函数会从您的lambda中返回您在规则评估中所需的数据。从其他服务获取价值时最有用。
- get_dynamodb()函数(https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb),可让您从DynamoDB表中获取数据。您可以在表格中保留每件事的阈值。
- get_thing_shadow()函数(https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow),可让您从Thing Shadow文档中获取数据。如果您已经在使用Thing Shadow,则保持每个阈值最容易。
例如,get_thing_shadow
文档具有:
SELECT * from 'a/b'
WHERE
get_thing_shadow("MyThing","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
.state.reported.alarm = 'ON'
如果您的基准温度水平在Thing注册表中,则可以使用与此类似的规则:
SELECT * FROM machine/+/data
WHERE
temperature > get_thing_shadow(topic(2),"arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
.state.threshold