Всё началось с простой цели: добавить в систему умного дома розетку за 400 рублей. Но вместо примитивного включения/выключения, она стала интеллектуальным устройством, способным защищать мою технику от скачков напряжения, анализировать потребление энергии и даже предсказывать неисправности. Вот как это было.
При первом подключении розетки через MQTT и Zigbee2MQTT, я столкнулся с кошмаром: при каждом нажатии на карточку в веб-интерфейсе создавались новые, вложенные копии устройства. Вместо одного топика zigbee2mqtt/0xa4c1385d1ba39457/status
появлялись .../set/status
, затем .../set/set/status
, и так до бесконечности.
Причина: JavaScript-функция sendCommand()
заменяла /status
на /set
. Но если топик уже содержал /set/
(например, .../set/status
), то получалось .../set/set
. Устройство отвечало на этот некорректный топик, а скрипт mqtt_to_mysql.py
создавал новую запись в базе данных, добавляя /status
— и цикл повторялся.
Мы применили двухуровневую защиту:
/set/
в середине строки. Для "битых" топиков кнопки скрываются, а вместо них появляется предупреждение: "⚠️ Служебный топик (управление отключено)".DELETE FROM sensor_data WHERE topic LIKE '%/set/%';
Это полностью остановило лавину дубликатов.
Розетка отправляет три ключевых параметра:
Чтобы эти данные стали полезными, мы:
'voltage'
, 'current'
, 'power'
в белый список в index.php
, чтобы карточки с этими параметрами отображались на панели.current
— "мА", чтобы избежать путаницы.Самая крутая фишка — превращение розетки в устройство безопасности. Мы создали автоматизацию через SQL, которая отключает розетку при опасных значениях напряжения:
INSERT INTO automations ( name, schedule_type, trigger_topic, condition_operator, condition_value, action_topic, action_payload, enabled ) VALUES ( 'Защита от перенапряжения', 'none', 'zigbee2mqtt/0xa4c1385d1ba39457/voltage', '>', '250', 'zigbee2mqtt/0xa4c1385d1ba39457/set', '{"state": "OFF"}', 1 );
Аналогичное правило создано для защиты от просадки напряжения (меньше 200V). Теперь розетка сама отключит телевизор, если в сети что-то пойдет не так.
Сначала система выдавала ложные тревоги: "Напряжение упало до 3V!". Оказалось, она анализировала напряжение батареек датчиков (3V) как сетевое напряжение (220V).
Решение: Мы разделили логику анализа на три типа:
Теперь система умнее: она понимает контекст и не пугает меня ложными срабатываниями.
Главная "фишка", которой нет у этой розетки — счетчик потребленной энергии (kWh). У нее есть только мгновенная мощность (power). Но это не проблема:
mqtt_to_mysql.py
, который будет накапливать энергию по формуле: Энергия = Мощность × Время.За 400 рублей я получил не просто розетку, а полноценный элемент системы умного дома, который:
Это отличный пример того, как открытый софт (Zigbee2MQTT, PHP, MySQL) и немного смекалки позволяют превратить бюджетное устройство в мощный инструмент. И да, теперь я сплю спокойно — моя техника под защитой.
Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии