Все началось с того, что я хотел включить свет в туалете, а он включился через три секунды.

У меня стоял шлюз Xiaomi, датчик движения Aqara и какая-то ноунейм релешка. Схема работала так: датчик видит меня -> сигнал летит в Китай на сервер Xiaomi -> там скрипт думает -> сигнал летит обратно ко мне в квартиру -> свет включается.

В тот момент я понял две вещи.

Первая: я не хочу, чтобы товарищ майор из Пекина знал, как часто я хожу в туалет.

Вторая: мой дом не должен превращаться в тыкву, когда провайдер проводит плановые работы.

Ниже рассказ о том, как я выкинул все проприетарные шлюзы, купил один свисток и поднял Home Assistant.

Почему Wi-Fi устройства - это зло

Многие новички покупают Wi-Fi розетки. Это дешево, не нужен шлюз.

Но когда у вас 5 устройств - все ок. Когда их 50 - ваш домашний роутер начинает сходить с ума. Wi-Fi не предназначен для того, чтобы держать постоянный коннект с кучей мелких датчиков, которые шлют по 5 байт данных.

Плюс энергопотребление. Wi-Fi датчик на батарейке живет месяц. Zigbee - два года.

Железо: один стик, чтобы править всеми

Чтобы отвязаться от экосистем (Xiaomi, Tuya, Apple), нужен координатор.

Я взял Sonoff Zigbee 3.0 USB Dongle Plus.

Стоит копейки, пробивает две бетонные стены, выглядит как серьезное промышленное устройство в алюминиевом корпусе.

Прошивается за 5 минут, после чего превращается в универсальный приемник, который понимает вообще всё: от лампочек IKEA до датчиков протечки с AliExpress.

Софт: Зоопарк в контейнерах

Вся магия строится на связке трех китов:

  1. Zigbee2MQTT (z2m). Эта штука общается со свистком и переводит сигналы zigbee в понятный протокол MQTT.

  2. Mosquitto. Брокер сообщений. Почтальон, который носит письма между сервисами.

  3. Home Assistant (HA). Мозг. Там крутятся скрипты и красивый интерфейс (который вы настроите один раз и никогда не будете открывать).

Почему z2m, а не нативный ZHA в Home Assistant?

Потому что архитектура должна быть модульной. Если я завтра захочу снести HA и поставить OpenHAB (чур меня), мне не придется переспаривать все 50 датчиков. Они живут в z2m.

Вот docker-compose.yml, который поднимает всё сразу.

Обратите внимание на проброс устройства /dev/ttyACM0 - это и есть наш стик.

YAML

version: '3.8'

services:
  mqtt:
    image: eclipse-mosquitto:2.0
    restart: unless-stopped
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
    ports:
      - "1883:1883"

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt
    restart: unless-stopped
    depends_on:
      - mqtt
    volumes:
      - ./zigbee2mqtt/data:/app/data
      - /run/udev:/run/udev:ro
    environment:
      - TZ=Europe/Moscow
    devices:
      # Проверяйте адрес через ls -l /dev/serial/by-id/
      - /dev/ttyACM0:/dev/ttyACM0

  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    restart: unless-stopped
    depends_on:
      - mqtt
      - zigbee2mqtt
    volumes:
      - ./ha_config:/config
      - /etc/localtime:/etc/localtime:ro
    network_mode: host # Важно для discovery устройств в сети

WAF (Wife Acceptance Factor)

Самое сложное в умном доме - это не YAML-конфиги писать. Самое сложное - сделать так, чтобы жена (девушка, мама, кот) не убили вас за то, что свет теперь включается только с телефона.

Золотое правило инженера: физический выключатель должен работать всегда.

Я использовал zigbee-реле, которые ставятся в подрозетник ЗА обычный выключатель. Выключатель щелкает - реле меняет состояние.

Если сервер умрет, сгорит малинка или докер уйдет в бутлуп - свет все равно включится, потому что реле замкнет цепь физически.

Никогда, слышите, никогда не ставьте умные лампочки, которые управляются только по воздуху, в основные люстры. Вас проклянут в первый же вечер.

Автоматизация без GUI

Home Assistant предлагает визуальный редактор автоматизаций. Но мы же не ради кликанья мышкой тут собрались.

YAML дает гибкость.

Пример автоматизации: если датчик протечки сработал, перекрываем кран, шлем уведомление в телеграм и включаем красную подсветку в коридоре (чтобы было страшно).

YAML

alias: Leakage Detected
trigger:
  - platform: state
    entity_id: binary_sensor.water_leak_kitchen
    to: 'on'
action:
  # Закрываем кран (нужен электропривод)
  - service: switch.turn_off
    target:
      entity_id: switch.water_valve_main
  # Шлем панику в телегу
  - service: notify.telegram
    data:
      message: "ПОТОП НА КУХНЕ! Кран перекрыт."
  # Включаем аварийное освещение
  - service: light.turn_on
    target:
      entity_id: light.corridor_strip
    data:
      color_name: red
      brightness: 255

