Итак, дано: загородный дом в средней полосе РФ с немалым количеством инженерных систем, за которыми хотелось бы как минимум следить, а желательно и частично управлять. В доме не живут на постоянной основе люди, но есть интернет‑подключение. В зимнее время дом отапливается, даже в отсутствие людей. Из‑за того, что система отопления монтировалась более 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

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

WiFi

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

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

Кусок интерфейса. Закрепить 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-интефейс термостата бани
Прошивка 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

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

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

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

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

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

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

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

Страница в 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

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

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

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

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

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