В этой статье я расскажу о том, как делал для себя умный дом, выбрав в качестве платформы Home Assistant.

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

Основные задачи, которые нужно было решить

  • Управление отоплением - установки температуры в каждом помещении, а различные общие режимы: "Комфорт", "Не дома", "Только первый этаж", "Приеду завтра".

  • Управление вентиляцией - режимы "Постоянно включена", "Включена с 23 до 7".

  • Управление бойлером - "Постоянно включен", "с 23 до 7", "с 23 до 20".

  • Периодическая откачка воды из колодца (чтобы не застаивалась).

Обеспечение надежности решения

  • Переключение на резервный канал связи при пропадании основного интернета.

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

Общая схема решения

Общая схема решения

Основные компоненты системы

Расскажу по порядку о каждом компоненте системы.

Сервер Home Assistant

Home Assistant (HA) - это opensource продукт, представляющий собой web сервер. Взаимодействовать с ним можно либо через браузер, либо через мобильное приложение на платформе Android или IOS.

Вот так выглядит примерно может выглядеть приложение на смартфоне. Все зависит от ваших настроек и фантазии, т.к. по сути Home Assistant это no-code система, в которой вы можете визуально конструировать то, что вам нужно (хотя по традиции opensource время от времени все-таки надо лезть в конфиги).

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

Большинство настроек делаются через интерфейс (по принципу no-code). Вот так, например, выглядит сценарий переключения режима в 23 часа с "Приеду завтра" на "Комфорт".

Настройка автоматизации в HA

К сожалению, не все функции доступны через пользовательский интерфейс. Часто бывает так, что нужные настройки доступны только при редактировании конфига в формате yaml.

Например, через интерфейс, в элементе управления "термостат" нельзя выбрать реле света, а также не доступна настройка "keep alive" (которая периодически проверяет статус подключенного реле и может вернуть его в нужный режим, например после рестарта, при потере им питания.)

Вот так выглядит настройка сценария управления термостатом в формате yaml:

climate:

- platform: generic_thermostat

name: Температура в коридоре

heater: light.hall_switch_light_1

target_sensor: sensor.hall1_temperature

min_temp: 7

max_temp: 30

ac_mode: false

cold_tolerance: 0.1

hot_tolerance: 0.1

keep_alive: minutes: 3

precision: 0.1

Orange PI как платформа для Home Assistant

HA это Python-приложение и он может быть развернут на самых разных платформах. Я использовал для сервера HA одноплатный компьютер Orange PI 3B 8GB.

Orange PI я выбрал за надежность (проверенную на личном опыте), устойчивость к отключению питания и низкий нагрев.

У данной платы температура процессора не превышает 50 градусов при использовании медного радиатора (заказанного на али).

На самом одноплатнике установлен дострибутив linux - ARMBIAN. Систему можно поставить на Micro SD или на купленный отдельно модуль eMMC. Я выбрал вариант с eMMC, т.к. решил, что этот вариант все же долговечнее, чем SD.

HA можно установить в docker или использовать чуть более сложный путь и установить его в виртуальное окружение Python.

Я выбрал вариант с виртуальным окружением, т.к. мне нужно было через shell управлять пинами GPIO. (Не уверен, что это будет просто сделать из docker.)

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

Сама установка HA в виртуального окружения выглядит как pip3 install homeassistant (но тем не менее, я призываю вас обратиться к официальном гайду на сайте, т.к. есть нюансы).

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

Сервер HA на Orange PI


VPS сервер

Доступ к HA осущевляется через внешний сервер, который находится на VPS провайдера и на который установлен "домашний" OpenVPN.

Зачем так сложно? На это есть несколько причин:

  • Мне нужен VPN, чтобы объединить разные домашние устройства в сеть.

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

  • Для безопасности все-таки нужен SSL. Я использовал бесплатный сервис letsencrypt, предварительно зарегистрировав свой домашний домен, т.к. он нужен для получения полноценного сертификата.

    (Если вы считаете, такой вариант излишне навороченным, то можете рассмотреть варианты статического IP для HA или dyndns.)

Про настройку VPS подробно писать не буду, т.к. эта статья не о сетевых технологиях, а об умном доме. Скажу только, что на сервере VPS поднят OpenVPN сервер, к которому подключается сервер HA. На VPS настроен проброс порта, чтобы можно было, обратившись к своему домену, в итоге попасть на сервер HA.

Про SSL

Для личного домена получен сертификат SSL, чтобы подключение было шифрованным.

Есть заморочка, связанная с обновлением сертификата letsencrypt раз в 3 месяца. Для этого пришлось связать сервер HA и сервер VPS по NFS (доступ к папке) и сделать в cron-команду копирования свежих сертификатов на сервер HA.

Переключение на резервный канал на сервере HA

Для реализации резервного канала, использован "failover script", поднятый как сервис на сервере HA.