Итого

Цена вопроса - 2000 рублей за стик и пару вечеров на чтение документации.

Взамен вы получаете систему, которая работает мгновенно. Задержка между нажатием беспроводной кнопки и включением света - меньше 100 миллисекунд.

Китайские облака идут лесом. Интернет не нужен.

И самое приятное чувство - когда в доме пропадает сеть, а у тебя все продолжает работать, как часы.

В комментариях жду адептов Wiren Board, которые скажут, что беспровод - это ненадежно и надо было штробить стены под витую пару.

Комментарии (9)


  1. griba
    27.11.2025 09:23

    И самое приятное чувство - когда в доме пропадает сеть, а у тебя все продолжает работать, как часы.

    в смысле только время и показывает?

    А если по делу, то локальное решение имеет очевидно как свои плюсы, так и минусы. Например, если следующим шагом захочется отопление включать до того, как приехал домой - надо либо vpn городить либо в свет свой HA публиковать (а тут начнутся двойные NAT и прочие приключения). И есть интересный вопрос, а выключатели без фиксации положения? чтобы в сценарии включил привычным образом, выключил механически не было ситуации, что он остался включенным?


    1. JBFW
      27.11.2025 09:23

      Эта проблема решается несколькими способами: от привязки внутреннего mqtt к москиту на внешнем сервере (доступ с ограничениями, с tls) до белого IP дома с подключением к тому же mqtt (и снова с tls) прямо с телефона, и управление крутилками-кнопками там.

      Получается локальная сеть дома - и возможность доступа снаружи, если вообще не заблокировали...


      1. griba
        27.11.2025 09:23

        ну погодите, это же локальная установка, какой внешний mosquito? Белый ip не всем раздают.


        1. akod67
          27.11.2025 09:23

          Ну уж придумать как пакет в дом прислать - мульон способов. Хоть через телегу.


  1. akod67
    27.11.2025 09:23

    Подтупливание зигби устройств на больших сетках - тоже обычная картина. Но в любом случае - УД должен быть локальным. И зря на провода кидаетесь. Наработайте статистику года в 3. Походите, батарейки поменяйте (надоест уже на второй раз) и прочее. Говорю как 15летний обладатель типа-УД по большей части проводного, но и зигбей пару десятков девайсов работает. Особая прелесть - когда какие-то запрятанные в потолки-люстры девайсы отваливаются и их надо перепаривать.

    Если сервер умрет, сгорит малинка или докер уйдет в бутлуп - свет все равно включится, потому что реле замкнет цепь физически.

    Зависит от света ещё. Можно насобирать таких стартовых токов, что китайские релюшки на раз залипать будут.


  1. Soorin
    27.11.2025 09:23

    Почему ZigBee - это зло:

    Вы хотите включить свет в туалете, а он не включается. Что? А ничего, просто датчик не присылал ничего уже несколько часов. Батарейка датчика последний раз была 100%. Способа опросить/разбудить его удалённо - не существует. кнопочкой он тоже не включился - батарейка села "в ноль". После замены батарейки он не хочет определяться шлюзом. Ой, а шлюз-то сам завис. Вынимаем "свисток", вставляем... Ой, помогло (в прошлый раз не помогало, пришлось стучать бубном по колёсам). Удаляем датчик - не хочет удаляться, т.к. нет связи. Удаляем sudo принудительно. Включаем обнаружение устройств. Зажимаем кнопку на датчике. Ура, идёт привязка. Заработало... можно идти в туалет.

    И слава богу, что это датчик включения света - а не реле управления нагревателем, застрявшее на "Вкл" где-нибудь в загородном доме за 100км.

    Итог: никакого ZigBee на ответственных вещах - только WiFi-устройства со своей веб-мордой, к которым можно подключиться прямо через роутер, минуя умный дом и ненадёжные "свистки".


    1. akod67
      27.11.2025 09:23

      Уже давно не свистки, а вполне себе надёжные standalone "zigbee zigstar lan gateway" и подобное. Z2M на N100 - более стрёмное звено, но относительную стабильность обеспечить можно. А вот "эфир" - штука неконтролируемая. Если делать сие в человейнике с кучей соседей - вопросиков много. Да и в пределах одной сетки бывают спамящие девайсы. Не надо тащить в сетку всё, что на алике валяется.


  1. JBFW
    27.11.2025 09:23

    У WiFi релюшек есть интересная особенность: иногда можно их перешить/перепаять на esp8266, которые завести в свою mesh сеть.
    Технически тоже WiFi, но работает не через Wifi-роутер, поэтому надежнее.
    Но система управления этим сложнее, не просто "через веб-морду". Как и Zigbee, по mqtt


    1. akod67
      27.11.2025 09:23

      У z2m нынче вполне приличная морда.