Мониторинг показаний датчиков и уведомления о событиях
- Подготовьте облако к работе
- Создайте необходимые ресурсы Yandex IoT Core
- Создайте эмулятор устройства в Cloud Functions
- Создайте функцию эмуляции отправки данных с устройства
- Протестируйте функцию эмуляции
- Создайте триггер для вызова функции с периодичностью один раз в минуту
- Создайте функцию обработки принимаемых данных
- Протестируйте функцию обработки данных
- Создайте триггер для вызова функции обработки данных по сигналу
- Настройте мониторинг показаний датчиков
- Как удалить созданные ресурсы
В этом руководстве вы настроите мониторинг и уведомления об изменениях показаний датчиков, подключенных к сервису Yandex IoT Core. Датчики будут эмулированы с помощью сервиса Yandex Cloud Functions. Если у вас есть подключенные датчики, используйте их.
Для работы с руководством вам не нужно создавать и настраивать виртуальные машины — вся работа основана на бессерверных вычислениях Cloud Functions. Исходный код, который используется в этом руководстве, доступен на GitHub
Чтобы настроить мониторинг показаний датчиков в серверной комнате:
- Подготовьте облако к работе.
- Создайте необходимые ресурсы Yandex IoT Core.
- Создайте эмулятор устройства в Cloud Functions.
- Настройте мониторинг показаний датчиков.
Если ресурсы больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- плата за количество сообщений Yandex IoT Core (см. тарифы Yandex IoT Core);
- плата за количество вызовов функции Cloud Functions (см. тарифы Yandex Cloud Functions);
- плата за запись пользовательских метрик через API сервиса Monitoring (см. тарифы Yandex Monitoring).
Создайте сервисные аккаунты
- Создайте сервисный аккаунт
my-emulator-function-service-account
для отправки данных. Назначьте ему ролиfunctions.functionInvoker
иiot.devices.writer
. - Создайте сервисный аккаунт
my-metrics-function-service-account
для обработки данных. Назначьте ему ролиfunctions.functionInvoker
иeditor
.
Создайте необходимые ресурсы Yandex IoT Core
Реестр и устройство — основные компоненты сервиса Yandex IoT Core для обмена данными и командами. Чтобы устройства могли обмениваться данными, их необходимо создавать в одном реестре.
Создайте реестр и настройте авторизацию по логину и паролю
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите IoT Core.
-
Нажмите кнопку Создать реестр.
-
В поле Имя введите имя реестра. Например,
my-registry
. -
В поле Пароль задайте пароль доступа к реестру. Для создания пароля можно воспользоваться генератором паролей
.Примечание
Сохраните пароль, он понадобится вам для аутентификации.
-
Нажмите кнопку Создать.
Создайте устройство и настройте авторизацию по логину и паролю
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите IoT Core.
-
Выберите реестр, созданный на предыдущем шаге.
-
В меню слева выберите раздел Устройства.
-
Нажмите кнопку Добавить устройство.
-
В поле Имя введите имя устройства. Например,
my-device
. -
В поле Пароль задайте пароль доступа к устройству. Для создания пароля можно воспользоваться генератором паролей
.Примечание
Сохраните пароль, он понадобится вам для аутентификации.
-
(Опционально) Добавьте алиас:
-
Нажмите кнопку Добавить алиас.
-
Заполните поля: введите алиас (например
events
) и тип топика после$devices/{id}
(например,events
).Вы сможете использовать алиас
events
вместо топика$devices/{id}/events
. -
Повторите действия для каждого добавляемого алиаса.
-
-
Нажмите кнопку Создать.
-
Повторите действия для каждого устройства, которое вы хотите создать.
Создайте эмулятор устройства в Cloud Functions
Эмулятор отправляет данные с датчиков устройства и обрабатывает данные для мониторинга и алертов.
Создайте функцию эмуляции отправки данных с устройства
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Cloud Functions.
- Создайте функцию:
- Нажмите кнопку Создать функцию.
- В поле Имя введите имя функции. Например,
my-device-emulator-function
. - Нажмите кнопку Создать.
- Создайте версию функции:
-
В открывшемся окне Редактор выберите
Node.js 18
. -
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В поле Способ выберите
Редактор кода
. -
Нажмите кнопку Создать файл:
- Имя файла —
device-emulator.js
. - Содержимое файла — код функции с GitHub
.
- Имя файла —
-
Аналогичным образом создайте файл
package.json
со следующим содержимым:{ "name": "my-app", "version": "1.0.0", "dependencies": { "yandex-cloud": "*" } }
-
В поле Точка входа укажите
device-emulator.handler
. -
В блоке Параметры укажите:
- Таймаут, c —
10
. - Память —
128 МБ
. - Сервисный аккаунт —
my-emulator-function-service-account
. - Переменные окружения:
Ключ Описание Значение HUMIDITY_SENSOR_VALUE
Базовое значение показания датчика влажности. 80.15
TEMPERATURE_SENSOR_VALUE
Базовое значение показания датчика температуры. 25.25
RACK_DOOR_SENSOR_VALUE
Показания датчика открытия дверцы стойки. False
ROOM_DOOR_SENSOR_VALUE
Показания датчика открытия двери в серверную комнату. False
SMOKE_SENSOR_VALUE
Показания детектора дыма. False
WATER_SENSOR_VALUE
Показания детектора воды. False
IOT_CORE_DEVICE_ID
Идентификатор устройства, которое вы создали. См. в консоли управления
сервиса Yandex IoT Core.DEVICE_ID
Пользовательское название устройства. Задается пользователем.
- Таймаут, c —
-
Нажмите кнопку Сохранить изменения.
-
Протестируйте функцию эмуляции
(Опционально) Для получения подробной информации с датчиков, подпишите реестр на топик устройства Yandex IoT Core.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Выполните команду:
yc iot mqtt subscribe \
--username <идентификатор_реестра> \
--password <пароль_реестра> \
--topic '$devices/<идентификатор_устройства>/events' \
--qos 1
Где:
--username
и--password
— параметры авторизации с помощью логина и пароля.--topic
— топик устройства для отправки данных или алиас топика.--qos
— уровень качества обслуживания (QoS).
Команда должна продолжать выполняться до завершения тестирования.
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите Cloud Functions.
-
Выберите функцию
my-device-emulator-function
. -
В меню слева выберите Тестирование.
-
В списке Тег версии выберите
$latest
— последнюю созданную функцию. -
Нажмите кнопку Запустить тест.
При успешном выполнении функции в поле Состояние функции отобразится статус Выполнена, и в поле Ответ функции появится результат:
{ "statusCode" : 200 }
Если вы подписались на топик устройства Yandex IoT Core, вы получите в терминале JSON вида:
{ "DeviceId":"my-device-id", "TimeStamp":"2024-06-14T15:29:59Z", "Values":[ {"Type":"Float","Name":"Humidity","Value":"80.84"}, {"Type":"Float","Name":"Temperature","Value":"25.46"}, {"Type":"Bool","Name":"Water sensor","Value":"False"}, {"Type":"Bool","Name":"Smoke sensor","Value":"False"}, {"Type":"Bool","Name":"Room door sensor","Value":"False"}, {"Type":"Bool","Name":"Rack door sensor","Value":"False"} ] }
Создайте триггер для вызова функции с периодичностью один раз в минуту
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Cloud Functions.
- На панели слева выберите Триггеры.
- Нажмите кнопку Создать триггер.
- В поле Имя введите имя триггера. Например,
my-emulator-function-trigger
. - В поле Тип выберите
Таймер
. - В поле Cron-выражение введите
* * * * ? *
(вызов один раз в минуту). - В блоке Настройки функции введите ранее заданные параметры функции:
- Функция —
my-device-emulator-function
. - Тег версии функции —
$latest
. - Сервисный аккаунт —
my-emulator-function-service-account
.
- Функция —
- (Опционально) Настройте параметры блоков Настройки повторных запросов и Настройки Dead Letter Queue. Они обеспечивают сохранность данных.
-
Настройки повторных запросов позволяют повторно вызывать функцию, если текущий вызов функции завершается с ошибкой.
-
Настройки Dead Letter Queue позволяют перенаправлять сообщения, которые не смогли обработать получатели в обычных очередях.
В качестве DLQ очереди вы можете настроить стандартную очередь сообщений. Если вы еще не создавали очередь сообщений, создайте ее в сервисе Yandex Message Queue.
-
- Нажмите кнопку Создать триггер.
Создайте функцию обработки принимаемых данных
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Cloud Functions.
- На панели слева выберите раздел Функции.
- Создайте функцию:
- Нажмите кнопку Создать функцию.
- В поле Имя введите имя функции. Например,
my-monitoring-func
. - Нажмите кнопку Создать.
- Создайте версию функции:
-
В открывшемся окне Редактор выберите
Python 3.12
. -
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В поле Способ выберите
Редактор кода
. -
Нажмите кнопку Создать файл:
-
Имя файла —
monitoring.py
. -
Содержимое файла — код функции с GitHub
.В этой функции подготовка данных для отправки в сервис мониторинга находится в методе
makeAllMetrics
. Если вы захотите добавить или удалить параметры, выполните изменения в этом методе.
-
-
В поле Точка входа укажите
monitoring.msgHandler
. -
В блоке Параметры укажите:
-
Таймаут, c —
10
. -
Память —
128 МБ
. -
Сервисный аккаунт —
my-metrics-function-service-account
. -
Переменные окружения:
Ключ Описание Значение VERBOSE_LOG
Включение и отключение записи данных. True
METRICS_FOLDER_ID
Идентификатор каталога, в котором развернуты сервисы и для которого вы создадите дашборд в сервисе Monitoring. См. в консоли управления .
-
-
Нажмите кнопку Сохранить изменения.
-
Протестируйте функцию обработки данных
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите Cloud Functions.
-
Выберите функцию
my-monitoring-func
. -
В меню слева выберите Тестирование.
-
В списке Тег версии выберите
$latest
— последнюю созданную функцию. -
В поле Входные данные вставьте данные:
{ "messages": [ { "event_metadata": { "event_id": "160d239876d9714800", "event_type": "yandex.cloud.events.iot.IoTMessage", "created_at": "2020-05-08T19:16:21.267616072Z", "folder_id": "b112345678910" }, "details": { "registry_id": "are1234567890", "device_id": "are0987654321", "mqtt_topic": "$devices/are0987654321/events", "payload": "eyJWYWx1ZXMiOiBbeyJUeXBlIjogIkZsb2F0IiwgIlZhbHVlIjogIjI1Ljc0IiwgIk5hbWUiOiAiSHVtaWRpdHkifSwgeyJUeXBlIjogIkZsb2F0IiwgIlZhbHVlIjogIjgwLjY1IiwgIk5hbWUiOiAiVGVtcGVyYXR1cmUifSwgeyJUeXBlIjogIkJvb2wiLCAiVmFsdWUiOiAiRmFsc2UiLCAiTmFtZSI6ICJXYXRlciBzZW5zb3IifSwgeyJUeXBlIjogIkJvb2wiLCAiVmFsdWUiOiAiRmFsc2UiLCAiTmFtZSI6ICJTbW9rZSBzZW5zb3IifSwgeyJUeXBlIjogIkJvb2wiLCAiVmFsdWUiOiAiRmFsc2UiLCAiTmFtZSI6ICJSb29tIGRvb3Igc2Vuc29yIn0sIHsiVHlwZSI6ICJCb29sIiwgIlZhbHVlIjogIkZhbHNlIiwgIk5hbWUiOiAiUmFjayBkb29yIHNlbnNvciJ9XSwgIlRpbWVTdGFtcCI6ICIyMDIwLTA1LTIxVDIzOjEwOjE2WiIsICJEZXZpY2VJZCI6ICIwZTNjZTFkMC0xNTA0LTQzMjUtOTcyZi01NWM5NjEzMTk4MTQifQ==" } }] }
-
Нажмите кнопку Запустить тест.
При успешном выполнении функции в поле Состояние функции отобразится статус Выполнена, а в поле Ответ функции появится результат:
{ "statusCode" : 200 , "headers" : { "Content-Type" : "text/plain" }, "isBase64Encoded" : false }
Создайте триггер для вызова функции обработки данных по сигналу
Триггер вызовет функцию, когда в топике устройства появится сообщение.
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Cloud Functions.
- На панели слева выберите Триггеры.
- Нажмите кнопку Создать триггер.
- В поле Имя введите имя триггера. Например,
my-monitoring-func-trigger
. - В поле Тип выберите
IoT Core (устройство)
. - В блоке Настройки сообщений IoT Core введите ранее заданные параметры реестра и устройства:
- Реестр —
my-registry
. - Устройство —
my-device
. - MQTT-топик —
$devices/<идентификатор_устройства>/events
, где<идентификатор_устройства>
— это идентификатор устройства в сервисе Yandex IoT Core.
- Реестр —
- В блоке Настройки функции введите ранее заданные параметры функции:
- Функция —
my-monitoring-func
. - Тег версии функции —
$latest
. - Сервисный аккаунт —
my-metrics-function-service-account
.
- Функция —
- (Опционально) Настройте параметры блоков Настройки повторных запросов и Настройки Dead Letter Queue. Они обеспечивают сохранность данных.
-
Настройки повторных запросов позволяют повторно вызывать функцию, если текущий вызов функции завершается с ошибкой.
-
Настройки Dead Letter Queue позволяют перенаправлять сообщения, которые не смогли обработать получатели в обычных очередях.
В качестве DLQ очереди вы можете настроить стандартную очередь сообщений. Если вы еще не создавали очередь сообщений, создайте ее в сервисе Yandex Message Queue.
-
- Нажмите кнопку Создать триггер.
Все данные от устройства автоматически попадут в сервис Monitoring.
Настройте мониторинг показаний датчиков
Для наблюдения за показаниями датчиков используется дашборд в сервисе Yandex Monitoring. Показания датчиков поступают с контроллера на сервер раз в минуту по MQTT-протоколу. Когда показания датчиков достигают заданных значений, Monitoring отправляет уведомления пользователям.
Формат передачи данных
{
"DeviceId":"e7a68b2d-464e-4222-88bd-c9e8********",
"TimeStamp":"2020-05-21T10:16:43Z",
"Values":[{
"Type":"Float",
"Name":"Humidity",
"Value":"12.456"
},
{
"Type":"Float",
"Name":"Temperature",
"Value":"-23.456"
},
{
"Type":"Bool",
"Name":"Water sensor",
"Value":"false"
},
{
"Type":"Bool",
"Name":"Smoke sensor",
"Value":"false"
},
{
"Type":"Bool",
"Name":"Room door sensor",
"Value":"true"
},
{
"Type":"Bool",
"Name":"Rack door sensor",
"Value":"false"}
]
}
Настройте мониторинг показаний датчиков: создайте графики на дашборде, канал уведомлений и алерт
Создайте дашборд
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Monitoring.
- Перейдите на вкладку Дашборды.
- Нажмите кнопку Создать.
- Справа вверху нажмите кнопку Сохранить.
- В открывшемся окне введите название дашборда и нажмите кнопку Сохранить.
Создайте графики
Создайте график изменения температуры:
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите Monitoring.
-
Перейдите на вкладку Дашборды.
-
Напротив названия нужного дашборда нажмите значок
→ Редактировать. -
В нижнем блоке нажмите График.
-
Создайте запрос для графика:
- В редакторе запроса нажмите значок
. - В списке сервисов service= выберите
Custom Metrics
. - В списке типов графиков name= выберите
Temperature
— температура в помещении. - В списке device_id= выберите идентификатор устройства, по которому вы хотите создать график.
- В редакторе запроса нажмите значок
-
Справа вверху нажмите кнопку Сохранить.
Аналогичным способом создайте другие графики:
Humidity
— влажность в помещении;Water sensor
— вода на полу (есть вода / нет воды);Smoke sensor
— дым (есть дым / нет дыма);Room door sensor
— открытие двери в помещение (дверь открыта / дверь закрыта);Rack door sensor
— открытие дверцы серверной стойки (дверца открыта / дверца закрыта).
Дашборд доступен по ссылке всем пользователям Yandex Cloud с ролью viewer
. Вы можете его настраивать, изменять масштаб, включать и отключать автоматическое обновление данных.
Протестируйте работу графиков на дашборде
Если поменять базовые значения в переменных окружения функции эмулирующего устройства, эти изменения отразятся на графиках.
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите Cloud Functions.
-
Выберите функцию
my-device-emulator-function
. -
Нажмите на вкладку Редактор.
-
В нижней части окна в блоке Переменные окружения в поле Значение замените несколько исходных значений переменных на любые другие.
Ключ Исходное значение Новое значение HUMIDITY_SENSOR_VALUE
80.15
40
TEMPERATURE_SENSOR_VALUE
25.25
15
RACK_DOOR_SENSOR_VALUE
False
True
ROOM_DOOR_SENSOR_VALUE
False
True
SMOKE_SENSOR_VALUE
False
True
WATER_SENSOR_VALUE
False
True
-
Нажмите кнопку Сохранить изменения и дождитесь завершения операции.
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Monitoring и посмотрите, как изменились показатели графиков.
Создайте канал уведомлений
Настройте список получателей и выберите способ уведомлений.
-
В консоли управления
выберите каталог, в котором вы выполняете руководство. -
В списке сервисов выберите Monitoring.
-
Перейдите на вкладку Каналы уведомлений.
-
Нажмите кнопку Создать канал.
-
В поле Имя укажите название канала. Например,
my-message-channel
. -
В списке Метод выберите
Email
.Вы также можете настроить уведомления через SMS, push-уведомления или в Telegram.
-
В списке Получатели выберите учетную запись.
Вы можете выбрать несколько получателей уведомлений. В качестве получателей вы можете указать аккаунты пользователей, у которых есть доступ к вашему облаку. Подробнее о том, как добавить пользователя в Yandex Cloud.
-
Нажмите кнопку Создать.
Создайте алерт
Создайте алерт по показаниям датчика температуры в помещении и подключите к нему созданный канал уведомлений.
Сервис отправит этот алерт получателям, если в течение определенного периода (5 минут
) датчик температуры в серверной комнате будет показывать определенную температуру:
50 градусов
— алертWarning
(предупреждение).70 градусов
— алертAlarm
(критическое значение).
- В консоли управления
выберите каталог, в котором вы выполняете руководство. - В списке сервисов выберите Monitoring.
- Нажмите кнопку Создать алерт.
- В поле Имя введите имя алерта.
- В блоке Настройки алерта нажмите значок
и заполните поля:- В списке сервисов service= выберите
Custom Metrics
. - В списке типов алертов name= выберите
Temperature
. - В списке device_id= выберите идентификатор устройства, по которому вы хотите создать алерт.
- В списке сервисов service= выберите
- В блоке Условия срабатывания задайте условия срабатывания алерта:
- В списке Функция агрегации выберите
Среднее
. - В списке Функция сравнения выберите
Больше
. - В поле Warning введите
50
. - В поле Alarm введите
70
. - В списке Окно вычисления выберите
5 минут
.
- В списке Функция агрегации выберите
- В блоке Уведомления нажмите кнопку Редактировать, затем кнопку Добавить.
- В открывшемся окне в поле Способ уведомления выберите
my-message-channel
и нажмите кнопку Добавить. - В нижней части окна нажмите кнопку Создать.
Вы можете создавать и настраивать алерты на любую метрику в сервисе Monitoring.
В результате выполнения руководства:
- Вы сможете отслеживать показания датчиков на графиках.
- Если показания датчиков достигнут заданных значений, вы получите уведомления.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите реестр в сервисе Yandex IoT Core
- Удалите устройство в сервисе Yandex IoT Core
- Удалите функции в сервисе Cloud Functions
- Удалите триггеры для вызова функций в сервисе Cloud Functions
- Удалите дашборд в сервисе Monitoring
- Удалите алерт в сервисе Monitoring
- Удалите канал уведомлений в сервисе Monitoring.