Запись данных с устройства в базу данных
В данном руководстве вы организуете запись данных с устройства в базу данных. В качестве примера будет использоваться кластер Yandex Managed Service for PostgreSQL. Чтобы подключить устройство к Yandex IoT Core, вам понадобится MQTT-брокер. Все шаги выполняются в консоли управления
Чтобы начать записывать информацию с устройства в базу данных:
- Подготовьте облако к работе.
- Создайте сервисный аккаунт.
- Создайте необходимые ресурсы Yandex IoT Core.
- Подключите устройство к MQTT-брокеру.
- Подготовьте базу данных.
- Создайте функцию для обработки данных.
- Создайте триггер для Yandex IoT Core.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за кластер БД PostgreSQL (см. тарифы Yandex Managed Service for PostgreSQL);
- плата за обмен сообщениями между ресурсами Yandex IoT Core (см. тарифы Yandex IoT Core);
- плата за вызовы функций и вычислительные ресурсы для их выполнения (см. тарифы Yandex Cloud Functions).
Создайте сервисный аккаунт
- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
my-db-function-service-account. - Нажмите кнопку
Добавить роль и выберите ролиfunctions.functionInvokerиeditor. - Нажмите кнопку Создать.
Создайте необходимые ресурсы Yandex IoT Core
Примечание
В руководстве используется авторизация по логину и паролю, поэтому добавлять сертификат реестру и устройству не требуется. В своих проектах вы можете использовать авторизацию с помощью сертификатов.
Создайте реестр
-
В консоли управления
выберите каталог, в котором нужно создать реестр. -
В списке сервисов выберите IoT Core.
-
Нажмите кнопку Создать реестр.
-
В поле Имя введите
my-registry. -
Введите пароль.
- Длина — не менее 14 символов.
- Должен содержать букву верхнего регистра, букву нижнего регистра и цифру.
Важно
Сохраните пароль, так как прочитать его из Yandex IoT Core будет невозможно.
-
Нажмите кнопку Создать.
Создайте устройство
После создания реестра вы попадете в его настройки.
-
Перейдите на вкладку Устройства.
-
Нажмите кнопку Добавить устройство.
-
В поле Имя введите
my-device. -
Введите пароль.
- Длина — не менее 14 символов.
- Должен содержать букву верхнего регистра, букву нижнего регистра и цифру.
Важно
Сохраните пароль, так как прочитать его из Yandex IoT Core будет невозможно.
-
Нажмите кнопку Создать.
Подключите устройство к MQTT-брокеру
Для подключения к MQTT-серверу используйте следующие параметры:
- Сертификат удостоверяющего центра
. - Адрес сервера:
mqtt.cloud.yandex.net. - Порт сервера:
8883. - Протокол:
TLSv1.2.
Подготовьте базу данных
Создайте кластер
-
В консоли управления
выберите каталог, в котором нужно создать кластер БД. -
В списке сервисов выберите Managed Service for PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
В поле Имя кластера введите
my-pg-database. -
В поле Окружение выберите
PRODUCTION. -
В поле Версия выберите
12. -
В блоке Класс хоста:
- Укажите платформу
Intel Cascade Lake. - Выберите тип
burstable. - Укажите класс
b2.medium.
Важно
Класс
b2.mediumбыл выбран только в рамках тестирования. В реальных проектах использовать хосты с гарантированной долей vCPU ниже 100% не рекомендуется. - Укажите платформу
-
В блоке Размер хранилища:
- Выберите
network-ssd. - Укажите размер равным 10 ГБ.
Примечание
Тип и размер диска следует выбирать в соответствии с решаемыми задачами. Значения, указанные выше, используются для тестирования.
- Выберите
-
В блоке База данных укажите атрибуты БД:
- Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
- Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания.
- Пароль пользователя. Длина — от 8 до 128 символов.
Для базы данных, которая создается вместе с кластером, устанавливаются настройки набора символов (кодировки)
LC_CTYPE=CиLC_COLLATE=C. После создания эти настройки изменить нельзя, но вы можете создать новую базу с нужными настройками. -
В блоке Хосты нажмите
и включите опцию Публичный доступ. -
В блоке Дополнительные настройки включите опцию Доступ из консоли управления.
-
Нажмите кнопку Создать кластер.
Подробнее о создании кластера — в разделе Как создать кластер PostgreSQL.
В дальнейшем настройки кластера можно будет изменить.
Подключитесь к кластеру
После создания кластера вы автоматически будете перенаправлены на страницу Кластеры.
Дождитесь, пока статус кластера изменится на Alive.
- Выберите кластер
my-pg-database. - Перейдите на вкладку SQL.
- В поле Имя пользователя БД укажите имя пользователя, который владеет БД, созданной на предыдущем шаге.
- В поле Пароль введите пароль, указанный при создании кластера.
- Нажмите кнопку Подключиться.
Создайте таблицу
В качестве примера источника данных в сценарии используется датчик воздуха, который измеряет следующие параметры:
- Влажность.
- Уровень содержания углекислого газа (CO2).
- Давление.
- Температура.
Датчик выдает результат в формате JSON. Например:
{
"DeviceId":"0e3ce1d0-1504-4325-972f-55c9********",
"TimeStamp":"2020-05-21T22:53:16Z",
"Values":[
{"Type":"Float","Name":"Humidity","Value":"25.281837"},
{"Type":"Float","Name":"CarbonDioxide","Value":"67.96608"},
{"Type":"Float","Name":"Pressure","Value":"110.7021"},
{"Type":"Float","Name":"Temperature","Value":"127.708824"}
]
}
Запишите полученную информацию в таблицу базы данных с помощью функции.
После того, как вы подключились к кластеру, создайте таблицу. Для этого:
-
В окне редактирования введите следующий запрос:
Важно
Запрос ниже приведен в качестве примера. Если ваше устройство отправляет другую информацию, измените столбцы в создаваемой таблице.
CREATE TABLE iot_events ( event_id varchar(24) not null, device_id varchar(50) not null, event_datetime timestamptz not null, humidity float8 null, carbon_dioxide float8 null, pressure float8 null, temperature float8 null ) -
Нажмите кнопку Выполнить.
Дождитесь появления надписи о завершении выполнения запроса.
Создайте функцию для обработки данных
Функция будет получать сообщения из MQTT-брокера и записывать данные в таблицу, созданную на предыдущем шаге.
- В консоли управления
выберите каталог, в котором нужно создать функцию. - В списке сервисов выберите Cloud Functions.
- Нажмите кнопку Создать функцию.
- Введите имя функции.
- Нажмите кнопку Создать.
Создайте версию функции
После создания функции вы автоматически будете перенаправлены на страницу Редактор.
-
В блоке Код функции:
- В поле Среда выполнения выберите
python37. - В поле Способ оставьте значение по умолчанию: Редактор кода.
- В поле Среда выполнения выберите
-
Создайте файл
myfunction.py. -
В области редактирования файла вставьте код функции, размещенный на Github
.Примечание
Запрос, который используется для записи данных в БД, формируется в методе
makeInsertStatement. Если необходимо убрать или добавить параметры, внесите изменения в этот метод. -
В поле Точка входа укажите
myfunction.msgHandler. -
Задайте следующие параметры версии:
- Таймаут —
10. - Память —
128 МБ.
- Таймаут —
-
В поле Сервисный аккаунт выберите
my-db-function-service-account. -
Добавьте переменные окружения:
VERBOSE_LOG— параметр, отвечающий за вывод подробной информации о выполнении функции. Введите значениеTrue.DB_HOSTNAME— имя хоста БД PostgreSQL для подключения.DB_PORT— порт для подключения.DB_NAME— имя базы данных для подключения.DB_USER— имя пользователя для подключения.DB_PASSWORD— пароль, который был введен при создании кластера.
Чтобы определить значения параметров для подключения:
- В консоли управления
выберите каталог, в котором вы создали кластер. - В списке сервисов выберите Managed Service for PostgreSQL.
- Выберите кластер
my-pg-database. - В строке с нужной БД нажмите значок
и выберите Подключиться. - На вкладке PowerShell найдите пример строки подключения.
- Перенесите значения переменных
host,port,dbnameиuserв соответствующее поле Значение переменных окружения функции.
-
Нажмите кнопку Сохранить изменения.
Создайте триггер для Yandex IoT Core
Триггер будет принимать копии сообщений из топика устройства и передавать их в функцию для обработки.
-
В консоли управления
выберите каталог, в котором нужно создать триггер. -
В списке сервисов выберите Cloud Functions.
-
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- В поле Имя введите имя триггера.
- В поле Описание введите описание триггера.
- В поле Тип выберите IoT Core (устройство).
-
В блоке Настройки сообщений IoT Core:
-
В поле Реестр введите
my-registry. -
В поле Устройство введите
my-device. -
В поле MQTT-топик укажите топик, в который устройство отправляет данные:
$devices/<идентификатор_устройства>/eventsГде
<идентификатор_устройства>— идентификатор вашего устройства.Триггер будет срабатывать при появлении новых данных в указанном топике.
-
-
В блоке Настройки функции:
- Выберите функцию для обработки данных, созданную ранее.
- В поле Тег версии функции укажите
$latest. - В поле Сервисный аккаунт укажите
my-db-function-service-account.
-
Остальные поля оставьте пустыми или заполните по своему усмотрению.
-
Нажмите кнопку Создать триггер.
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы: