Экспорт показаний датчиков Алисы в базу данных MySQL через Node-RED
Накопление исторической телеметрии — это важный этап развития любой системы домашней автоматизации. В то время как приложение Яндекс позволяет отслеживать текущие показатели датчиков температуры и влажности лишь в реальном времени, внешняя база данных дает возможность сохранять полную историю измерений за месяцы или даже годы. Эти данные незаменимы для последующего анализа эффективности систем отопления, отслеживания влажности в жилых комнатах и автоматического выявления аномалий.
Наиболее простым и надежным решением для организации такого архива является связка Node-RED и популярной реляционной СУБД MySQL. В этой статье мы пошагово разберем, как экспортировать данные датчиков из Умного Дома Яндекса в базу данных и подготовить основу для их визуализации.
Шаг 1: Подготовка базы данных MySQL и создание таблицы
Прежде чем приступать к настройке интеграции в Node-RED, необходимо создать базу данных на вашем домашнем сервере (это может быть Raspberry Pi, NAS-хранилище Synology или любой домашний ПК, работающий круглосуточно).
Подключитесь к вашему серверу MySQL с помощью любого удобного SQL-клиента (например, phpMyAdmin или DBeaver) и выполните SQL-запрос для создания отдельной базы данных:
CREATE DATABASE smart_home;
USE smart_home;
Далее создадим структуру таблицы sensor_data для хранения телеметрии. Таблица должна содержать уникальный идентификатор записи, временную метку получения данных, имя датчика, тип измеряемого параметра (температура или влажность) и само числовое значение:
CREATE TABLE sensor_data (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
sensor_name VARCHAR(100) NOT NULL,
metric_type VARCHAR(50) NOT NULL,
value FLOAT NOT NULL
);
Шаг 2: Установка и настройка модуля MySQL в Node-RED
По умолчанию среда Node-RED не имеет встроенного узла для работы с MySQL. Нам потребуется установить официальный модуль расширения.
- Откройте веб-интерфейс редактора Node-RED.
- В верхнем правом углу нажмите на значок меню и перейдите в раздел Manage palette (Управление палитрой).
- Перейдите на вкладку Install, в поисковой строке введите
node-red-node-mysqlи нажмите кнопку установки напротив найденного модуля. - После завершения установки в вашей панели инструментов слева в разделе «Storage» появится новый узел под названием mysql.
Перетащите узел mysql на рабочее поле. Дважды кликните по нему для редактирования. Нажмите на иконку карандаша для добавления новой конфигурации подключения. Укажите IP-адрес хоста с MySQL, порт (по умолчанию 3306), имя пользователя базы данных, пароль и имя базы данных smart_home. Убедитесь, что часовой пояс сервера базы данных совпадает с часовым поясом Node-RED.
Шаг 3: Получение телеметрии Алисы и формирование запроса
Для получения показаний датчиков, подключенных к Алисе, используются входящие ноды умного дома (например, ноды от плагина node-red-contrib-yandex-devices или шлюз через Home Assistant).
Показания датчика приходят в виде обычного числового значения. Наша задача — преобразовать это значение в строку SQL-запроса. Для этого поместите ноду function на холст и соедините ее вход со встроенными датчиками, а выход — с ранее настроенным узлом mysql.
Вставьте в ноду function следующий код на JavaScript:
// Извлекаем значение температуры или влажности
const rawValue = parseFloat(msg.payload);
const sensorName = msg.sensorName || "living_room_temp";
const metricType = msg.topic || "temperature";
// Проверяем валидность полученного числа
if (isNaN(rawValue)) {
node.error("Получено нечисловое значение датчика");
return null;
}
// Формируем SQL-запрос INSERT
msg.topic = "INSERT INTO sensor_data (sensor_name, metric_type, value) VALUES (?, ?, ?);";
msg.payload = [sensorName, metricType, rawValue];
return msg;
NOTE
Если вам требуется отслеживать состояние и передавать информацию между параллельно работающими цепочками сценариев, вы можете использовать глобальные переменные в Node-RED. Это позволит избежать частых повторных запросов к датчикам и СУБД, кэшируя последние прочитанные значения в оперативной памяти сервера автоматизации.
Шаг 4: Тестирование работы и варианты визуализации
Для тестирования отправки подключите к входу ноды function обычную ноду inject и передайте в msg.payload тестовое число, например 23.5. После клика по кнопке инжекта узел mysql подсветится зеленым статусом «ok». Проверьте таблицу в базе данных — в ней должна появиться первая тестовая строка с точной временной меткой.
Чтобы проанализировать собранные данные, вы можете использовать систему построения красивых интерактивных дашбордов Grafana. Установите Grafana на тот же сервер, добавьте вашу базу данных MySQL в качестве источника данных (Data Source) и создайте графики изменения температуры за сутки, неделю или месяц.
IMPORTANT
Для предотвращения избыточной нагрузки на базу данных и износа дискового накопителя сервера не записывайте показания датчиков слишком часто. Оптимально настроить фильтрацию (например, с помощью ноды report-by-exception или rbe), которая будет отправлять SQL-запрос только в том случае, если температура изменилась более чем на 0.2°C, или ограничить интервал записи до одного раза в 5 минут.
WARNING
Никогда не вставляйте значения датчиков напрямую в строку SQL-запроса через строковую конкатенацию типа VALUES (${msg.payload}). Это делает вашу систему уязвимой для SQL-инъекций, если датчик передаст некорректный текстовый пакет. Всегда используйте параметризованные запросы с символами ?, как показано в примере кода выше.
TIP
В целях безопасности создайте в СУБД MySQL отдельного пользователя умного дома с ограниченными правами (только INSERT и SELECT), запретив ему удалять (DROP, DELETE) таблицы и базы данных. Это убережет ваши исторические логи от случайной потери при ошибках отладки сценариев.
Инструкция по настройке
Создание базы данных и таблицы
Создайте базу данных в СУБД MySQL и подготовьте структуру таблицы для хранения телеметрии.
Установка ноды MySQL в Node-RED
Используйте палитру Node-RED для установки официального модуля интеграции с MySQL.
Формирование SQL-запроса INSERT
Напишите JS-код для преобразования показаний датчиков в валидный SQL-запрос.
Тестирование записи и визуализация
Отправьте тестовые данные и проверьте наполнение таблиц СУБД в режиме реального времени.
Совет эксперта: Управляйте домом с компьютера
Установите Яндекс Браузер, чтобы управлять умными розетками и светом прямо со стартовой страницы, не отвлекаясь от работы.