2017-03-04 60 views

回答

1

AWS IoT允許將多個證書關聯到相同的證書和多個證書。這使得探測事物的名稱相當具有挑戰性,除非您對每件事採用了方法一證書。

物聯網客戶端不直接調用Lambda函數。相反,它實際上是調用函數的規則。規則從正在監聽的主題中獲取JSON格式的消息,可能會使用SQL語法修改規則可用的數據,並將結果作爲您的處理程序的參數event傳遞給Lambda函數。默認情況下,規則將消息傳遞給Lambda完全像客戶端發佈消息一樣,而不添加或刪除任何數據,因此如果消息沒有關於「name」的數據,則該數據也不會由Lambda函數提供。

只有在MQTT消息中指定了數據或由Rule的SQL將其添加到傳遞給Lambda函數的結果中,您的Lambda函數才能從event參數中獲取Thing名稱。

簡化信息的工作流程是這樣的:

  • 客戶→(信息)→
  • 主題→(信息)→
  • 規則→SQL消息修改→(結果)→
  • lambda函數

SQL functions可用於添加一些額外的數據的結果如果名稱做信息中不存在。不幸的是,沒有特殊的SQL函數存在返回的東西的名稱,但在某些情況下,東西的名稱,可以使用以下三種方法發現:

  1. 您可以使用主()SQL函數1本金ID添加到結果,然後在您的Lambda函數中,您可以使用該主體ID使用boto3方法list_principal_things()獲取與該主體關聯的事物列表。

  2. 如果你的事情就是更新其陰影或發送消息,其中包括物聯網的名字的話題,你可以使用topic() SQL函數將其發送到LAMBDA之前的事情名字的話題部件添加到結果,像

    SELECT *, topic(3) as thingName FROM '$aws/things/+/shadow/update/accepted' 
    
  3. 你可以,也許,從你的東西指定的東西名稱內部消息,這些數據將可通過LAMBDA,除非你使用SQL結果中刪除。

0

lambda函數傳遞一個稱爲事件參數。

它是JSON對象。你得到的對象取決於你使用的方法。

參考更多詳細信息:http://docs.amazonaws.cn/en_us/iot/latest/developerguide/thing-shadow-mqtt.html

exports.handler = (event, context, callback) => { 
} 

我建議你打印事件,所以你可以看到JSON對象。它包含觸發它的事情的狀態。

但是,您不能獲得東西的名稱,您只能獲取屬性。

+0

您是否閱讀過[this](https://stackoverflow.com/a/42981342/656912)? – orome

相關問題