Я чет подумал, ручное управление оставил через zigbee2mqtt. Там отличная панель управления с карточками. Свой интерфейс переделал и не стал дальше под каждый типо датчика совместимость делать. Оставил себе только графики с иторическими данными. Разделили на две части, сенсоры с графиками и панель автоматизации. Потом новую версию выложу. короч обвление - index.php и карточки с графиками sensors.php обновлено 14.12.2025
Дальше много "каши", но в общем понять структуру можно. много чего лишнего так что извиняйте, на скорую руку делал, мне никто не помогает )
Эта статья служит отправной точкой для понимания архитектуры моей локальной IoT-системы. Некоторое время проект был в состоянии «заморозки», и сейчас я постепенно восстанавливаю в памяти, как всё устроено — где лежат ключевые файлы, как они взаимодействуют и за что отвечают. Git, к сожалению, освоил не до конца, поэтому документация особенно актуальна.
В ближайшее время я планирую выложить все исходники и проставить внутренние ссылки, чтобы получилось хоть какое-то подобие структурированной документации. Код за время разработки заметно «распух», и без карты уже трудно разобраться.
Цель статьи — создать своего рода «дорожную карту» архитектуры: краткое описание основных компонентов, их назначения и связей между ними. Это поможет не только мне быстро вспомнить устройство системы спустя месяцы, но и может оказаться полезным для тех, кто ищет пример полностью локального IoT-решения для умного дома — без облачных сервисов, сторонних зависимостей и избыточной сложности.
Система лёгкая и ненасыщенная: она не требует ресурсов дата-центра и способна работать даже на таких скромных устройствах, как Raspberry Pi Zero или смарт-часы. Иными словами — функциональность без наворотов.
Основные компоненты системы
MQTT-брокер — Mosquitto, принимает данные от датчиков (Zigbee2MQTT и др.)
База данных — MySQL (база iot_db)
Серверная логика — PHP-скрипты
Веб-интерфейс — главный файл /index.php
Автоматизация — правила, триггеры и расписания, хранимые в БД
Мониторинг Raspberry Pi — сбор системных метрик (температура, CPU, диск и т.д.)
Графики — Chart.js + API для получения исторических данных
Ключевые файлы проекта
/index.php — основной веб-интерфейс (устарел. но более полный все в одном файле)
Это главная страница системы. Он:
Подключается к БД iot_db.
Забирает последние значения датчиков из таблицы sensor_data.
Читает информацию о датчиках из таблицы sensor_info (название, комната, иконка и т.д.).
Получает активные автоматизации из таблицы automations:
Запланированные (daily/weekly)
Триггерные (по условию с топика)
Анализирует исторические данные из sensor_history на предмет резких изменений (температура, напряжение, батарейка).
Считывает последнее состояние Raspberry Pi из таблицы rpi_monitor.
Проверяет статус системных сервисов через systemctl.
Формирует HTML-страницу с карточками, кнопками управления, графиками и статусами.
Использует JavaScript для:
Автоматического обновления страницы каждые 30 секунд.
Раз в час анализирует системные или прикладные логи, ищет ключевые слова (ошибки, перезагрузки и т.д.), агрегирует счётчики и сохраняет в таблицу log_stats.
Структура базы данных (iot_db)
sensor_data — актуальные значения датчиков (topic, value, timestamp)
sensor_history — архив значений (для анализа и графиков)
Содержит API-эндпоинты, используемые веб-интерфейсом.
control.php — вероятно, API для управления устройствами (не используется в основном index.php).
history.php — API для получения истории значений (уже описан выше).
live_data.php — API для получения актуальных данных в реальном времени (используется в index.php для обновления данных без перезагрузки страницы).
/css
Содержит CSS-стили для веб-интерфейса.
style.css — основной файл стилей.
/scripts
Содержит фоновые скрипты, запускаемые по cron или как systemd-сервисы.
mqtt-to-mysql — слушатель MQTT (уже описан выше). Этот скрипт на Python служит мостом между MQTT-брокером и базой данных MySQL в системе Интернета вещей (IoT). Он автоматически получает телеметрию с датчиков и устройств (например, через Zigbee2MQTT), обрабатывает её и сохраняет в две таблицы MySQL: основную и историческую.
🔌 Как добавить новое Zigbee-устройство в домашнюю IoT-систему
Когда вы подключаете новое Zigbee-устройство (розетку, реле, датчик и т.д.) через Zigbee2MQTT,
важно убедиться, что оно не только сопряглось, но и корректно передаёт данные в вашу систему.
Ниже — проверенный рабочий алгоритм от сопряжения до отображения на панели.
1. Сопряжение устройства
Зайдите в веб-интерфейс Zigbee2MQTT (обычно http://ваш_сервер:8080).
Нажмите «Add new device» и следуйте инструкциям для вашего устройства (часто — удержание кнопки при подаче питания).
После сопряжения устройству присвоится MAC-адрес вида 0xa4c1385d1ba39457.
2. Задайте понятное имя
Задается внутри интерфейса Zigbee2MQTT после сопряжения. но если не получилось то вручную.
Откройте файл конфигурации Zigbee2MQTT — обычно /opt/zigbee2mqtt/data/configuration.yaml — и добавьте:
А в JS-функции отправки команды — корректная обработка каналов:
// Пример для топика zigbee2mqtt/fish_light/state_l1
const match = decodedTopic.match(/^(zigbee2mqtt\/[^\/]+)\/state_(l\d+)$/);
if (match) {
payload[match[2]] = command; // → {"l1": "ON"}
}
💡 Советы
Если устройство не публикует state_l1, а только status — используйте общий режим управления через {"state": "ON"}.
Не забудьте обновить автоматизации: старые правила с MAC-адресом перестанут работать после смены имени.
Регулярно очищайте таблицу sensor_data — иначе сайт начнёт тормозить. Достаточно оставлять данные за последние 3–7 дней.
После этих шагов ваше устройство будет полноценно интегрировано в систему: вы сможете управлять им с панели,
строить графики и создавать автоматизации.
Комментарии
Пока нет комментариев. Будьте первым!