Запись данных с устройства в Managed Service for PostgreSQL
В этом руководстве вы организуете хранение информации с устройства в базе данных кластера 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
. -
Задайте следующие параметры версии:
- Таймаут, c —
10
. - Память —
128 МБ
.
- Таймаут, c —
-
В поле Сервисный аккаунт выберите
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
.
-
Остальные поля оставьте пустыми или заполните по своему усмотрению.
-
Нажмите кнопку Создать триггер.
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы: