AWS IoT позволяет связать несколько сертификатов с одним и тем же объектом, а несколько объектов - с одним и тем же сертификатом. Это делает определение имени Вещей довольно сложным, если вы не применяете подход по одному сертификату на Вещь.
Клиенты Интернета вещей не вызывают напрямую лямбда-функции. Скорее всего, это Правило, которое вызывает функцию. Правило берет сообщение в формате JSON из темы, которую оно слушает, возможно, изменяя данные, доступные Правилу, с использованием синтаксиса SQL, и передает результат в функцию Lambda как параметр event
вашего обработчика. По умолчанию Правило передает сообщение в Лямбда точно в том виде, в котором оно было опубликовано клиентом, без добавления или удаления каких-либо данных, поэтому, если в сообщении нет данных об «имени», эти данные также не будут доступны для Лямбда-функции.
Ваша функция Lambda может получить имя Thing из параметра event
только в том случае, если эти данные были указаны внутри сообщения MQTT или добавлены SQL-кодом правила к результату, переданному в функцию Lambda.
Упрощенный рабочий процесс сообщений выглядит так:
- Клиент → (сообщение) →
- Тема → (сообщение) →
- Правило → Модификация SQL-сообщения → (результат) →
- Лямбда-функция
SQL-функции можно использовать для добавления некоторых дополнительных данные к результату, если имя вещи не существует в сообщении. К сожалению, не существует специальной функции SQL, которая возвращает имя вещи, однако в некоторых случаях имя вещи можно найти с помощью трех следующих подходов:
Вы можете использовать функцию SQL Principal () 1 чтобы добавить идентификатор участника к результату, а затем внутри своей лямбда-функции вы можете использовать этот идентификатор участника, чтобы получить список вещей, связанных с этим принципалом, используя метод boto3 _ 3_.
Если ваша вещь обновляет свою тень или отправляет сообщение в тему, которая включает имя Things, вы можете использовать функцию topic()
SQL, чтобы добавить часть темы с именем Things к результату перед отправкой его в Lambda, с чем-то вроде
SELECT *, topic(3) as thingName FROM '$aws/things/+/shadow/update/accepted'
Вы можете, возможно, указать имя Things внутри сообщения от вашего Thing, и эти данные будут доступны Lambda, если вы не удалите их из результата с помощью SQL.
person
orome
schedule
23.03.2017