Итак, дано: загородный дом в средней полосе РФ с немалым количеством инженерных систем, за которыми хотелось бы как минимум следить, а желательно и частично управлять. В доме не живут на постоянной основе люди, но есть интернет‑подключение. В зимнее время дом отапливается, даже в отсутствие людей. Из‑за того, что система отопления монтировалась более 20 лет назад, а в месте расположения дома регулярно происходят отключения электроэнергии, всё время есть некоторая неопределенность и беспокойство — а всё ли в порядке в доме? Перезапустился ли котёл после очередного отключения? Нет ли протечек? Нет ли проникновений злоумышленников?

Всё это, плюс увлечение IoT, в какой‑то момент и привело к установке системы автоматизации на базе Home Assistant. Делали всё сами, подрядчики не привлекались.

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

Были реализованы следующие функции:

  • Установка Home Assistant на базе Raspberry Pi3

  • Mesh‑сеть WiFi, как в основном доме, так и на участке.

  • Контроль параметров системы отопления: давление в системе, температура теплоносителя, звуковое оповещение о сбое.

  • Контроль температуры во всех помещениях а также проникновения и присутствия людей при помощи зигби‑датчиков.

  • Частичное управление светом, с возможностью контроля света во дворе и имитации присутствия человека в доме.

  • Управление отоплением основного дома: включение/выключение основного котла (газового) и резервного (электрического).

  • Управление отоплением бани: включение/выключение электрообогревателя по заданным параметрам температуры.

  • Видеонаблюдение с интеграцией ряда охранных функций (сирены, определение человека в кадре, отправка фото и видео).

  • Удаленное открытие/закрытие ворот гаража.

  • Аварийные датчики — дыма, газа, протечки.

Теперь расскажу об этом поподробней.

Home assistant

Тут всё просто и банально — Raspberry Pi 3b из старых запасов, MicroSD‑карта понадежней и банальная установка текущей версии HA (Supervised). Достойный упоминания нюанс — блок питания воткнут через wifi‑розетку TAPO P100, чтобы была возможность удаленно перезагружать инстанс по питанию. К сожалению, по мере «старения» карты памяти пользоваться этой функцией приходится всё чаще.

Еще из особенностей работы с удаленным инстансом: я настроил ежедневное копирование всего содержимого sd‑карты HA себе на NAS через протокол rsync (взял для этого addon в этом репозитории), чтобы в случае скоропостижной смерти карточки была возможность быстро восстановить наиболее актуальную версию.

Основной мониторинга  параметров в Home Assistant
Основной мониторинга параметров в Home Assistant

Что касается бюджета этой части проекта, стоимость древней распбери оценить сложно, но примерно оценим этот комплект в 8–9 тыс. рублей (здесь и далее я привожу цены по памяти или приблизительные, поэтому буду давать и в виде «вилки»)

WiFi

WiFi был нужен и вне задач автоматизации, но его важность резко выросла после начала проекта. У меня уже есть опыт построения mesh‑сетей — в разных местах я запускал и до сих пор эксплуатирую сети на базе Ubiquiti (дорого, сложно, порой глюкаво, но когда работает, то работает хорошо), Google (дорого, просто, не слишком надежно, бедный по возможностям функционал), Mikrotik (ооочень нетривиально по настройке, недешево, безгранично по возможностям, когда правильно настроено — работает отлично). Для данного проекта я решил попробовать экосистему Keenetic, и в результате она мне очень даже понравилась.

Что именно понравилось: Очень легкая настройка. Отличный интерфейс. Широкие возможности, с системой компонентов — если тебе не нужен условный VPN — ты его не ставишь. Еще крайне удобным оказался бесплатный dns сервис keendns. С его помощью я не только обеспечил удаленный доступ к Home Assistant, но и создал отдельные доменные имена для отдельных устройств в сети, у которых есть свой веб‑интерфейс, а также сделал доступным снаружи видеопоток с камер видео‑наблюдения.

Кусок интерфейса. Закрепить ip-адрес можно простым кликом по символу кнопки рядом с устройством
Кусок интерфейса. Закрепить ip-адрес можно простым кликом по символу кнопки рядом с устройством

Сеть собрана из одного рутера Keenetic Speedster (5000 руб) и двух Keenetic Air (2*3000 руб) и покрывает два этажа довольно большого дома и несколько соток участка, нормально добивая до бани, расположенной в 10–12 метрах. Один из Air подключен «по воздуху» — витуху к нему дотянуть было слишком сложно, но даже так он даёт на удивление неплохую скорость и 100% надежность подключения, будучи расположен примерно в 10 метрах от основного рутера через две межкомнтаных стены.

Какие встретил минусы: время от времени отваливается внешний доступ, обычно ненадолго. Вряд ли это вина keendns, скорее это местный глюкавый интернет так себя проявляет, но не могу не упомянуть.

Контроль параметров системы отопления

Это часть проекта потребовала наибольших усилий, и, честно говоря, получилась немного "overengineered", можно (и нужно!) было всё сделать гораздо проще.

В целом задача стояла очень простая: получать от датчиков температуру и давление теплоносителя системы отопления. Если с температурой проблем не возникало, на рынке была и есть масса вариантов, то с датчиком давления возникла заминка. На момент начала осуществления проекта (2020) на рынке не находилось ничего достойного с приемлемой ценой и возможностью интеграции в HA, и в конечном итоге я решил сделать датчик сам.

Датчик давления
Датчик давления

Базой выступила ESP32 devkit, к которой я присоединил вот такой датчик давления с Aliexpress и датчик температуры dallas. На этом бы стоило и остановиться, но я увлекся и добавил еще дисплейчик SSD1306, пищалку для сообщения об ошибке, адресный светодиод на WS2812 для тех же целей, ну и еще кнопку для выключения аварийного писка. Потом нарисовал и напечатал на 3Д принтере корпус, упаковал всё внутрь, слепил прошивку на EspHome, убив 90% времени на красивое отображение на дисплейчике рюшечек и графика давления.

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