Этот скрипт проверяет доступность интернет подключения, и, при недоступности, переключает канал на резервный 4G WI-FI. После получения доступа в интернет через резервный канал, OpenVPN восстанавливает подключение с VPS-сервером и умный дом снова становится доступен. Failover-скрипт периодически сам проверяет, не вернулся ли основной канал связи и возвращается на него, если канал стал доступен. (Критерием доступности канала для данного скрипта является успешный ping любого выбранного вами сайта.)

Failover-скрипт взят отсюда (Спасибо автору).

Резервное питание

Для резервного питания использован небольшой ИБП для USB устройств, роутеров и прочего.
Нужно, чтобы система была доступна при отключении электричества, чтобы мониторить температуру в доме, поэтому сервер умного дома и резервный WI-FI модем с симкартой подключены к ИБП.

Координатор Zigbee

Для подключения Zigbee устройств к серверу умного дома нужен специальный координатор. Хорошо проверенная модель - SONOF USB Dongle Plus-E.

Координатор Zigbee подключается к USB порту Orange PI. У меня HA нашел данное устройство сразу при старте, без каких-либо дополнительных настроек с моей стороны.
Далее в HA появился пункт меню для подключения Zigbee устройств.

Конечные Zigbee устройства

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

Чтобы подключить Zigbee устройство к умному дому, нужно просто выбрать функцию поиска в HA и нажать кнопку сопряжения на самом устройстве. У меня не было никаких проблем или сбоев при подключении купленных устройств. Тут все просто.

Zigbee датчики температуры и влажности

Эти датчики не имеют какого-то конкретного производтеля, проще говоря "No name" с али.
Думаю, важно выбирать датчики на обычных батарейках ААА, чтобы потом не мучиться с поиском экзотических батареек, которые к тому же бывают довольно дорогие.

Реле 5 вольт / 220 вольт, подключенные к Orange PI

Эти реле я использую для управления вентиляцией и сервоприводами водяного отопления. Ничто не мешает использовать Zigbee реле, но лично мое мнение, что связь по проводам все же надежнее, чем реле на радио-канале. (хотя глюков с Zigbee устройствами я пока не обнаружил).

Взаимодействие с реле сделано через командную строку. В HA есть возможность вызывать shell-script, а в Orange PI есть возможность управлять пинами GPIO через shell (команда gpio).

Выглядит это так:

/usr/local/bin/gpio mode 5 out - установить 5й pin как выход
/usr/local/bin/gpio write 5 1 - подать напряжение на пин

В конфиге HA нужно соответственно описать команду вот в таком виде, после чего ее уже можно использовать в сценариях пользовательского интерфейса:

shell_command:
pump_on: "/usr/local/bin/gpio write 5 1"

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

Физически блок реле 5В встроен в электрощит и закреплен на латунных стойках к ПВХ-панели. Рядом находится обычный электрощит - для удобства подключения питания.

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

Блок реле 5V

Zigbee реле управления светом - 4 канала

В моем решении такое реле используется для управления конвекторами (часть отопления сделано на них). Реле подключено к обычным контакторам 220 вольт.

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

Усилитель Zigbee сигнала

Хотя на различных сайтах и написано про 50 или даже 100 метров, на практике ничего подобного я не обнаружил. В моем случае, устойчивая связь наблюдается где-то до 15 метров. Дальше уже надо ставить промежуточную точку с усилителем. Думаю, что этот показатель может быть еще ниже в доме из блоков или кирпича (в моем случае стены каркасные).

Усилители Zigbee подключаются также просто, и устройства в сети сами решают, работать им через какой-то из усилителей или напрямую подлючаться к роутеру Zigbee. (При желании, в HA можно посмотреть карту сети и качество сигнала на различных ее участках.)

Про датчик CO2

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

Поэтому, я выбрал сложный путь (скорее ради эксперимента и из любви к DIY):

Датчик SCD41 -> (I2C) -> Arduino -> (UART) -> Orange Pi -> (JSON) -> HA

Врядли кто-то захочит это повторить, поэтому просто расскажу о результатах.

Датчик SCD41 выдает очень правдоподобные показания, думаю его показаниям уровня CO2 вполне можно доверять.

К сожалению, у интерфейса I2C есть проблема с дальностью. А именно, не больше 3х метров (возможно, тут гуру ардуино-проектов меня поправят).

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

Заключение

Как уже писал ранее, Home Assistant, это вариант для ИТ-специалистов и DIY энтузиастов, которых судя по популярности этого решения и его зрелости, в мире немало.

Очень хочеться побольше качественных Zigbee устройств. Например, я не нашел даже нормальный датчик температуры для улицы, не говоря уже о датчике CO2. Еще меньше устройств, которые можно цивилизованно закрепить в электрощит, на din-рейку. Также я не видел в продаже никаких специализированных боксов для размещения устройств умного дома.

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