我有一個Python Lambda函數來處理來自物聯網事物的觸發器。我可以檢索AWS IoT的名稱觸發了我的Lambda功能的事情嗎?
有沒有辦法讀取遞交給處理程序函數(用Boto 3)的context
以確定觸發事件的名稱 - 例如如預期在thingName
提供給get_thing_shadow
?
我有一個Python Lambda函數來處理來自物聯網事物的觸發器。我可以檢索AWS IoT的名稱觸發了我的Lambda功能的事情嗎?
有沒有辦法讀取遞交給處理程序函數(用Boto 3)的context
以確定觸發事件的名稱 - 例如如預期在thingName
提供給get_thing_shadow
?
AWS IoT允許將多個證書關聯到相同的證書和多個證書。這使得探測事物的名稱相當具有挑戰性,除非您對每件事採用了方法一證書。
物聯網客戶端不直接調用Lambda函數。相反,它實際上是調用函數的規則。規則從正在監聽的主題中獲取JSON格式的消息,可能會使用SQL語法修改規則可用的數據,並將結果作爲您的處理程序的參數event
傳遞給Lambda函數。默認情況下,規則將消息傳遞給Lambda完全像客戶端發佈消息一樣,而不添加或刪除任何數據,因此如果消息沒有關於「name」的數據,則該數據也不會由Lambda函數提供。
只有在MQTT消息中指定了數據或由Rule的SQL將其添加到傳遞給Lambda函數的結果中,您的Lambda函數才能從event
參數中獲取Thing名稱。
簡化信息的工作流程是這樣的:
SQL functions可用於添加一些額外的數據的結果如果名稱做信息中不存在。不幸的是,沒有特殊的SQL函數存在返回的東西的名稱,但在某些情況下,東西的名稱,可以使用以下三種方法發現:
您可以使用主()SQL函數1本金ID添加到結果,然後在您的Lambda函數中,您可以使用該主體ID使用boto3方法list_principal_things()
獲取與該主體關聯的事物列表。
如果你的事情就是更新其陰影或發送消息,其中包括物聯網的名字的話題,你可以使用topic()
SQL函數將其發送到LAMBDA之前的事情名字的話題部件添加到結果,像
SELECT *, topic(3) as thingName FROM '$aws/things/+/shadow/update/accepted'
你可以,也許,從你的東西指定的東西名稱內部消息,這些數據將可通過LAMBDA,除非你使用SQL結果中刪除。
lambda函數傳遞一個稱爲事件參數。
它是JSON對象。你得到的對象取決於你使用的方法。
參考更多詳細信息:http://docs.amazonaws.cn/en_us/iot/latest/developerguide/thing-shadow-mqtt.html
exports.handler = (event, context, callback) => {
}
我建議你打印事件,所以你可以看到JSON對象。它包含觸發它的事情的狀態。
但是,您不能獲得東西的名稱,您只能獲取屬性。
您是否閱讀過[this](https://stackoverflow.com/a/42981342/656912)? – orome