Прошивка ESP32 c датчиком давления, температуры, дисплеем, пищалкой и светодиодом
esphome:
  name: pressure-esp32
  platform: ESP32
  board: esp32dev
  on_boot:
    then:
     - binary_sensor.template.publish:
         id: sound
         state: ON
     - logger.log: "Sound ON"
     - light.turn_on:
          id: status
          brightness: 30%
          red: 0%
          green: 100%
          blue: 0%     
    
# Enable logging
logger:

# Enable Home Assistant API
api:

web_server:
  port: 80
  
ota:
  password: "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"
wifi:
  networks:
  - ssid: "XXXXXxXXXXX"
    password: "XXXXXXXX"
  - ssid: "YYYYYYyYYYYYY"
    password: "YYYYYYYYY"
  ap:
    ssid: "Pressure-Esp32 Fallback Hotspot"
    password: "FFFFFFFFFFF"
i2c:
  sda: GPIO22
  scl: GPIO23
output:
  - platform: ledc
    pin: GPIO32
    id: buzzer
rtttl:
  output: buzzer
font:
  - file: "calibri.ttf"
    id: font1
    size: 13

  - file: "calibri.ttf"
    id: font2
    size: 22
#################
#    size: 30
####################
image:
  - file: "bellon.jpg"
    id: bellon
    type: binary
    resize: 15x15
  - file: "belloff.jpg"
    id: belloff
    type: binary
    resize: 15x15    
display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    id: my_display 
    address: 0x3C
    lambda: |-
      it.printf(0, 0, id(font1), "%s", id(uptime_human).state.c_str());
      it.printf(0, 14, id(font2), "%.1fatm", id(pressure).state);
      it.printf(70, 14, id(font2), "%.1f°", id(tempi).state);
      if (id(sound).state) {
        it.image(112, 45, id(bellon));
      } else {
        it.image(112, 45, id(belloff));
      }
      it.graph(0, 43, id(single_pressure_graph));
light:
  - platform: fastled_clockless
    chipset: WS2812
    pin: GPIO25
    num_leds: 1
    rgb_order: GRB
    name: "Status LED"
    id: status
graph:
  # Show bare-minimum auto-ranged graph
  - id: single_pressure_graph
    sensor: pressure
    duration: 3d
    width: 110
    height: 20
    line_thickness: 2
    border: false
text_sensor:
  - platform: template
    name: Uptime Human Readable
    id: uptime_human
    icon: mdi:clock-start
dallas:
  - pin: GPIO21
    update_interval: 5s
# Individual sensors
sensor:
  - platform: dallas
    address: 0x00012112A17E4428
    name: "Температура системы отопления"
    id: tempi
    accuracy_decimals: 2
    filters:
      - median:
          window_size: 10 
          send_every: 5
          send_first_at: 5      
  - platform: uptime
    name: Uptime Sensor
    id: uptime_sensor
    update_interval: 60s
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? to_string(days) + "d " : "") +
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "") +
                (to_string(seconds) + "s")
              ).c_str();
  - platform: adc
    name: "Давление в системе отопления"
    pin: GPIO35
    id: pressure
    update_interval: 3s
    unit_of_measurement: "Атм"
    accuracy_decimals: 2
    attenuation: 11db
    filters:
      - calibrate_linear:
        - 0.0 -> 0.0
        - 0.62 -> 1.5
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15     
      - median:
          window_size: 10 
          send_every: 5
          send_first_at: 5          
    on_value:
    - lambda: |-
        if (id(pressure).state < 0.8) {
          id(presok).publish_state(true);
        } else {
          id(presok).publish_state(false);
        }        
binary_sensor:
  - platform: template
    name: "Pressure inside the range"
    id: presok
    on_state:      
      - while:
          condition:
            and:
               - binary_sensor.is_on: presok
               - binary_sensor.is_on: sound
          then:
          - logger.log: "Still executing"
          - light.turn_on:
              id: status
              brightness: 100%
              red: 100%
              green: 0%
              blue: 0%          
          - rtttl.play: "alarm:d=8,o=5,b=100:d,e,d,e,d,e,d,e"
          - delay: 5s
  - platform: template
    name: "Sound"
    id: sound
  - platform: gpio
    internal: true
    pin:
      number: GPIO27
      inverted: false
    name: Button
    id: button
    on_press:
      then:
        lambda: |-
           if (id(sound).state) 
           {
           id(sound).publish_state(false);
           } 
           else {id(sound).publish_state(true);}

captive_portal:

Если кто‑то захочет частично или полностью воспользоваться этой прошивкой, для нормальной работы надо уточнить адрес датчика dallas, подкинуть прошивке все упомянутые в ней шрифты и картинки и откалибровать датчик давления хотя бы по двум точкам, посмотрев в терминале значения напряжения которые он выдает при известном вам давлении.

Впоследствии, решая ту же задачу на другом объекте, я сделал гораздо более простое устройство без свистелок и п%рделок на базе WemosD1, ниже приведу и его прошивку тоже:

Прошивка датчика давления для Wemos D1
esphome:
  name: pressure-wemos
  platform: ESP8266
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "XXXXXXXXXXXXXXXXXXXXXXXX"

wifi:
  networks:
  - ssid: "XXXXXXXXXXXXXXXXX"
    password: "XXXXXXXXXXXX"
  - ssid: "YYYYYYYYYYYYYYYY"
    password: "YYYYYYYYYYY"
  ap:
    ssid: "Pressure Fallback Hotspot"
    password: "DDDDDDDDDDDDDD"
sensor:
  - platform: adc
    pin: A0
    name: "Давление в системе отопления"
    id: "pressure"
    unit_of_measurement: "Атм"
    icon: "mdi:gauge"
    accuracy_decimals: 2
    update_interval: 1s
    filters:
      - calibrate_linear:
        - 0.0 -> 0.0
        - 0.28 -> 1.2
        - 0.315 -> 1.5
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15     
      - median:
          window_size: 10 
          send_every: 5
          send_first_at: 5       
