oro*_*ome 1 iot boto3 aws-lambda aws-iot
我有一个Python Lambda函数来处理IoT Things的触发器.
有没有办法读取context交给处理函数(用Boto 3)来识别触发事物的名称 - 例如thingName提供给的那个get_thing_shadow?
AWS IoT允许将多个证书与同一个Thing和多个Things关联到同一个证书.这使得检测事物名称非常具有挑战性,除非您为每件事采用了一个证书.
IoT客户端不直接调用Lambda函数.相反,它实际上是一个调用函数的规则.规则从其正在侦听的主题中获取JSON格式的消息,可能使用SQL语法修改规则可用的数据,并将结果作为event处理程序的参数传递给Lambda函数.默认情况下,规则将消息传递给Lambda,与客户端发布的消息完全相同,而不添加或删除任何数据,因此如果消息没有关于"name"的数据,Lambda函数也不会提供此数据.
event只有在MQTT消息中指定了数据或者将Rule的SQL添加到传递给Lambda函数的结果时,Lambda函数才能从参数中获取Thing名称.
简化的消息工作流程如下所示:
如果消息中不存在Thing名称,则可以使用SQL函数向结果添加一些其他数据.遗憾的是,没有特殊的SQL函数可以返回Thing名称,但在某些情况下可以使用以下三种方法找到Thing名称:
您可以使用principal()SQL函数1将主体ID添加到结果中,然后在Lambda函数内部,您可以使用该主体ID来使用boto3方法获取与此主体关联的事物列表list_principal_things().
如果您的Thing正在更新其阴影或向包含Things名称的主题发送消息,您可以使用topic()SQL函数将具有Things名称的主题部分添加到结果中,然后再将其发送到Lambda,类似于
SELECT *, topic(3) as thingName FROM '$aws/things/+/shadow/update/accepted'
Run Code Online (Sandbox Code Playgroud)您可以在Thing中的消息中指定Things name,Lambda可以使用这些数据,除非您使用SQL将其从结果中删除.
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |