обновлено 27.12.2025
/var/www/html/iot/public_html/admin/mqtt_listener.phpНазначение: Движок автоматизаций. Постоянно проверяет таблицу sensor_data и выполняет правила из таблицы automations при срабатывании условий (по триггеру или по расписанию).
enabled = 1) из таблицы automations.sensor_data (например, presence == 1).A > B, A == 1 и т.д.sensor.topic.mosquitton_pub при выполнении действия.Исправлена ошибка SQL: Unknown column 'id'
Исходный код пытался выполнить:
SELECT value FROM sensor_data WHERE topic = ? ORDER BY id DESC LIMIT 1
Но в таблице sensor_data нет столбца id (используется PRIMARY KEY (topic)).
Исправление: запрос заменён на:
SELECT value FROM sensor_data WHERE topic = ?
Так как для каждого топика хранится только одно (последнее) значение — сортировка не нужна.
Временно отключена логика in_progress
Движок пытался помечать правила как «в обработке», но в таблице automations отсутствовал столбец in_progress, что вызывало скрытые ошибки и блокировку правил.
Исправление: блоки кода, работающие с in_progress, закомментированы до добавления соответствующего столбца в БД.
Добавлена защита от повторного срабатывания (частично)
Хотя полная защита через in_progress отключена, движок использует поле last_triggered для логгирования времени срабатывания. В будущем можно будет добавить проверку «не чаще чем раз в N секунд» на его основе.
Работает как systemd-сервис iot-automation.service, запускается при старте системы и постоянно опрашивает базу данных с интервалом 1 секунда.
Этот скрипт — не веб-интерфейс, а фоновый обработчик. Веб-интерфейс (logic.php) только редактирует правила. Без запущенного mqtt_listener.php автоматизации не работают.