captive_portal:

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

Материалы для этой штуки стоили примерно 2-3 тыс рублей, работа по сборке и настройке, если не заморачиваться ненужными наворотами, может занять час-два.

Контроль температуры во всех помещениях дома, освещение, датчики открытия дверей и присутствия.

Здесь всё просто, во всех комнатах были размещены zigbee‑датчики температуры и влажности aqara, на входных дверях в дом были поставлены датчики открытия дверей того же производителя, а в одной комнате еще и установлен датчик движения на pir‑сенсоре от них же. Для того, чтобы покрытие zigbee‑сети было достаточным, часть ламп в доме была заменена на zigbee‑лампочки Ikea и в нужных местах воткнута пара zigbee розеток. Попутно они могут участвовать в сценарии имитации присутствия человека в доме. В качестве хаба для zigbee‑сети выступил dongle Sonoff предыдущей ревизии. Работает он хорошо, никаких нареканий не вызывает, да и в целом вся сеть показала себя надежной, в т.ч. и при отрицательных температурах (датчики двери нередко охлаждаются ниже 0 градусов).

Датчики дверей и движения задействованы в автоматизациях «тревоги», которые шлют сообщения в специально созданный телеграмм‑канал дачи в случае открытия дверей или обнаружения движения при включенном режиме охраны. Датчики температуры сигнализируют в тот же канал о выходе за предельные параметры (например, падение температуры ниже 0 в жилых помещениях). Кроме того, универсальная автоматизация на базе этого блюпринта пишет в тот же канал инфу о подходящих к концу батарейках.

Десять датчиков обошлись примерно в 8–9 тысяч рублей, еще в 1,5–2 тысячи обошелся донгл и в 4–5 условных тысячи обошлись 3 лампочки и 2 розетки из старых запасов.

Управление котлами

В рамках данного проекта не стояло задачи регулировки температуры в доме. Эта задача осуществляется комнатными термостататическими клапанами на радиаторах. На отопительный сезон в отстуствие людей они выставляются в минимальное значение (единичка), и поддерживают температуру в 10–12 градусов в максимально простом и надежном режиме, а при помощи датчиков температуры и давления мы отслеживаем отстутствие аварийных ситуаций типа завоздушивания, протечек и т. п.

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

Осуществляется данная функция при помощи двух реле Sonoff zb mini, которые подключены к контакторам на 16А и 40А соответственно для газового и электрического котлов. Нюанс, с которым пришлось столкнуться — металлический корпус электрощитка, в котором были скоммутированы котлы и в котором мы установили контакторы. ZigBee сигнал через металл проходить отказался, и модули сонофф пришлось вынести за корпус щитка.

Был еще вариант взять wifi вариант реле и/или воспользоваться двухканальным вариантом, но хотелось усилить плотность zigbee‑сети, да и модули банально были под рукой.

Обошлась эта часть автоматизации в 4–5 тысяч рублей вместе с контакторами.

Управление отоплением бани

Баня у нас является отдельным строением, и система отопления в ней сделана несколько иначе. Она не подключена к основному газовому отоплению, топится электричеством, что недешево, и поэтому в ней используется автоматизация по температуре. Один из рутеров Keenetic Air расположен в доме в угловой комнате — ближайшей к бане и добивает вполне устойчиво, сбоев WiFi за всё время замечено не было (расстояние примерно 10–12 метров, устройства разделяют 2 кирпичные стены с окнами). Пишу об этом подробно, потому что до монтажа системы была куча сомнений — «добъет или не добъёт?»

Реализована автоматизация на базе довольно старого устройства Sonoff TH16 с внешним выносным датчиком температуры и влажности, которое сейчас уже заменено в линейке itead на sonoff elite. У меня это устройство было под рукой, уже распаянное под перепрошивку (старые сонофф нуждались в пайке для этой процедуры). В целом всё достаточно банально, хотелось бы отметить только две особенности: во‑первых устройство полностью независимо от Home Assistant и вся автоматизация включения/выключения реализована в прошивке автономно. Сделано это для надежности работы, т.к. практика показывает, что uptime устройств на esp8266 очень и очень высокий и они более надежны чем сам HA. Кроме того, у этого устройства есть собственный простенький web‑server, к которому есть доступ через отдельное домейное имя в keendns, который работает независимо от HA. При этом в HA устройство, само собой, видно, и им можно управлять в случае необходимости.

web-интефейс термостата бани
web-интефейс термостата бани
Прошивка ESPHome для Sonoff TH16
substitutions:
  device_name: sonth1
  friendly_name: "banya"
esphome:
  name: sonth1
  platform: ESP8266
  board: esp8285
wifi:
  networks:
  - ssid: "XXXXXXXXXXXXXXXX"
    password: "XXXXXXXXXX"
  - ssid: "YYYYYYYYYYYYY"
    password: "YYYYYYYYYY"

captive_portal:

logger:

api:

web_server:
  port: 80

ota:

sensor:
  - platform: dht
    model: si7021
    pin: GPIO14
    humidity:
      name: "Влажность в бане"
    temperature:
      name: "Температура в бане"
      id: temp
      on_value_range:
        - above: 9.0
          then:
            - switch.turn_off: main_relay
        - below: 4.0
          then:
            - switch.turn_on: main_relay
    update_interval: 10s
  - platform: wifi_signal
    name: ${friendly_name} WiFi Signal
    update_interval: 60s
  - platform: uptime
    name: ${friendly_name}  Uptime 
    id: uptime_sec
    update_interval: 120s
binary_sensor:
  - platform: status
    name: ${friendly_name} Status
time:
  - platform: sntp
    # ...
    on_time:
      - minutes: /5
        then:
        - if:
            condition:
              sensor.in_range:
                id: temp
                above: 9.0
            then:
              - switch.turn_off: main_relay
        - if:
            condition:
              sensor.in_range:
                id: temp
                below: 4.0
            then:
              - switch.turn_on: main_relay
