В этой статье я расскажу про свой опыт использования умного дома без ремонтных работ, прокладки кабеля и т.д. Описания установки и конфигурации в данной статье не будет. Если нужно более подробно описать какую-то интеграцию, то пишите в комментариях, сделаю отдельную статью.

  1. Оборудование и ПО

    В качестве сервера используется VM запущенная на VMWare ESXi с Ubuntu 22 LTS. Внутрь VM прокинуты два адаптера: ZigBee CC2652 и Bluetooth Ugreen на чипе RTL8761BUV

    Сначала я использовал вариант установки Home Assistant Core, потом перешел на docker.

    Используются 6 контейнеров: Homeassistant, zigbee2mqtt, mosquitto, influxdb, grafana, nginx. Назначение первых трех контейнеров не вызывает вопросов, последний контейнер занимается обновлением let's encrypt сертификатов и проксированием, a influxdb и grafana для долгосрочного хранения данных и визуализации.

  2. Интеграции

    Вот так у меня на текущий момент выглядит страница интеграций в HA
    Вот так у меня на текущий момент выглядит страница интеграций в HA
    • Generic Camera

      Интеграция используется для работы с камерами Hikvision. Раньше еще была Axis - для нее есть отдельная интеграция. Используются как сенсоры определения движения, для просмотра видеопотока и для отправки фото в telegram, при открытии и закрытии входной двери.

      Сенсоры через интеграцию Generic Camera не получить, поэтому они отдельно прописаны в конфигурационном файле HA:
      binary_sensor:
        - platform: hikvision
          host: cam4.examaple.com
          username: hass
          password: !secret "hik_pass"
        - platform: hikvision
          host: cam3.example.com
          username: hass
          password: !secret "hik_pass"

    • Google assistant

    Используется только для открытия шлагбаумов при въезде в ЖК и на паркинг, чтобы не нужно было брать в руки телефон. Для всего остального используется Алиса.

    • Haier Online (HON)

    Кастомная интеграция установлена через HACS. Используется для управления Мульти-сплит системой с 4 внутренними блоками.

    Доступны сенсоры: температура снаружи, внутри, статус сплита.

    Управление: включение/выключение, установка целевой температуры и программы.

    • LG WebOS Smart TV

    Интеграция с телевизорами LG WebOS.

    Сенсоры: Включен/выключен, громкость, используемый источник (Ivi, Plex, HDMI и т.д.)

    Управление: Включение/выключение, установка громкости, выбор источника, пауза/проигрывание.

    Телевизоры подключены через Wi-Fi, для включения на них отправляется magic пакет, в самой интеграции такого функционала нет, поэтому используется автоматизация в HA

    Автоматизация для включения телевизора
    alias: Спальня-телевизор-включение
    description: Необходимо для работы кнопки включения телевизора или включения через Алису
    trigger:
      - platform: device
        device_id: 1d399e9a9f6cf23e13f2c412ec6e639f
        domain: webostv
        type: webostv.turn_on
    condition: []
    action:
      - service: wake_on_lan.send_magic_packet
        data:
          mac: D4:86:60:26:F0:E2
          broadcast_address: 192.168.88.84
    mode: single

    • Mikrotik

      Интеграция используется для определения кто в данный момент находится дома.

    • MQTT

    Интеграция с mosquitto, в ней в основном устройства подключенные по протоколу Zigbee через zigbee2mqtt, и есть еще Xiaomi Hub (используется просто как ночник) c установленным OpenWrt for Xiaomi Zigbee.

    Используются производители: CR Smart Home, eWeLink, IKEA, Legrand, Moes, TuYa, UseeLink, Xiaomi.

    Устройства: Теплый пол, приводы штор, электрические розетки, выключатели, приводы на арматуру водоснабжения, реле, датчики протечки, открытия, влажности, температуры, движения, освещенности, беспроводные выключатели, Xiaomi Cube.

    Несколько примеров автоматизаций:

    Включение теплого пола и вытяжки при высокой влажности
    alias: Ванна-вкл-вент-теплпол-влажность-высокая
    description: Включить теплый пол и вентилятор
    trigger:
      - type: humidity
        platform: device
        device_id: 3d380f4db9c9a9b9a92ddcb7d6ba4eea
        entity_id: sensor.sensor_bathroom_humidity
        domain: sensor
        above: 55
        for:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 0
    condition: []
    action:
      - type: turn_on
        device_id: fe3b24d58f4848ea314bfee3a2847d31
        entity_id: switch.switch_bathroom_left
        domain: switch
      - service: climate.set_temperature
        target:
          entity_id: climate.floorheat_bathroom
        data:
          temperature: 28
          hvac_mode: heat
      - delay:
          hours: 0
          minutes: 0
          seconds: 5
          milliseconds: 0
      - device_id: 0d62a807416ae25bdb4a4bfc081d121f
        domain: climate
        entity_id: climate.floorheat_bathroom
        type: set_hvac_mode
        hvac_mode: heat
    mode: single

    Включение ночника при обнаружении движения на одном из датчиков
    alias: Коридор-движение
    description: ""
    trigger:
      - type: motion
        platform: device
        device_id: 0cca9328b6eef50c5aad68231b10ae27
        entity_id: binary_sensor.motion_corridor_occupancy
        domain: binary_sensor
      - platform: state
        entity_id:
          - binary_sensor.cam4_pir_alarm_2
        from: "off"
        to: "on"
    condition:
      - condition: or
        conditions:
          - condition: sun
            before: sunrise
          - condition: sun
            after: sunset
          - condition: time
            before: "07:00:00"
    action:
      - type: turn_on
        device_id: d97eb090526f9b0cd75e829fdff60886
        entity_id: light.bed_side_lamp
        domain: light
        brightness_pct: 50
        flash: short
    mode: single

    Отправка фото в телеграм при открытии двери
    alias: Входная-дверь-открыта-Фото-Телега-in
    description: ""
    trigger:
      - type: opened
        platform: device
        device_id: 31f8b43b5a647cf4f785a905ef46003e
        entity_id: binary_sensor.contact_hallway_contact
        domain: binary_sensor
    condition: []
    action:
      - service: script.send_photo_telegram
        data:
          url: http://hass:********@cam4.***.ru/ISAPI/Streaming/channels/101/picture
          mess: "{{ now().strftime('%H:%M:%S') }} Входная дверь открыта"
    mode: parallel
    max: 3
    alias: send_photo_telegram
    variables:
      mess: null
    sequence:
      - service: telegram_bot.send_photo
        data:
          url: "{{url}}"
          target: "-1001555******"
          caption: "{{mess}}"
    mode: parallel
    max: 10

    Изменение положения штор на угол поворота Xiaomi Cube
    alias: Cube_rotate_right
    description: ""
    trigger:
      - platform: mqtt
        topic: zigbee2mqtt/0x00158d0004863928
        payload: rotate_right
        value_template: "{{ value_json.action }}"
    condition: []
    action:
      - service: script.cover_change_position
        data:
          position: >-
            {{ [(state_attr("cover.curtain_masterbedroom_right", "current_position") -
            (trigger.payload_json.action_angle / 2) | int), 0] | max }}
    mode: queued
    max: 2
    alias: cover_change_position
    variables:
      angle: null
    sequence:
      - service: mqtt.publish
        data:
          topic: zigbee2mqtt/0x00158d00058a0983/set
          payload: "{\"position\": {{ position }}}"
    mode: queued
    max: 2

    • Bluetooth Low Energy Monitor

      Кастомная интеграция установлена через HACS. Необходима для работы с устройствами BLE. Через нее работают: Умный браслет Mi Band, весы Mi Scale, датчики протечки и зачем-то соседский замок Aqara N200 сообщается мне статус замка и двери. Что интересно канал до датчиков протечки шифруется и для их подключения нужно получить ключ шифрования, а замок передает свои статусы без шифрования.

      Блок с ключами шифрования из configuration.yaml
      ble_monitor:
        devices:
          - mac: '54:EF:44:E1:AA:15'
            encryption_key: '7fb71c4935913c157a0e3e045400c897'
          - mac: '54:EF:44:E1:AD:D6'
            encryption_key: '172c0615f5dd7a9bc667cef7aa712e80'
          - mac: '54:EF:44:E1:A4:09'
            encryption_key: 'ed14843e79a7b860c62a3f9ec768eb7e'
          - mac: '54:EF:44:E1:A9:12'
            encryption_key: 'c60b3ae034f2d5184d9dfe6cf1b23432'

    • ПИК Домофон

    Кастомная интеграция с ПИК Домофоном. Используется для просмотра видеопотока с домофонов (таких 3 штуки) и для открытия дверей, калиток и шлагбаумов. При въеде/выезде с паркинга мне нужно открывать 2 шлагбаума: один для въезда на территорию ЖК, другой на сам паркинг, так как телефон подключается к автомобилю через wireless android auto, то он не всегда под рукой, научить Алису отвечать без запуска приложения на андроиде я не смог, поэтому шлагбаумы открываю через Google Assistant. Устройства ПИК Домофон находятся в домене button, но Google Assistant их не воспринимает, из-за этого пришлось сделать виртуальный выключатель, который выставляется в Google Assistant.

    Виртуальные переключатели для Google Assistant в configuration.yaml
    google_assistant:
      project_id: ha--------16047
      service_account: !include SERVICE_ACCOUNT.JSON
      report_state: true
      expose_by_default: false
      entity_config:
        switch.virtgatein:
          name: 'Entrance gate'
          expose: true
          room: Outside
        switch.virtgateout:
          name: 'Exit gate'
          expose: true
          room: Outside
        switch.virtgateparking:
          name: 'Parking gate'
          expose: true
          room: Outside
        switch.virtgateunderground:
          name: 'Underground gate'
          expose: true
          room: Outside
    
    switch:
      - platform: template
        switches:
          virtgatein:
            friendly_name: "Виртуальный включатель шлагбаум въезд"
            unique_id: virtgatein
            turn_on:
              service: switch.turn_on
              target:
                entity_id: switch.virtgatein
            turn_off:
              service: switch.turn_off
              target:
                entity_id: switch.virtgatein
          virtgateout:
            friendly_name: "Виртуальный включатель шлагбаум выезд"
            unique_id: virtgateout
            turn_on:
              service: switch.turn_on
              target:
                entity_id: switch.virtgateout
            turn_off:
              service: switch.turn_off
              target:
                entity_id: switch.virtgateout
          virtgateparking:
            friendly_name: "Виртуальный включатель шлагбаум паркинг"
            unique_id: virtgateparking
            turn_on:
              service: switch.turn_on
              target:
                entity_id: switch.virtgateparking
            turn_off:
              service: switch.turn_off
              target:
                entity_id: switch.virtgateparking
          virtgateunderground:
            friendly_name: "Виртуальный включатель шлагбаум подземелье"
            unique_id: virtgateunderground
            turn_on:
              service: switch.turn_on
              target:
                entity_id: switch.virtgateunderground
            turn_off:
              service: switch.turn_off
              target:
                entity_id: switch.virtgateunderground

    Кроме того, если сказать "Алиса, свет", то Алиса сделает переключение состояния (toggle), а Google Assistant в таком случае всегда включает вне зависимости от статуса, поэтому в автоматизацию еще пришлось добавить автоматическое выключение.

    Автоматизация открытия шлагбаума
    alias: снаружи-шлагбаум-въезд
    description: ""
    trigger:
      - platform: state
        entity_id:
          - switch.virtgatein
        to: "on"
        from: "off"
    condition: []
    action:
      - device_id: 6823413313691b06fb039a8884597c62
        domain: button
        entity_id: button.iot_relay_41772_unlocker
        type: press
      - service: switch.turn_off
        data: {}
        target:
          entity_id: switch.virtgatein
    mode: single

    • Plex

      Не придумал для чего использовать, но он есть))

    • Xiaomi Miio

      Используется для управления системами приточной вентиляции.

      Сенсоры: содержание СО2 и PM2.5, температура, скорость вращения вентиляторов, статус, программа.

      Управление: включение/выключение, программа, скорость вращения вентиляторов, подогрев воздуха.

    • Yandex Smart Home + Yandex.Station

      Интеграции используются для управления умным домом через голосового помощника Алиса, для этого в каждой комнате стоят Яндекс Станции и для того чтобы отправлять голосовые уведомления через Яндекс Станции. После того как появилась возможность управлять умным домом через помощника необходимость в других средствах управления практически отпала.

    • BedSideLamp

      Когда-то давно мне подарили лампу Yeelight BedSideLamp, она прекрасно завелась с этой интеграцией. Включение/выключение, яркость, цвет.

    • InfluxDB

      Для более долгого хранения информации. Для визуализации используется Grafana.

    • Telegram

      Отправка событий умного дома, основное это отправка фото при входе и выходе из квартиры.

  3. Проблемы

    Когда я начинал работу с умным домом я использовал проводной датчик двери подключенный к arduino, которая писала статус в MQTT, в новой квартире решил не возится с проводами и перешел на Zigbee датчики. Сначала это было полное разочарование, задержка отправки события открытия двери и получения выключателем команды на включение занимала до 3 секунд. Проблема решилась неожиданно: у меня используется две точки доступа Mikrotik подключенные через CAPsMAN к роутеру, и когда я добавлял гостевой SSID и разносил 2Ghz по каналам все с Zigbee стало хорошо, задержка не более 0,5 секунды.

    Много читал, что у людей отваливаются датчики Xiaomi по Zigbee, у меня таких проблем нет, раз в полгода бывает надо переджоинить один из большого количества датчиков. По батарейкам за 2 года эксплуатации менял только в датчиках протечки. И вот недавно в одном из датчиков температуры и влажности.

    Выключатели все кроме одного Xiaomi с ними все ок, за 2 года один наиболее нагруженный выключатель в прихожей сломался. Он включается при движении в прихожей и открытии двери. А в кладовку пришлось ставить выключатель TuYa, так как там был круглый подрозетник, он за полгода уже дважды зависал, причем настолько, что перестает реагировать даже на нажатие кнопки на самом выключателе, лечится отключением электропитания. Пока не разбирался как его полечить.

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

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


  1. Pitcentr0
    06.07.2023 12:56

    я купил мини ПК Beelink T4 Pro Mini подключил HDD поставил proxmox и там настроил все виртуальные машины


  1. DASpit
    06.07.2023 12:56
    +1

    По вытяжке имеет смысл поставить таймер отключения, тогда будет не часто включаться/выключаться, а с большей периодичностью, скажем 10 минут.


    1. tmv002 Автор
      06.07.2023 12:56

      Думал над этим. Тогда вытяжка будет работать ещё 10 минут после выключения варочной панели, но в целом идея рабочая.


      1. DeKaNszn
        06.07.2023 12:56

        Мне помогает "включение при влажности выше Х более чем 30с" + "выключение при влажности ниже Х-Y более чем 30с". Разделение значений помогает избежать постоянных вкл/выкл, а интервал времени помогает игнорировать короткие изменения.

        У вас, кстати, может не сработать автоматизация, если Home Assistant ещё не загрузился к моменту, когда происходит описанное в триггере событие


        1. tmv002 Автор
          06.07.2023 12:56

          Так проблема в том, что показатели влажности и температуры падают до нормальных в момент включения вытяжки. X-Y тут не поможет. А про незагруженный Home Assistant вообще не понял, он работает месяцами, перезагружается, только для обновления, либо для применения каких-то параметров или установки новых интеграций через HACS.


          1. DeKaNszn
            06.07.2023 12:56
            +1

            хм, у вас вытяжка за секунды снижает влажность на 20 и более процентов? тогда да, вам не подходит этот метод. Возможно вам надо учитывать потребление электричества/газа варочной панелью?

            Пример из жизни: пропало электричество на полчаса, влажность поднялась за это время и при старте Home Assistant триггер "влажность стала выше Х" не сработал, потому что она уже была выше Х. У меня в большинстве автоматизаций из-за этого дополнительным триггером служит старт Home Assistant (и добавлены условия из триггеров)


  1. shadrap
    06.07.2023 12:56
    +1

    две точки доступа Mikrotik подключенные через CAPsMAN к роутеру, и когда я добавлял гостевой SSID и разносил 2Ghz по каналам все с Zigbee стало хорошо

    Извините. Нифига не понял.., что в итоге помогло, фильтрация по MAC или вы перевели часть с устройств на другие частоты?


    1. tmv002 Автор
      06.07.2023 12:56

      Zigbee2mqtt работал и работает на дефолтном 11 канале это частота 2.405GHz (у Zigbee своя нумерация каналов, она не совпадает с Wi-Fi).

      Когда было плохо точки доступа сами выбирали канал, я на тот момент даже не знал, что у Zigbee и Wi-Fi используется один диапазон частот, сейчас у точек доступа 6 и 11 канал, это 2.437GHz и 2.462GHz соответственно.


      1. dr_Sergeus
        06.07.2023 12:56
        +1

        Это Вы про zigbee из идеального мира. Первая и важная задача при построении сети на zigbee это скан каналов wifi на предмет наименьшей загруженности. Причина проста - устройства, которые работают на близкой частоте просто глушат наводками слабосильные батарейные zigbee end-device. Тут приходилось в разные комнаты разносить головное устройство с координатором на борту и wifi роутер, чтобы отвалов не было. А однажды пришлось на метр передвинуть wifi часы с погодой.
        Это я по опыту интегратора пишу.
        Мы, к примеру, все ставим в докер (обычно до 6 контейнеров: HA, mariaDB, mqtt, z2m, home-assistant-configurator, portainer (по желанию)). И работает это на 2GB памяти с 32 eMMC.

        А TuYa - зло. Камни от TI давно не юзаем, только от Silabs

        По автоматизациям - на вкус и цвет-фломастеры разные. Большинство автоматизацией давно написано через trigger->action->choose->sequence, что позволило сократить нагрузку на железку, уменьшив количество автоматизаций.

        По статье - супер, может кому поможет, спасибо.


        1. tmv002 Автор
          06.07.2023 12:56
          +1

          Спасибо про идею trigger->action->choose->sequence, сходу на 6 автоматизаций меньше стало.


        1. akavato
          06.07.2023 12:56
          +1

          Камни от TI давно не юзаем, только от Silabs

          А почему так? У меня просто диаметрально противоположный опыт: с zigstar на ti 2652P2 z2m работает стабильно, а вот на silabs EFR32MG21 постоянные отвалы датчиков, особенно на батарейках


          1. dr_Sergeus
            06.07.2023 12:56

            Обновите прошивку в координаторе на EFR. Для старых датчиков 6.10.3 самая стабильная если датчики новые, то надо идти на 7. Мы уже используем 7.1.1. EZSP v9 в так сказать "продакшене".
            А почему EFR - так исторически сложилось на тестах производительности, что для своих координаторов мы выбрали EFR. Как и то, что датчики мы используем от производителя Konke


  1. Astroscope
    06.07.2023 12:56

    Включение ночника при обнаружении движения на одном из датчиков

    Как по мне - overkill. Хватает обычных ночников с датчиком движения.


    1. dr_Sergeus
      06.07.2023 12:56

      Ни разу. Ночники включаются сразу несколько, освещая путь ночью. И расположение в видимости датчика движения самого ночника - ни разу не нужно. Один датчик на все ночники и ленты, которые включаются в зависимости от времени в разном режиме, цвете и яркости.


    1. tmv002 Автор
      06.07.2023 12:56

      После полной темноты, даже от ночника на минимальной яркости прямой свет неприятен, поэтому он у меня стоит вне прямой видимости, а датчики с разных сторон длинного коридора. Кроме того днём он не нужен. Отдельно умный дом только для ночника строить, конечно, overkill, но когда он уже есть - сделал и забыл.