Запись данных с устройства в Managed Service for PostgreSQL
В сценарии вы узнаете, как организовать хранение информации, полученной с устройства, в базе данных кластера Managed Service for PostgreSQL. Чтобы подключить устройство к Yandex IoT Core, вам понадобится MQTT-брокер. Все шаги сценария выполняются в консоли управления.
Чтобы начать записывать информацию с устройства в базу данных:
- Создайте необходимые ресурсы Yandex IoT Core.
- Подключите устройство к MQTT-брокеру.
- Подготовьте базу данных.
- Создайте функцию для обработки данных.
- Создайте триггер для Yandex IoT Core.
Создайте необходимые ресурсы Yandex IoT Core
Примечание
В сценарии используется авторизация по логину и паролю, поэтому добавлять сертификат реестру и устройству не требуется. В своих проектах вы можете использовать авторизацию с помощью сертификатов.
Создайте реестр
-
В консоли управления выберите каталог, в котором нужно создать реестр.
-
Нажмите кнопку Создать ресурс.
-
Выберите Реестр устройств.
-
В поле Имя введите
my-registry
. -
Введите пароль.
- Длина — не менее 14 символов.
- Должен содержать букву верхнего регистра, букву нижнего регистра и цифру.
Важно
Сохраните пароль, так как прочитать его из Yandex IoT Core будет невозможно.
-
Пропустите блок Сертификаты.
-
Нажмите кнопку Создать.
Создайте устройство
После создания реестра вы автоматически будете перенаправлены на страницу Реестры.
-
В списке реестров выберите
my-registry
. -
Перейдите на вкладку Устройства.
-
Нажмите кнопку Добавить устройство.
-
В поле Имя введите
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.nano
.
Важно
Класс
b2.nano
был выбран только в рамках тестирования. В реальных проектах использовать хосты с гарантированной долей vCPU ниже 100% не рекомендуется. - Укажите платформу
-
В блоке Размер хранилища:
- Выберите
network-ssd
. - Укажите размер равным 10 ГБ.
Примечание
Тип и размер диска следует выбирать в соответствии с решаемыми задачами. Значения, указанные выше, используются для тестирования.
- Выберите
-
В блоке База данных укажите атрибуты БД:
- Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
- Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания.
- Пароль пользователя. Длина — от 8 до 128 символов.
Для базы данных, которая создается вместе с кластером, устанавливаются настройки набора символов (кодировки)
LC_CTYPE=C
иLC_COLLATE=C
. После создания эти настройки изменить нельзя, но вы можете создать новую базу с нужными настройками. -
В блоке Хосты добавьте хост, который будет доступен извне Yandex Cloud. Для этого включите опцию Публичный доступ.
-
Остальные поля оставьте заполненными по умолчанию.
-
Нажмите кнопку Создать кластер.
Подробнее о создании кластера — в разделе Как создать кластер PostgreSQL.
В дальнейшем настройки кластера можно будет изменить.
Подключитесь к кластеру
После создания кластера вы автоматически будете перенаправлены на страницу Кластеры.
- Выберите кластер
my-pg-database
. - Перейдите на вкладку SQL.
- В поле Имя пользователя БД укажите имя пользователя, который владеет БД, созданной на предыдущем шаге.
- В поле Пароль введите пароль, указанный при создании кластера.
- В поле База данных укажите имя базы данных.
- Нажмите кнопку Подключиться.
Создайте таблицу
В качестве примера источника данных в сценарии используется датчик воздуха, который измеряет следующие параметры:
- Влажность.
- Уровень содержания углекислого газа (COvv2vv).
- Давление.
- Температура.
Датчик выдает результат в формате JSON. Например:
{
"DeviceId":"0e3ce1d0-1504-4325-972f-55c961319814",
"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
. - Добавьте роли:
serverless.functions.invoker
иeditor
. - Нажмите кнопку Создать.
Созданный аккаунт автоматически добавится в поле Сервисный аккаунт. От имени этого аккаунта функция будет записывать данные в БД.
-
Добавьте переменные окружения:
VERBOSE_LOG
— параметр, отвечающий за вывод подробной информации о выполнении функции. Введите значениеTrue
.DB_HOSTNAME
— имя хоста БД PostgreSQL для подключения.DB_PORT
— порт для подключения.DB_NAME
— имя базы данных для подключения.DB_USER
— имя пользователя для подключения.DB_PASSWORD
— пароль, который был введен при создании кластера.
Чтобы определить значения параметров для подключения:
- В консоли управления выберите каталог, в котором вы создали кластер.
- В списке сервисов выберите Managed Service for PostgreSQL.
- Выберите кластер
my-pg-database
. - Нажмите значок в строке с нужной БД.
- Выберите пункт Подключиться.
- На вкладке Shell найдите пример строки подключения.
- Перенесите значения переменных
host
,port
,dbname
иuser
в соответствующее поле Значение переменных окружения функции.
-
Нажмите кнопку Создать версию.
Создайте триггер для Yandex IoT Core
Триггер будет принимать копии сообщений из топика устройства и передавать их в функцию для обработки.
-
В консоли управления выберите каталог, в котором нужно создать триггер.
-
В списке сервисов выберите Cloud Functions.
-
Перейдите на вкладку Триггеры.
-
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- В поле Имя введите имя триггера.
- В поле Описание введите описание триггера.
- В поле Тип выберите Yandex IoT Core.
-
В блоке Настройки сообщений Yandex IoT Core:
-
В поле Реестр введите
my-registry
. -
В поле Устройство введите
my-device
. -
В поле Топик укажите топик, в который устройство отправляет данные:
$devices/<device id>/events
Где
<device id>
— идентификатор вашего устройства.Триггер будет срабатывать при появлении новых данных в указанном топике.
-
-
В блоке Настройки функции:
- Выберите функцию для обработки данных, созданную ранее.
- В поле Тег версии укажите
$latest
. - В поле Сервисный аккаунт укажите
my-db-function-service-account
.
-
Остальные поля оставьте пустыми или заполните по своему усмотрению.
-
Нажмите кнопку Создать триггер.