switch:
  - platform: restart
    name: ${friendly_name} Restart
  - platform: gpio
    name: "Нагреватель баня"
    pin: GPIO12
    id: main_relay
    icon: mdi:radiator
    restore_mode: ALWAYS_OFF

Управляем обогревателем мы напрямую, без контактора, т.к. его мощность менее 1,5 Квт, а реле в Sonoff стоит на 16А, что дает более чем двукратный запас по мощности. Если вы будете использовать аналогичную систему с более мощным обогревателем, настоятельно рекомендую включить в схему контактор.

Бюджет этого функционала — около 2000 ₽.

Видеонаблюдение

Уличная камера Tapo C310
Уличная камера Tapo C310

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

Посколько просто получить информацию от датчика проникновения и не иметь возможности её проверить было бы странно, были установлены несколько ip‑камер, позволяющих просматривать наиболее важные для нас участки и помещения.

Критерии подбора камер были такие: Надежность, цена, возможность отдачи потока по RTSP/ONVIF, приличное собственное приложение, наличие в линейке хорошей уличной модели. К моменту покупки у меня уже был немалый опыт взаимодействия с камерами Xiaomi и Sonoff, к сожалению по обоим брендам довольно печальный. Был также положительный опыт работы с камерами серии TAPO от TP‑link, собственно их я и установил.

В общем и целом камерами я более чем доволен, устраивает почти всё: низкая цена, качество картинки, надежность, устойчивость к низкой температуре (уличные выдержали -35С минувшей зимой), функционал (есть датчики движения и присутствия человека с настройкой чувствительности, есть одновременная запись на микро‑сд и отдача rtsp‑потока, есть встроенная сирена и т. д.).

Самое замечательное в камерах TAPO — это отличная интеграция в Home Assistant, как просто в режиме забора rtsp‑потока, так и с расширенным функционалом через интеграцию в Hacs, которое позволяет из HA управлять поворотными камерами, включать/выключать режим «privacy», включать/выключать сирену и очень много чего еще.

Доступные в HA настройки камеры tapo c200
Доступные в HA настройки камеры tapo c200

Для обычного вывода видеопотока идеально подходит отличнейшая интеграция WebRTC от@AlexxIT, задержки картинки с ней минимальны, а raspberry 3b даёт работать с потоком с 4–5 камер.

Страница в HA c потоками всех камер проброшеных через WebRTC
Страница в HA c потоками всех камер проброшеных через WebRTC

В режиме охраны часть камер участвуют в простейшей автоматизации, которая по срабатыванию датчика движения (который создаёт сама камера!) посылает кусок видеоряда и картинку в уже упомянутый телеграмм канал. Код этой автоматизации максимально примитивен, но на всякий случай приведу его здесь (само собой, оповещения из HA в телеграмм должны быть настроены отдельно). Кроме того, в режиме тревоги может быть активирована сирена встроенная в каждую из камер. В С310 сирена реально очень громкая и способна спугнуть даже самых смелых злоумышленников.

Автоматизация по отправке фото и видео с камер
- alias: 'Camera 1 snapshot '
  trigger:
    platform: state
    entity_id: binary_sensor.garage_cell_motion_detection
    to: 'on'
  condition:
    condition: state
    entity_id: input_boolean.alarm_on
    state: 'on'
  action:
  - service: camera.snapshot
    data:
      entity_id: camera.garage_mainstream
      filename: /config/www/cam_captures/tplink.jpg
  - delay: 00:00:05
  - service: telegram_bot.send_photo
    data_template:
      target:
      - XXXXXXXXXX
      - YYYYYYYYYY
      file: /config/www/cam_captures/tplink.jpg
  id: 78fc02321b3e4580a4585ae204b02c77
- alias: 'Camera 1 video '
  trigger:
    platform: state
    entity_id: binary_sensor.garage_cell_motion_detection
    to: 'on'
  condition:
    condition: state
    entity_id: input_boolean.alarm_on
    state: 'on'
  action:
  - service: camera.record
    data_template:
      entity_id: camera.garage_mainstream
      filename: /config/www/cam_captures/tplink.mp4
      duration: 5
  - delay: 00:00:10
  - service: telegram_bot.send_video
    data_template:
      target:
      - XXXXXXXXXXX
      - YYYYYYYYYYY
      file: /config/www/cam_captures/tplink.mp4
  id: 02d9ef431a4344aaadd4787b45931ccb

Я задействовал 3 уличных камеры Tapo C310 и одну поворотную камеру Tapo C200. Обошлись они мне примерно в 13 000 за все 4 камеры, плюс около 2000 за микро‑сд карты, что я считаю крайне скромным бюджетом для полученного функционала и надежности.

Открытие ворот гаража

В доме есть гараж с автоматизированными воротами. Для ворот есть пульты использующие простейший RF‑сигнал, но пульты иногда садятся, иногда их забываешь, иногда требуется удаленно открыть ворота ремонтнику или гостям, и для этих целей в управление воротами было интегрировано простенькое и старенькое WiFi‑реле Shelly 1 c сухим контактом. Лезть в блок управления воротами мне было неудобно, он расположен на потолке, и я подключил модуль реле в настенную кнопку открытия ворот. Использование именно Shelly хорошо еще и тем, что продукты этого бренда позволяют одновременно работать в локальной сети с Home Assistant и управляться через облако shelly. Это выручит в ситуации, когда HA ушел в даун, но WiFi всё ещё есть. (если будете это повторять, обратите внимание — требуется именно реле с сухим контактом!!!)

Бюджет этой доработки — 1000–1500 руб.

Аварийные датчики

В качестве таковых выступают датчики протечки, дыма и газа.

