Home Assistant — это популярная система умного дома, которая автоматизирует привычные бытовые процессы и работает на YAML файлах. В этой статье я расскажу, как настроить Home Assistant (далее HA), и что конкретно я использую в повседневной жизни. Это поможет вам избежать ошибок и быстрее продвинуться в изучении HA. На Хабре уже есть статьи о HA (раз, два, три), но здесь я хочу рассказать об установке и настройке системы от начала до конца. От первого запуска сервера до полноценно работающей системы, которую потом можно улучшать и дорабатывать для себя. Основной единицей в HA является интеграция — логика, которая описывает взаимодействие с умным устройством или внешним сервисом. Большая часть полезной нагрузки HA ориентировано на связку: умное устройство + интеграция или внешнее API + интеграция. 
Набор моих интеграций Железо, участвующее в статье: Сервисы, которые будем использовать: Установка HA предельно проста:  Также можно установить на уже имеющуюся систему с помощью Docker-compose: А теперь разберем несколько сценариев использования. Начнем с отслеживания устройств, с помощью которого мы можем фиксировать вход и выход носителей из дома.
Я предлагаю 2 способа отслеживания: В системе доступно много производителей роутеров. Для старых и не перечисленных в списке моделей можно использовать nmap (более подробно тут).
Если установить на телефон официальное приложение, HA по умолчанию создаст интеграцию, и в системе появится дополнительное устройство, которое можно отследить. Плюсы Минусы Плюсы Минусы Трекинг через локальную сеть роутера требует настройки, в отличие от GPS отслеживания. Два вида трекинга можно комбинировать для повышения точности. Ниже можно заметить, что в моем случае отслеживание через роутер работает лучше, чем через GPS. Зеленая зона значит, что телефон внутри зоны, красная — вне зоны. 
Результаты работы отслеживания (сверху — роутер, снизу — GPS) Можно подключиться через плагин SSH в VS Code, но получить доступ к проводнику в данный момент мне было удобнее. Поэтому, добавим сетевое расположение.  Нажмем обзор, найдем каталог config (мы в основном будем редактировать его) и выберем его как сетевую папку.  Дальше мы можем перейти в созданную папку и открыть ее через редактор.  После перезагрузки HA мы можем увидеть, что у нас появился новый глобальный объект device_tracker и наши устройства в нем. 
Трекинг устройств через роутер Теперь, когда мы умеем отслеживать пользователя, мы можем включать и выключать определенные лампочки с учетом информации о его местоположении. Для этого необходимо произвести действие по определенному событию. В этом нам помогут автоматизации. Теперь импортируем в наш основной файл весь каталог automation — так нам будет удобнее при написании следующих автоматизаций. Пример работы:
https://www.youtube.com/watch?v=Sii4rBtXYVw Для того, чтобы получить адаптивное освещение в зависимости от времени суток, нужно настроить цветовую температуру. Это удобно сделать внутри блока switch. Тут важно понимать, что пока данный switch включен, изменить параметры температуры будет невозможно (через interval минус время_с_прошлого_обновления лампа примет старые параметры).  Здесь вы найдете больше про динамическую цветовую температуру (flux в терминологии HA). А если вам интересна тема адаптивного освещения, на Хабре есть отличная статья по этому поводу. Для того, чтобы не разглашать всем секретные данные, создадим еще secrets.yaml. Туда мы сложим все данные, которые не должны попасть в публичный доступ. Для использования переменных из этого файла используем !secret.  Пример секретов: В итоге у нас имеется Telegram бот, готовый к отправке сообщений. Теперь, когда у нас есть настроенный сервис уведомлений и погодная интеграция, мы можем сделать утренние оповещения о погоде. Создаем новый файл автоматизации, и начинаем писать логику. Пишем переменную, которая будет отвечать за срабатывание оповещений только по будням. Если он true — то в выходные оповещений не будет. И подключаем в основном конфиг файле.  Пример работы:
https://www.youtube.com/watch?v=vSmSbSd_f-Q Теперь небольшое лирическое отступление в виде рассказа о написании blueprints на примере уведомлений. В данном случае я бы перевел blueprints не как чертежи, а как шаблоны или заготовки. Их удобнее использовать, если нужно написать несколько похожих автоматизаций, а основную логику оставить нетронутой. Например, можно упростить создание уведомлений о начинающихся осадках. “for” — это время, в котором должен оставаться выбранный параметр, чтобы сработал триггер на превышение уровня осадков. Теперь, когда есть blueprint, мы можем написать автоматизацию с меньшим количеством логики.
Создадим уведомления о начале осадков. Мы смогли вынести часть функциональности в отдельный файл. В подобных случаях, когда со временем появляется похожий код, можно выносить часть логики в отдельный файл. Для большей полезности можно изменить шаблон и поменять action на повышение яркости для света в доме или закрытие штор. В бэкап попадает весь каталог /config, а также все установленные расширения. С любого бекапа можно восстановить состояние системы на момент его создания. Можно настроить создание резервных копий в Google Drive: После этих манипуляций мы получаем регулярное создание бекапов, важность которых сложно переоценить.  
NodeMCU Так как умного градусника у меня нет, а температуру измерять хочется, воспользуемся ESP8266.
Сначала установим интеграцию ESPHome из официального списка интеграций. Для каждого микроконтроллера, используемого в системе, требуется создать файл с подобным содержанием. esphome/home_params.yaml Проинициализируем контроллер. Подключимся к WiFi По умолчанию используются секреты только от ESPHome. А для того, чтобы подгрузить секреты из HA, можно создать отдельный файл, где мы заинклудим эти секреты. Теперь подключим data pin (обычно это средняя нога) термометра к D2 порту, дадим на него питание и землю. Потом создаём сам термометр (DHT11) и две переменные, которые будем отслеживать в HA. Дальше нужно скомпилировать прошивку и загрузить на контроллер. Если он подключен напрямую к Raspberry Pi, то мы увидим его на /dev/ttyUSB0 и сможем загрузить прошивку в первый раз. Все последующие обновления можно загружать по воздуху. А если в списке устройства не видно, то можно скачать прошивку и воспользоваться ESPHome-Flasher.  Загружаем прошивку.  Если все заработало, то в Developer Tools мы увидим созданные переменные.  По умолчанию в HA используется SQLite, и сброс данных на диск происходит часто (каждую секунду). Это может привести в скором времени к выходу из строя SD карточки на малинке (если сервер стоит на ней). Чтобы продлить срок службы карточки, скажем HA, что нужно записывать на диск раз в commit_interval и исключить некоторые сущности, которые мы не хотим отслеживать на длинном временном промежутке (или вообще не хотим отслеживать). Если мы хотим использовать СУБД, отличную от SQLite, то можно сделать один из следующих пунктов на выбор: Чтобы отслеживать остаток свободной памяти, загруженность процессора или скорость Интернет соединения, мы можем добавить мониторинг показателей системы.

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

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


Главный экран Что дальше? Можно добавить HACS (сборник UI компонентов и даже целых интеграций от коммьюнити, пригодится при использовании Яндекс Станции) и установить несколько UI элементов. Можно интегрировать умную колонку или телевизор и включать их по определенному условию. Вариантов апгрейда бесконечное множество. Успехов в автоматизации! Студент Computer Science