Категории
mqtt_to_mysql.py — скрипт сервис экспорта данных в mysql базы iot системы
23.11.2025 | коды из категории: IOT умный домобновлено 27.12.2025
Скрипт /home/mazzick/mqtt_to_mysql.py
Назначение: Перехват MQTT-сообщений от Zigbee2MQTT и сохранение их в базу данных MySQL/MariaDB для последующей обработки автоматизациями.
Основные функции
- Подписывается на все топики
zigbee2mqtt/#. - Сохраняет полное JSON-сообщение «как есть» в таблицу
sensor_data(полезно для отладки и полного лога). - Разбирает JSON и создаёт отдельные записи для каждого поля (например,
zigbee2mqtt/motion_sensor/presence,.../batteryи т.д.). - Преобразует булевые значения:
true→ строка"1"false→ строка"0"
== 1). - Игнорирует технические поля:
linkquality,countdown_*,last_seen,updateи др. - Для заданных топиков ведёт историю значений в таблице
sensor_history(с ограничением по количеству записей).
Технические детали
- MQTT-клиент:
paho-mqtt(версия с callback API v2). - База данных: MariaDB/MySQL через
pymysql. - Таблица назначения:
sensor_data (topic VARCHAR(255) PRIMARY KEY, value TEXT, timestamp DATETIME). - Метод записи:
INSERT ... ON DUPLICATE KEY UPDATE— гарантирует, что для каждого топика хранится только актуальное значение. - Логирование: Ведётся в файл
/home/mazzick/mqtt_logger.logи в консоль. - Запуск: Работает как systemd-сервис
mqtt-to-mysql.service.
Зачем это нужно?
Без этого скрипта автоматизации (например, «включить свет при движении») не могут работать, потому что:
- PHP-движок автоматизаций читает данные только из базы, а не напрямую из MQTT.
- Требуется нормализованная структура данных: отдельный топик на каждое поле (а не один JSON на устройство).
- Булевые значения должны быть приведены к единому формату (
"1"/"0"), совместимому с SQL-сравнениями.
Важно!
При изменении логики обработки значений (особенно булевых) необходимо проверять синтаксис Python и правильность отступов — ошибка приведёт к падению systemd-сервиса.