Первым датчиками из этой категории для меня стали все те же датчики Aqara. Первый датчик протечки я купил лет 5 назад, потом докупил датчики дыма и газа и последовательно подключал их к хабам Xiaomi Gateway 2, 3, стику ConBee2, Sonoff... Менялись и интеграции в ХА — MiHome, Deconz, Zigbee2mqtt. К сожалению, нормальной работы добиться от них мне не удалось. Почему‑то датчики именно этой категории со временем «отваливались» и переставали нормально работать в сети zigbee. Исходя из этого опыта я перестал использовать для этих целей датчики экосистемы xiaomi/aqara и сейчас у меня в тестовой эксплуатации находятся датчики shelly. Они работают не в zigbee, а в wifi, несколько дороже, но есть и плюсы — например датчик газа можно сразу проводом подключить к приводу крана перекрытия газа. В РФ они не особо доступны официально, а то что есть стоит каких‑то чрезмерных денег, поэтому я не могу их однозначно рекомендовать с точки зрения цены и доступности.

Если говорить о качестве и надежности — то пока у меня нареканий к ним нет, а репутация бренда shelly для меня достаточно высока — я эксплуатирую немало их устройств. С точки зрения интеграции в Home Assistant shelly является одним из самых «дружелюбных» брендов, он автоматически находится и интегрируется в 1 клик.

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

Датчик газа Shelly в интерфейсе HA
Датчик газа Shelly в интерфейсе HA

Бюджет на эти датчики (по одному газа и дыма) у меня составил около 10 000 рублей, но следует учесть, что покупал я их в ЕС по соответствующим ценам.

Итак, подведу итог:

На автоматизацию нужных нам функций мы потратили примерно 65–70 тыс рублей по ценам актуальным на момент написания статьи (27.03.23). Времени на монтаж и настройку системы было потрачено относительно немного, в совокупности около 2 дней.

Результат: возможность удаленного мониторинга своего дома и предотвращения аварийных ситуаций, экономия на отоплении, увеличение покрытия WiFi‑сети, повышение безопасности и защищенности дома и участка, некоторые дополнительные удобства по доступу в дом. Главный результат для нас — экономия большого количества нервных клеток, возможность убедиться, что в доме «всё в порядке»

