Мониторинг показаний датчиков и уведомления о событиях
В этом сценарии вы настроите мониторинг и уведомления об изменениях для показаний датчиков, подключенных к сервису Yandex IoT Core. Датчики будут эмулированы с помощью сервиса Yandex Cloud Functions. Если у вас есть подключенные датчики, используйте их.
Для работы со сценарием вам не нужно создавать и настраивать виртуальные машины — вся работа основана на бессерверных вычислениях Cloud Functions. Исходный код, который используется в этом сценарии, доступен на GitHub
Чтобы настроить мониторинг показаний датчиков в серверной комнате:
-
Создайте эмулятор устройства на базе Cloud Functions.
- Создайте функцию эмуляции отправки данных с устройства.
- Протестируйте функцию эмуляции отправки данных.
- Создайте триггер вызова функции эмуляции один раз в минуту.
- Создайте функцию обработки принимаемых данных.
- Протестируйте функцию обработки данных.
- Создайте триггер вызова функции обработки данных по сигналу.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Необходимые платные ресурсы
В стоимость входят:
- Плата за количество сообщений сервиса Yandex IoT Core (см. тарифы).
- Плата за количество вызовов функции сервиса Cloud Functions (см. тарифы).
- Плата за запись пользовательских метрик через API сервиса Yandex Monitoring .
Создайте необходимые ресурсы Yandex IoT Core
Реестр и устройство — основные компоненты сервиса Yandex IoT Core для обмена данными и командами. Чтобы устройства могли обмениваться данными, их необходимо создавать в одном реестре.
Создайте реестр и настройте авторизацию по логину и паролю
Чтобы создать реестр:
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Yandex IoT Core.
-
Нажмите кнопку Создать реестр.
-
В поле Имя введите имя реестра. Например,
my-registry
. -
В поле Пароль задайте пароль доступа к реестру.
Для создания пароля можно воспользоваться генератором паролей
. Не забудьте сохранить пароль, он вам понадобится. -
(Опционально) В поле Описание добавьте дополнительную информацию о реестре.
-
Нажмите кнопку Создать.
Вы также можете использовать авторизацию с помощью сертификатов. Подробнее об авторизации в Yandex IoT Core.
Создайте устройство и настройте авторизацию по логину и паролю
Чтобы создать устройство:
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Yandex IoT Core.
-
Выберите реестр, созданный на предыдущем шаге.
-
В левой части окна выберите раздел Устройства.
-
Нажмите кнопку Добавить устройство.
-
В поле Имя введите имя устройства. Например,
my-device
. -
В поле Пароль задайте пароль доступа к устройству.
Для создания пароля можно воспользоваться генератором паролей
. Не забудьте сохранить пароль, он вам понадобится. -
(Опционально) В поле Описание добавьте дополнительную информацию об устройстве.
-
(Опционально) Добавьте алиас:
-
Нажмите кнопку Добавить алиас.
-
Заполните поля: введите алиас (например
events
) и тип топика после$devices/<deviceID>
(например,events
).Вы сможете использовать алиас
events
вместо топика$devices/<deviceID>/events
. -
Повторите действия для каждого добавляемого алиаса.
-
-
Нажмите кнопку Создать.
-
Повторите действия для каждого устройства, которое вы хотите создать.
Вы также можете использовать авторизацию с помощью сертификатов. Подробнее об авторизации в Yandex IoT Core.
Создайте эмулятор устройства в Cloud Functions
Эмулятор отправляет данные с датчиков устройства и обрабатывает данные для мониторинга и алертов.
Вам потребуется:
- Создать и протестировать функцию эмуляции отправки данных с датчиков каждого устройства.
- Создать триггер вызова функции эмуляции один раз в минуту.
- Создать и протестировать функцию обработки принимаемых данных.
- Создать триггер вызова функции обработки данных по сигналу.
Создайте функцию эмуляции отправки данных с устройства
Чтобы создать функцию:
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Cloud Functions.
-
В левой части окна выберите раздел Функции.
-
Нажмите кнопку Создать функцию.
-
В поле Имя введите имя функции. Например,
my-device-emulator-function
. -
(Опционально) В поле Описание добавьте дополнительную информацию о функции.
-
Нажмите кнопку Создать.
-
В открывшемся окне Редактор в списке Среда выполнения выберите
nodejs12
. -
Выберите Способ: Редактор кода.
-
В левой части окна Редактор кода нажмите кнопку Создать файл.
-
В открывшемся окне Новый файл ведите имя файла
device-emulator.js
. -
Нажмите кнопку Создать.
-
Выберите созданный файл в левой части окна Редактор кода.
-
В правой части окна Редактор кода вставьте код функции с GitHub
. -
Повторите шаги 10-14 и аналогичным образом создайте файл
package.json
со следующим содержимым:{ "name": "my-app", "version": "1.0.0", "dependencies": { "yandex-cloud": "*" } }
-
В поле Точка входа введите
device-emulator.handler
. -
В поле Таймаут, с введите
10
. -
В поле Память оставьте значение
128 МБ
. -
Создайте сервисный аккаунт, от имени которого функция отправит данные в Yandex IoT Core:
- Нажмите кнопку Создать аккаунт.
- В открывшемся окне Создание сервисного аккаунта в поле Имя введите имя аккаунта. Например,
my-emulator-function-service-account
. - Добавьте роли для вызова функции и записи в ресурсы
functions.functionInvoker
иiot.devices.writer
:- Нажмите на значок
. - Выберите роль в списке.
- Нажмите кнопку Создать.
- Нажмите на значок
-
Настройте параметр Переменные окружения для каждого датчика серверной комнаты:
-
Нажмите кнопку Добавить переменную окружения.
-
Заполните поля Ключ и Значение для переменных окружения:
Ключ Описание Значение 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
Пользовательское название устройства. Задается пользователем.
-
-
Нажмите кнопку Сохранить изменения.
Протестируйте функцию эмуляции
Чтобы протестировать функцию:
-
(Опционально) Для получения подробной информации с датчиков, подпишите реестр на топик устройства Yandex IoT Core.
Где:
$devices/<deviceID>/events
— топик устройства.<deviceID>
— ID устройства в сервисе.
CLIЕсли у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Выполните команду:
yc iot mqtt subscribe \ --username <ID_реестра> \ --password <пароль_реестра> \ --topic '$devices/<ID_устройства>/events' \ --qos 1
Где:
--username
и--password
— параметры авторизации с помощью логина и пароля.--topic
— топик устройства для отправки данных.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Подробнее о подписке на топики устройства в Yandex IoT Core.
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Cloud Functions.
-
В левой части окна выберите раздел Тестирование.
-
В списке Тег версии выберите
$latest
— последнюю созданную функцию. -
Нажмите кнопку Запустить тест.
При успешном выполнении функции в поле Состояние функции отобразится статус Выполнена и в поле Ответ функции появится результат:
{
"statusCode" : 200
}
Если вы подписались на топик устройства Yandex IoT Core, вы получите JSON вида:
{
"":"0e3ce1d0-1504-4325-972f-55c961319814",
"TimeStamp":"2020-05-21T22:38:12Z",
"Values":[
{
"Type":"Float",
"Name":"Humidity",
"Value":"25.33"
},
{
"Type":"Float",
"Name":"Temperature",
"Value":"80.90"
},
{
"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"
}]
}
Подробнее об MQTT-топиках в сервисе Yandex IoT Core.
Создайте триггер вызова функции один раз в минуту
Чтобы создать триггер:
- В консоли управления
выберите каталог, в котором вы выполняете сценарий. - Выберите сервис 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
. -
(Опционально) В поле Описание добавьте дополнительную информацию о функции.
-
Нажмите кнопку Создать.
-
В открывшемся окне Редактор в списке Среда выполнения выберите
python37
. -
Выберите Способ: нажмите на вкладку Редактор кода.
-
В левой части окна Редактор кода нажмите кнопку Создать файл.
-
В открывшемся окне Новый файл ведите имя файла
monitoring.py
. -
Нажмите кнопку Создать.
-
В левой части окна Редактор кода выберите созданный файл.
-
В правой части окна вставьте код функции с GitHub
.В этой функции подготовка данных для отправки в сервис мониторинга находится в методе
makeAllMetrics
. Если вы захотите добавить или удалить параметры, выполните изменения в этом методе. -
В поле Точка входа окна Редактор введите
monitoring.msgHandler
. -
В поле Таймаут, с введите
10
. -
В поле Память оставьте значение
128 МБ
. -
Создайте сервисный аккаунт, от имени которого функция обработает данные, полученные от устройства:
- Нажмите кнопку Создать аккаунт.
- В открывшемся окне Создание сервисного аккаунта в поле Имя введите имя аккаунта. Например,
my-metrics-function-service-account
. - Добавьте роли вызова функции и изменения ресурсов
functions.functionInvoker
иeditor
:- Нажмите на значок
. - Выберите роль в списке.
- Нажмите кнопку Создать.
- Нажмите на значок
- Настройте параметр Переменные окружения:
-
Нажмите кнопку Добавить переменную окружения.
-
Заполните поля Ключ и Значение для переменных окружения:
Ключ Описание Значение VERBOSE_LOG
Включение и отключение записи данных. True
METRICS_FOLDER_ID
Идентификатор каталога, в котором развернуты сервисы и для которого вы создадите дашборд в сервисе Monitoring. См. в консоли управления.
-
-
Нажмите кнопку Сохранить изменения.
Протестируйте функцию обработки данных
Чтобы протестировать функцию:
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Cloud Functions.
-
В левой части окна выберите раздел Тестирование.
-
В списке Тег версии выберите
$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
. - (Опционально) В поле Описание добавьте дополнительную информацию о триггере.
- Выберите Тип: Yandex IoT Core.
- В блоке Настройки сообщений Yandex IoT Core введите ранее заданные параметры реестра и устройства:
- Реестр:
my-registry
. - Устройство:
my-device
. - MQTT-топик:
$devices/<deviceID>/events
, где<deviceID>
— это ID устройства в сервисе Yandex IoT Core.
- Реестр:
- В блоке Настройки функции введите ранее заданные параметры функции:
- Функция:
my-monitoring-func
. - Тег версии функции:
$latest
. - Сервисный аккаунт:
my-metrics-function-service-account
.
- Функция:
- (Опционально) Настройте параметры блоков Настройки повторных запросов и Настройки Dead Letter Queue. Они обеспечивают сохранность данных.
-
Настройки повторных запросов позволяют повторно вызывать функцию, если текущий вызов функции завершается с ошибкой.
-
Настройки Dead Letter Queue позволяют перенаправлять сообщения, которые не смогли обработать получатели в обычных очередях.
В качестве DLQ очереди вы можете настроить стандартную очередь сообщений. Если вы еще не создавали очередь сообщений, создайте ее в сервисе Message Queue.
-
- Нажмите кнопку Создать триггер.
Все данные от устройства автоматически попадут в сервис Monitoring.
Настройте мониторинг показаний датчиков
Для наблюдения за показаниями датчиков используется дашборд в сервисе Yandex Monitoring. Показания датчиков поступают с контроллера на сервер раз в минуту по MQTT-протоколу. Когда показания датчиков достигают заданных значений, Monitoring отправляет уведомления пользователям.
{
"DeviceId":"e7a68b2d-464e-4222-88bd-c9e8d10a70cd",
"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.
- Перейдите на вкладку Дашборды.
- Нажмите кнопку Создать.
- В блоке Добавить виджет нажмите Новый график.
- В списке сервисов service= выберите Custom Metrics.
- В списке типов графиков name= выберите Temperature.
- В списке device_id= выберите идентификатор устройства, по которому вы хотите создать график.
- Нажмите кнопку Сохранить.
- Повторите действия для каждого графика из списка:
Temperature
— температуры в помещении.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 и посмотрите, как изменились показатели графиков.
Создайте алерт
Создайте алерт по показаниям датчика температуры в помещении и настройте список получателей алерта.
Сервис отправит этот алерт получателям, если в течение определенного периода (5 минут
) датчик температуры в серверной комнате будет показывать определенную температуру:
50 градусов
— алертWarning
(предупреждение).70 градусов
— алертAlarm
(критическое значение).
Чтобы создать алерт:
-
В консоли управления
выберите каталог, в котором вы выполняете сценарий. -
Выберите сервис Monitoring.
-
Нажмите кнопку Создать алерт.
-
В блоке Основные в поле Имя введите имя алерта.
-
В блоке Метрики в разделе Метрики нажмите на значок
и заполните поля:- В списке сервисов service= выберите Custom Metrics.
- В списке типов алертов name= выберите Temperature.
- В списке device_id= выберите идентификатор устройства, по которому вы хотите создать алерт.
-
В разделе Настройки алерта задайте условия срабатывания алерта:
- В списке Условие срабатывания выберите Больше.
- В поле Alarm введите
70
. - В поле Warning введите
50
.
-
По ссылке Показать дополнительные настройки раскройте блок дополнительных параметров алерта.
-
В списке Функция агрегации выберите Среднее.
-
В списке Окно вычисления выберите
5 минут
. -
В блоке Канал уведомлений нажмите кнопку Добавить канал.
-
В открывшемся окне нажмите кнопку Создать канал.
-
В поле Имя введите название канала. Например,
my-message-channel
. -
В списке Метод выберите Email.
Вы также можете настроить уведомления по SMS.
-
В списке Получатели выберите учетную запись.
Вы можете выбрать несколько получателей уведомлений. В качестве получателей вы можете указать аккаунты пользователей, у которых есть доступ к вашему облаку. Подробнее о том, как добавить пользователя в Yandex Cloud.
-
Нажмите кнопку Создать.
-
(опционально) Выберите канал уведомлений в таблице и настройте дополнительные параметры уведомлений:
- Чтобы включить или отключить отправку уведомлений по определенному статусу алертов, нажмите на соответствующее значение графы Уведомлять о статусах:
Alarm
.Warning
.OK
.No data
.
- Чтобы настроить отправку повторного уведомления, в списке Уведомлять повторно выберите, когда вы хотите получить повторное уведомление:
Никогда
.- Через
5 минут
. - Через
10 минут
. - Через
30 минут
. - Через
1 час
.
- Чтобы отредактировать канал уведомлений, нажмите на ... в правой части строки.
- Чтобы включить или отключить отправку уведомлений по определенному статусу алертов, нажмите на соответствующее значение графы Уведомлять о статусах:
-
Нажмите кнопку Создать алерт в нижней части окна.
Вы можете создавать и настраивать алерты на любую метрику в сервисе Monitoring.
В результате выполнения сценария:
- Вы сможете отслеживать показания датчиков на графиках.
- Если показания датчиков достигнут заданных значений, вы получите уведомления.
Удалите созданные облачные ресурсы
Если вам больше не нужны облачные ресурсы, созданные в процессе выполнения сценария:
- Удалите реестр в сервисе Yandex IoT Core.
- Удалите устройство в сервисе Yandex IoT Core.
- Удалите функции в сервисе Cloud Functions.
- Удалите триггеры функций в сервисе Cloud Functions.
- Удалите графики в сервисе Monitoring.
- Удалите дашборды в сервисе Monitoring.
- Удалите алерты и каналы уведомлений в сервисе Monitoring.