Могу ли я получить имя объекта AWS IoT Thing, запустившего мою функцию Lambda?

У меня есть функция Python Lambda, которая обрабатывает триггеры от IoT Things.

Есть ли способ прочитать context, переданный функции-обработчику (с помощью Boto 3), чтобы определить, какое имя запускающей вещи - например, как ожидалось в thingName поставлено get_thing_shadow?


person orome    schedule 04.03.2017    source источник


Ответы (2)


AWS IoT позволяет связать несколько сертификатов с одним и тем же объектом, а несколько объектов - с одним и тем же сертификатом. Это делает определение имени Вещей довольно сложным, если вы не применяете подход по одному сертификату на Вещь.

Клиенты Интернета вещей не вызывают напрямую лямбда-функции. Скорее всего, это Правило, которое вызывает функцию. Правило берет сообщение в формате JSON из темы, которую оно слушает, возможно, изменяя данные, доступные Правилу, с использованием синтаксиса SQL, и передает результат в функцию Lambda как параметр event вашего обработчика. По умолчанию Правило передает сообщение в Лямбда точно в том виде, в котором оно было опубликовано клиентом, без добавления или удаления каких-либо данных, поэтому, если в сообщении нет данных об «имени», эти данные также не будут доступны для Лямбда-функции.

Ваша функция Lambda может получить имя Thing из параметра event только в том случае, если эти данные были указаны внутри сообщения MQTT или добавлены SQL-кодом правила к результату, переданному в функцию Lambda.

Упрощенный рабочий процесс сообщений выглядит так:

  • Клиент → (сообщение) →
  • Тема → (сообщение) →
  • Правило → Модификация SQL-сообщения → (результат) →
  • Лямбда-функция

SQL-функции можно использовать для добавления некоторых дополнительных данные к результату, если имя вещи не существует в сообщении. К сожалению, не существует специальной функции SQL, которая возвращает имя вещи, однако в некоторых случаях имя вещи можно найти с помощью трех следующих подходов:

  1. Вы можете использовать функцию SQL Principal () 1 чтобы добавить идентификатор участника к результату, а затем внутри своей лямбда-функции вы можете использовать этот идентификатор участника, чтобы получить список вещей, связанных с этим принципалом, используя метод boto3 _ 3_.

  2. Если ваша вещь обновляет свою тень или отправляет сообщение в тему, которая включает имя Things, вы можете использовать функцию topic() SQL, чтобы добавить часть темы с именем Things к результату перед отправкой его в Lambda, с чем-то вроде

    SELECT *, topic(3) as thingName FROM '$aws/things/+/shadow/update/accepted'
    
  3. Вы можете, возможно, указать имя Things внутри сообщения от вашего Thing, и эти данные будут доступны Lambda, если вы не удалите их из результата с помощью SQL.

person orome    schedule 23.03.2017

Лямбда-функция передает параметр под названием событие.

Это объект JSON. Какой объект вы получите, зависит от того, какие методы вы используете.

Для получения дополнительных сведений см. http://docs.amazonaws.cn/en_us/iot/latest/developerguide/thing-shadow-mqtt.html.

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

Я предлагаю вам распечатать событие, чтобы вы могли увидеть объект JSON. Он содержит состояние Вещи, вызвавшей его.

Однако вы не можете получить имя вещи, вы можете получить только атрибуты.

person Atul Kumar    schedule 23.10.2017