Что касается надежности построенной системы, то за 2 с лишним года эксплуатации не выявилось никаких критических уязвимостей, все компоненты работали надежно и стабильно. Самым ненадежным элементом оказалась Raspberry Pi 3b, которая в последнее время всё чаще требует перезагрузки, что скорее всего обусловлено подошедшим к концу ресурсом карты памяти. Скорее всего в ближайшее время мы заменим ее на Raspberry Pi4 с диском M.2 — такая конфигурация работает у нас в другом доме гораздо более стабильно и надежно.

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


  1. Stalker_RED
    00.00.0000 00:00
    +1

    Розетка Tapo P110 немного дороже, чем P100, но умеет мониторить потребление. Графики строит, и экспорт в эксельку есть.
    Попробуйте поискать SD карту industrial grade - они дорогие, но у них гораздо выше ресурс. Иногда встречаются недорогие на вторичке или на али.


    1. Melias Автор
      00.00.0000 00:00

      Спасибо, вы правы, функционал энергомониторинга в данном случае лишним не будет


  1. alexandrtumaykin
    00.00.0000 00:00
    +2

    Какие встретил минусы: время от времени отваливаеватся внешний доступ, обычно ненадолго. Вряд ли это вина keendns, скорее это местный глюкавый интернет так себя проявляет, но не могу не упомянуть.

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

    С икеевскими лампами нет проблем автовключения после появления электричества? У меня они постоянно игнорируют настройку запоминания состояния/не включаться, причем после включения, не всегда HA видит актуальное состояние. Поэтому прикупил недавно zigbee реле на Din рейку, чтобы иметь возможность управлять линиями (свет, розетки).


    1. Melias Автор
      00.00.0000 00:00

      У меня проблем нет, хотя икеевских ламп я использую очень много, как на даче, так и в основной квартире. При этом у меня есть разные поколения серии Tradfri и разные цоколи. Использую интеграцию zigbee2mqtt и функцию запоминания состояния (retain) настраиваю именно там. Хабы у меня используются разные, так что дело, наверное не в них, я бы на вашем месте грешил на интеграцию.

      Keendns обрывается, но duckdns тоже иногда уходит в даун, так что ничто не идеально под луной (а уж тем более в IoT ))))


      1. alexandrtumaykin
        00.00.0000 00:00

        про retain не знал, нужно будет попробовать. Я пробовал через power_on_behavior


  1. alexandrtumaykin
    00.00.0000 00:00

    от частых отключений электричества рекомендую мини ups добавить. Я их для роутеров, камер и beelink (перешел от raspberry) поставил. На несколько часов заряда хватает.


    1. Melias Автор
      00.00.0000 00:00

      ИБП есть, но, к сожалению, без обратной связи и рано или поздно он всё равно кончается, а отключения нередко длятся довольно долго


      1. alexandrtumaykin
        00.00.0000 00:00
        +2

        mini-ups на элементах 18650 у меня до 8 часов держал роутер и камеры. Причем я на один ups подключил несколько девайсов. Beelink не помню сколько часов держал.

        Для малинки в свое время покупал модуль ups на 2-х 18650, там больше суток держалось питание и обратная связь есть вроде


  1. vviz
    00.00.0000 00:00

    "К сожалению, по мере «старения» карты памяти" — если не ошибаюсь, карта "старится" записью. Так же неприятные ситуации возникают при сбое питания в момент записи (по мне так журналируемая ФС не всегда спасает). Я в таких ситуациях использую механизмы squashfs и overlay.


    1. Melias Автор
      00.00.0000 00:00
      +1

      Да, в ХА по максимуму отключены логи и прочее, но он всё равно пишет довольно активно.


      1. vviz
        00.00.0000 00:00

        Если только логи — можно писать в /dev/shm и периодически забирать себе, делая при этом logrotate, а еще лучше использовать удаленный syslog. При записи в БД в данном случае надежнее overlay.


      1. alexandrtumaykin
        00.00.0000 00:00
        +1

        можно еще писать в память и сбрасывать на диск раз в какое-то время. Я так делал. У меня еще ни одна карта не умерла за 2 года использования малинки


        1. Melias Автор
          00.00.0000 00:00

          А как конкретно вы это делаете?


          1. alexandrtumaykin
            00.00.0000 00:00

            Точную инструкцию не дам, так как немного уже подзабыл что и как называется и делается.
            Выделил в RAM место под tmpfs (вроде так называется). Затем сделал, чтобы база HA хранилась на этом диске (то ли через настройки, то ли через симлинки). По крону делаем копирование/бэкап файла базы в нужную нам директорию. А при загрузке системы копируем наш бэкап обратно в tmpfs


      1. xhd
        00.00.0000 00:00

        ХА пишет по большей части в свою БД, по умолчанию это SQLite, и с этим ничего не поделать, там хранится вся история состояний.

        Не знаю, как это отразится на производительности, но можно подключить USB SSD и перенести БД туда.


        1. heejew
          00.00.0000 00:00

          Хороший совет про ссд. Или даже хдд, если есть причины. Все равно по производительности не будет разницы.

          В случае с машинкой, можно поискать корпус аргон и msata диск. Будет и красиво, и вполне себе надёжно


      1. Soorin
        00.00.0000 00:00

        Странно, что с RPi3 Вами не используется SSD - стоимость ныне копеечная, скорость и надёжность намного выше, чем у microSD.


        1. Melias Автор
          00.00.0000 00:00

          "Не докрутил". Собирал из того, что было под рукой во время кавалерийского наскока в РФ посреди ковидного карантина (я не живу в РФ).

          Как и написал в к конце статьи - собираюсь поменять на RPi4 + SSD, но для этого надо бы в РФ съездить, а когда это будет реальным - неясно.


          1. heejew
            00.00.0000 00:00
            +1

            Посмотрите лучше на неттопы, типа beelink, minisforum и др. Они не сильно дороже rpi4 с обвязкой выйдут нынче, но дадут буст производительности и возможностей на будущее.

            Ну и, как по мне, надёжнее. Все rpi приходилось перегружать довольно часто. А вот последний неттоп запросто держал аптайм около года, сидя на ups ( до очередного апгрейда ).

            Если gpio не требуется, то я бы нынче на малинки сегодня вообще не смотрел

            Что касается потребления - все те же 15в, что и у rpi4 требуется.


            1. Melias Автор
              00.00.0000 00:00

              У меня дома для этих целей используется неттоп (Intel Nuc11i5)

              С ним конечно, хорошо, но тоже есть проблемы

              Во-первых, изначально показалось, что i5 - жирновато для одного HA и хотелось оставить возможность использовать его для других целей, поэтому на неттоп была поставлена 10я винда, в неё - VirtualBox и там уже HA. К вирт-машине и ХА вопросов нет и не было, всё работает отлично, даже многочисленное железо прокидывается идеально. А вот винда регулярно портит всю малину, особенно в последнее время. Обновление-перезагрузка-остановка на экране "а давайте перейдем на винду 11"?". В конечном итоге, пришлось уйти на linux, c ним таких проблем нет (есть другие, но они уже субъективные и зависят от моего низкого уровня знания linux)

              Во-вторых, что более важно, не знаю все неттопы или конкретно Нюки оказались проблемными с т.з. пылевого загрязнения. После 1-1,5 лет работы он начинает крутить вентилятор охлаждения на полную, а мониторинг показывает дикие цифры нагрева проца. Надо чистить, а это оказывается весьма нетривиальной процедурой. Я свой чистил сам, умаялся дико. Сделан он крайне неудобно для этих целей. Сейчас прошло около года, уже снова начал шуметь. И это надо учесть, что 11я серия далеко не самая горячая у Интела по tdp, её по идее и не надо особо охлаждать. У друга Нюк 8i5 с теми же проблемами, дык он его регулярно носит чистить в ближайший сервисный центр, ни разу не бесплатно, т.к. сам попробовал и понял, что не справится.

              В общем, ничто не идеально ((


    1. softmart
      00.00.0000 00:00

      Почитал про squashfs, но не понял как туда данные записывать? Если она только для чтения? )


      1. vviz
        00.00.0000 00:00

        тут все просто, ставится пакет поддержки и нужный каталог сворачивается в образ, который потом монтируется.
        Вот здесь кратенько — https://wiki.puppyrus.org/setups/howto-squashfs
        про модификацию и компиляцию ядра можно не читать :)


  1. antonstovpets
    00.00.0000 00:00

    1. зексель и кинетик это уже давно разныкомпании

    2. Почему Rpi3? Оно же дорогое и работа с SD не надёжна. Можно же взять TV Box за 1000р. Залить туда не на SD карту а на нормальное хранилище HA. Это и надёжней и буджетней. Тем более дешёвое 4ой малины


    1. Melias Автор
      00.00.0000 00:00

      По зиксель и кинетик не знал, на коробке с роутерами у меня присутствовали оба бренда ЕМНИП. Спасибо за инфу.

      Что касается распберри - то во-первых, она просто уже была в наличии, соотв ценник её для меня = 0, во-вторых городить систему, которая должна крутиться в автономе за несколько тысяч км от меня на базе неизвестной мне китайской железяки я не могу решиться. Хотя решение, судя по всему, интересное


      1. xhd
        00.00.0000 00:00

        В нынешних реалиях есть мини-ПК типа неттопов с достаточной производительностью, с SSD и возможностью подключать HDD, за сравнимые с RPi деньги. Либо рекламировавшиеся здесь ранее управляющие модули с креплением на DIN-рейку.


        1. Harwest
          00.00.0000 00:00

          Неделю назад заменил одноплатник (который был мощнее rpi3) мини-неттопом на N3160 c ssd. Работает быстрее в 3-4 раза.

          И кстати Таро С310 выдержали -37С минувшей зимой)


          1. xhd
            00.00.0000 00:00

            у меня на J1900/8Gb RAM трудится HA+ZM+всякое мелкое года четыре уже. За всё время - один раз сдох дешёвый SSD.


    1. Crazy_Pit
      00.00.0000 00:00
      +1

      на нестандартное железо придется компилировать . а это несет за собой проблемы с отсутствием необходимых библиотек (не помню точно но поимел проблемы версий питоновских библиотек 2 какие-то потерялись). Сталкивался с тв приставкой. В итоге перешел на х86.и всё встало без проблем. Если есть опыт то можно и тв приставку. иначе надо брать то что использует большинство пользователей.


  1. brovkin_s_s
    00.00.0000 00:00
    +1

    А как вы решили вопрос с питанием датчика давления? Пины ESP32 только на 3.3v, датчик питается на 5в, выходное напряжение 4.5в. Я подключал через делитель напряжения, но мне кажется, что показывал он не очень точно из-за этого.


    1. Melias Автор
      00.00.0000 00:00

      Хороший вопрос, спасибо. Проснулись воспоминания, как я гуглил всю эту инфу и подбирал датчик ).

      Короткий ответ: проблемы нет, всё ок

      Длинный ответ: По даташиту датчик расчитан на давление до 1,2 МПа, что примерно соответствует 10 Атм. Напряжение он выдает от 0,5В до 4,5В, при этом 4,5В он выдаст на максимальном давлении.

      В моей системе давление не может превышать 2 атмосферы, что никак не может дать больше 2 вольт выходного напряжения. В обычном многоквартирном доме обычно не больше 4 атмосфер и датчик тоже можно смело использовать. Ну а если кому-то повезло жить в высотке с отоплением под давлением 7-8 атмосфер, то тут, наверное, этот датчик уже не подойдет без дополнительных плясок с бубном. (но в такую систему я бы сто раз подумал, прежде чем лезть. 8 атмосфер - это совсем не шутка). Вот для примера калибровочные значения для одного из моих датчиков (они все немного отличаются, напряжение еще зависит от длины провода до датчика)

      - 0.28В -> 1.2 Атм

      - 0.315В -> 1.5 Атм

      Так что проблем нет, если у вас аналогичный датчик - можете смело его использовать. Обратите внимание, если вы используете его с Wemos, у него только один пин умеет в ADC, с другими спарить датчик не получится.


      1. brovkin_s_s
        00.00.0000 00:00

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


  1. Soorin
    00.00.0000 00:00
    +1

    В моём варианте - HA на RPi3 (в другом проекте - PRi4) с SSD, надёжность устраивает. Камеры не стал увязывать с умным домом - они достаточно умны, чтоб слать тревоги и картинки на почту, а для видеопотока есть регистратор на Synology/XPenology с возможностью просмотра со смартфона. Повторюсь про Zigbee: технология классная, но ничего из жизнеобеспечения дома нельзя на неё вешать - при отвале умного дома или зависании Zigbee-адаптера это всё разом окукливается и остаётся только WiFi, где упомянутые Sonoff TH16 продолжают работать, и доступ к ним через роутер сохраняется, и можно посмотреть и порулить.

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


    1. Melias Автор
      00.00.0000 00:00

      Спасибо за содержательный комментарий.

      Что касается камер - у меня тоже есть NAS, но писать на него видеопоток с камер за несколько тысяч км не реально. Тем более, что канал там узкий и нестабильный. Конечно, хранение архива на MicroSD самих камер это совсем не оптимальный вариант, но в совокупности с отправкой коротких роликов и фото в телеграмм в случае тревоги он нам даёт приемлемый уровень безопасности для такого объекта (в конце концов, золото и брилльянты мы там, само собой, не храним). Что касается вывода камер в интефейс ХА - это сделано для облегчения использования системы основным "заказчиком", а это мой отец-пенсионер. Ему не удобно использовать несколько приложений и запоминать - в какое подменю надо зайти для включения/выключения режима охраны каждой камеры и/или режима "прайвеси". А так я сделал одну механическую зигби-кнопку, которая переключает эти режимы и блокирует всё инфоромирование в телегу как от камер, так и от датчиков. При этом распберри эти камеры никак не нагружают, насколько я понимаю, WebRTC использует её только при установлении соединения, а дальше трудится наш браузер и сама камера.

      По составу "умной дачи" (хотя, честно говоря, от такого словосочетания скулы сводит) я с вами согласен. Если под "тётками в банке" вы имеете в виду голосовых помошников - то да, это всё баловство. Из полезного молжно еще добавить автоматизацию полива там где она требуется, и у меня есть большая статья по этому поводу (порядком устаревшая, но местами всё еще актуальная)

      А по котлам вы полностью правы, котлы стоит перевести с zigbee на wifi c автономным веб-сервером, скорее всего даже на ту же еспшку с датчиком давления. Хотя функция включения и выключения для нас не кажется критичной и используется 1-2 раза в сезон, а зигби еще пока ни разу не отвалился, всё равное так будет правильнее, согласен с вами.


    1. heejew
      00.00.0000 00:00
      +1

      при отвале умного дома или зависании Zigbee-адаптера это всё разом окукливается и остаётся только WiFi

      Только тут нюанс, что wifi имеет точно такую же точку отказа ;)
      Wifi ни разу не надёжнее, да и в целом оба находятся в равном положении при использовании в критических системах. Но если уж вешать критическое что-то на них - то предусматривать возможность автономной работы в каком-либо упрощённом виде, либо резервировать системы управления\роутеры, либо предусматривать хотрелоад. Тогда и выбор wifi\zigbee не будет какой-то проблемой.

      Из моей практики как-то вышло наоборот: проблема зависания адаптера или отвала УД - высосана из пальца, за год аптайма ни разу проблем не было. (Правда тут стоит отметить, что я не на RPI сижу, на RPI действительно эти проблемы актуальны были.)
      Зато вот роутер раз в месяц-два залипает. Хотя казалось бы, кинетик вроде не х*р собачий. Даже авторебут по расписанию не особо спасает ситуацию ( наличие этой возможности из коробки само по себе интересно )

      Камеры не стал увязывать с умным домом - они достаточно умны

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

      С камерами, правда, есть один нюанс, называемый вендорлоком. Как пример, те же tapo вполне могут окуклиться, если нет доступа к tplink серверам и фиг они вам что отправят. И никак это не обойти. Возможно и поправили это в обнова, конечно..
      Да и в целом, разные системы управления и настроек немного напрягают, особенно, если управление возможно только через мобильное приложение, что не всегда удобно.

      В моем случае, из-за описанной проблемы, я сделал кастомно - поток отдается в frigate, который уже и рулит и записью, и детектированием, далее по событиям mqtt производятся какие-либо действия в ha или nodered, отправка уведомлений например. В одном случае камера использовалась как замена датчика движения для автоматизации. Ну и конечно, камеры выведены в homeassistant для обзора. Но да

      И, конечно, никаких "тёток в банках" и прочих излишеств не нужно умному дому. 

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

      С коробочной тёткой есть одна проблема - стандартные потребители переносят управление светом с физической кнопки на бабку-в-коробке и называют это умным домом, что не является истиной.


  1. Didimus
    00.00.0000 00:00

    Коллега решил проблемы с дачей очень просто: купил квартиру в пятиэтажке рядом с дачами. Ни о чем не надо думать, и гораздо дешевле.


    1. Melias Автор
      00.00.0000 00:00

      Только тут нюанс, что wifi имеет точно такую же точку отказа ;)

      Ну, wifi, особенно cо своим собсвенным веб-сервером имеет на одну точку отказа меньше. А в моем случае, это звено самое проблемное.

      Ну а автономная работа - это само собой. В идеале всё что может должно работать автономно (именно поэтому у меня в бане прошивка сделана с автономной теромрегуляцией, не зависящей ни от вай-фай, ни от ХА)

      Зато вот роутер раз в месяц-два залипает. Хотя казалось бы, кинетик вроде не х*р собачий. Даже авторебут по расписанию не особо спасает ситуацию ( наличие этой возможности из коробки само по себе интересно )

      Если кинетик мертв, а ХА жив, можно заставить ХА перезагружать кинетик после длительного отвала внешней сети. Но в целом это как-то неправильно всё, согласен с вами. У меня вот проблем с кинетиками пока не было, зато провайдерские рутеры попили моей кровушки изрядно. Сейчас, например, рутер от Джазтел у родителей не виснет и не отрубает доступ в инет из дома, а вот доступ снаружи через duckdns почему-то регулярно протухает. Толи проброс портов в нем залипает, то ли еще что-то. Перезагрузкой лечится, но геморой доставляет.


      1. Didimus
        00.00.0000 00:00

        Нет, у него вместо дачи квартира. Вот лес, вот поле, вот водоем. Не надо ни о чем думать.


  1. gryphonv
    00.00.0000 00:00

    Для бэкапа Home assistant имеет удобный addon - google drive backup. Он автоматически по расписанию сохраняет полную конфигурацию в облако (при наличии аккаунта google).

    И рекомендую интеграцию с телеграм для уведомлений (или частичного управления).


    1. Melias Автор
      00.00.0000 00:00

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

      Да и зачем пользоваться облаком, если у меня есть свой NAS? Я настроил на нём rsync, на HA настроил упомянуть в статье плагин для rsync-backup и у меня теперь всё замечательно работает. Копирует и основные папки, и папку с бэкапами (которые тоже создаются по расписанию)

      А интеграция с телегой, само собой есть и оооочень активно используется


  1. ivvi
    00.00.0000 00:00

    Спасибо большое за интересную и полезную статью!

    Я полагал, что zigbee-датчики Aqara работают только с zigbee-шлюзом от самой Aqara. Судя по вашей статье, это не так?


    1. Melias Автор
      00.00.0000 00:00

      Почти все устройства zigbee совместимы не только с шлюзом своего производителя, но и многими другими. Это одно из главных преимуществ стандарта. Вот здесь можно посмотреть, сколько устройств поддерживает одним из самых популярных кросс-платформенных open-source проектов zigbee2mqtt (спойлер: 2786 девайсов от 359 различных вендоров)

      У xiaomi/aqara есть свои неприятные особенности в реализации стандарта зигби, но если не лезть в детали и нюансы, то да, они совместимы и являются одними из самых популярных устройств среди энтузиастов IoT использующих "альтернативные" системы типа Home Assistant, OpenHab, Majordomo, Domoticz etc.


  1. return_void
    00.00.0000 00:00
    +1

    Примерно такая же схема по составу устройств, за тем исключением что один электрический котел. Столкнулся с тем, что при релейном управлении котлом много коротких циклов нагрева. Подобрал параметры отопительных кривых и замыкаю термостат при нахождении на даче. То есть, котел работает почти непрерывно, самостоятельно управляя мощностью и температурой теплоносителя по данным уличного термодатчика. Но в режиме поддержания температуры, когда никого на даче нет, проблема тактов остаётся. В планах собрать адаптер цифровой шины котла либо поставить что-то вроде ZONT, а его уже интегрировать в HA.

    Какую интеграцию вы используете для sonoff? AlexxIT? У себя шлюз перешил в тасмоту, т.к. дефолтные частота передачи и дельта температуры не устраивали. Приточная вентиляция успевала понизить температуру в комнатах за то время, пока сработает датчик и радиаторы нагреются. В том числе по этой причине перевел котел на непрерывный режим работы.

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


    1. Melias Автор
      00.00.0000 00:00

      Sonoff у меня перешит на ESPHome, часть устройств Shelly, кстати, тоже (не на даче, в основном доме).