- Способы настройки удаленного доступа к Home Assistant
- Реальный статический ip адрес
- Реальный динамический ip адрес
- Серый ip адрес — vpn/ssh туннель
- Серый ip адрес — использование сервиса роутера Keenetic
- Серый ip адрес — использование TOR
- Серый ip адрес — использование ZeroTier
- Серый ip адрес — nabucasa.com
- Windows
- Install Home Assistant Operating System
- Download the appropriate image
- Create the Virtual Machine
- Hypervisor specific configuration
- Start up your Virtual Machine
- Install Home Assistant Core
- Install dependencies
- Create an account
- Create the virtual environment
- Сказ о том, как я Home Assistant настраивал
- Установка
- Отслеживание устройств
- С помощью Xiaomi Router Mi4A
- С помощью GPS
- Создание системы отслеживания через роутер
- Освещение
- Утренние (или нет) погодные оповещения
- Добавим blueprints
- Бэкапы
- Немного оптимизации
- Отслеживание системных параметров
- Заключение
Способы настройки удаленного доступа к Home Assistant
Итак, я поставил сервер Home Assistant. Находясь в одной WiFi сети я этим сервером я могу на него заходить, включать-выключать свет, смотреть температуру, и делать все то зачем и нужен HA.
Но, если я ушел, то все, — доступа к серверу нет. А хочется иметь возможность удаленно управлять домашним HA. Чтобы можно было из любого места где есть интернет делать все то же самое что можно делать находясь рядом с сервером. Например, задача, удаленно включать обогрев. Чтобы приезжаешь, а уже тепло.
Перед тем как строить удаленный доступ для Home Assistant, я решил выяснить какие вообще есть способы удаленно заходить на сервер HA. Чтобы понять какой способ лучше всего подходит в моей ситуации.
Я знаю про такие варианты. Вполне возможно что есть еще какие-то способы как можно удаленно заходить на сервер HA (если вы о них знаете, напишите, пожалуйста на ivan@bessarabov.ru, я дополню этот список).
- Реальный статический ip адрес
- Реальный динамический ip адрес, использование сервиса duckdns.org или подобного
- Серый ip адрес — vpn/ssh туннель до сервера с реальным статическим адресом
- Серый ip адрес — использование сервиса роутера Keenetic
- Серый ip адрес — использование TOR
- Серый ip адрес — использование сервиса nabucasa.com
Есть совершенно отличная телеграмм группа про Home Assistant. В этой группе я создал опрос о том кто какой способ использует, вот результаты:
(Когда я создавал этот опрос я еще не знал про сервис nabucasa.com, поэтому такого пункта в опросе нет)
Реальный статический ip адрес
Это самый простой и надежный способ сделать возможность удаленно заходить на свой сервер Home Assistant. Ваш провайдер интернета выделяет вам настоящий ip адрес к которому можно обращаться из интернета. Например, «74.125.232.228». И этот ip адрес не меняется, все время у вас именно такой адрес. Дальше вы на роутере настраиваете проброску портов. Например, в вашей сетей сервер HA живет на адресе http://192.168.1.30:8123 и вы настраиваете на роутере что если человек приходит на ваш реальный http://74.125.232.228:8123, то это все прокидывается на сервер HA http://192.168.1.30:8123 После такой настройки появляется возможность заходить на сервер HA снаружи.
Но лучше всего настройку на этом не закончить, а сделать чтобы доступ к серверу был по протоколу https, а не http. (При использовании http гораздо больше вероятности что у вас украдут логин-пароль для доступа к HA и злоумышленник получит доступ к вашему HA)
У разных провайдеров разные условия для получения реального статического ip адреса:
- Некоторые провайдеры дают реальный статический адрес бесплатно всем своим клиентам, просто платите за интернет, плюс при этом у вас есть реальный ip адрес
- Другие провайдеры предоставляют услугу «реальный ip адрес» за дополнительную плату
- А есть провайдеры, которые вообще не могут предоставить реальный ip адрес даже за дополнительные деньги
Итого. Если у вас уже есть реальный статический ip адрес, то вполне возможно что лучше всего вам настроить удаленный доступ к HA с помощью этого ip адреса.
Если провайдер ни при каких условиях вам не может выдать реальный статический ip адрес, то вы можете либо сменить провайдера, либо использовать какой-то другой способ для того чтобы настроить удаленный доступ.
Если же сейчас у вас нет реального ip адреса, но провайдер за дополнительные деньги может вам его выдать, то нужно думать, возможно стоит платить, либо использовать какой-то другой вариант.
Реальный динамический ip адрес
Некоторые провайдеры предоставляют своим клиентам реальный ip адрес, но этот адрес иногда меняется. Сегодня у вас реальный ip адрес «74.125.232.228», а завтра уже «74.125.232.4».
Точно так же как и в случае с реальным ip адресом вы пробрасываете порт на роутере. Плюс нужно настроить специальный софт, чтобы заходить снаружи не на айпишник (который меняется), а на специальное имя типа my-domain.duckdns.org. (благодаря софту это имя всегда указывает на тот реальный ip адрес, который у вас сейчас).
Провайдер либо дает реальный динамический ip адрес, либо предоставляет доступ в интернет как-то иначе. Я ни разу не слышал, чтобы можно было дополнительно купить услугу «Динамический реальный ip адрес».
Итого. Если провайдер вам выдает реальный динамический ip адрес, то, скорее всего, вам стоить настроить доступ к HA через duckdns.org.
Серый ip адрес — vpn/ssh туннель
В том случае если у вас нет реального ip адреса, то проброска порта на роутере не предоставит вам удаленный доступ в HA.
Но если у вас есть виртуалка на digitalocean.com или у другого облачного провайдера, то вы можете сделать следующее.
С сервера на котором у вам работает HA можно прокинуть туннель до виртулаки. Дальше вы будете заходить браузером на порт на виртуалке и при этом будете общаться с вашим сервером HA.
Итого. Если у вас нет реального ip адреса, но у вас есть сервер с реальным ip адресом, то этот вариант может вам подойти.
Серый ip адрес — использование сервиса роутера Keenetic
Если у вас есть роутер Keenetic, то вы можете использовать сервис, который идет вместе с этим роутером. Вы можете получить адрес в домене *.keenetic.pro или *.keenetic.link и настроить чтобы по этому адресу отвечал сервер Home Assistan, который живет у вас дома. Сервис бесплатный и это будет работать даже если у вас нет реального ip адреса (этот способ можно использовать и в том случае если у вас есть реальный ip адрес, но, на мой взгляд, если у вас реальный ip, то лучше использовать другой способ).
Серый ip адрес — использование TOR
Еще один вариант как можно получить доступ к серверу HA это использовать TOR. На сервере с HA нужно поднять и настроить специальный софт.
Как результат вы получите адрес вида «abcdef1234567890.onion» плюс специальный токен. Потом вам нужно установить на мобильный специальный ТОР браузер и после этого вы сможете заходить на ваш сервер удаленно.
Серый ip адрес — использование ZeroTier
Это внешний сервис. Существует специальный плагин который позволяет использовать этот сервис — https://community.home-assistant.io/t/home-assistant-community-add-on-zerotier-one/109091.
Серый ip адрес — nabucasa.com
Существует сервис nabucasa.com Можно использовать его для того чтобы удаленно заходить на свой сервер HA.
Сервис платный, стоит $5 в месяц. Но, насколько я понимаю, какая-то часть этих денег (а может быть и все) идет создателям Home Assistant, так что это хорошая идея поддержать разработчиков HA деньгами, чтобы они и дальше улучшали HA.
Windows
Install Home Assistant Operating System
Follow this guide if you want to get started with Home Assistant easily or if you have little to no Linux experience
Download the appropriate image
Create the Virtual Machine
Load the appliance image into your virtual machine software. (Note: You are free to assign as much resources as you wish to the VM, please assign enough based on your add-on needs)
Minimum recommended assignments:
All these can be extended if your usage calls for more resources.
Hypervisor specific configuration
- Create a new virtual machine
- Select “Other Linux (64Bit)
- Select “Use an existing virtual hard disk file”, select the VDI file from above
- Edit the “Settings” of the VM and go “System” then Motherboard and Enable EFI
- Then “Network” “Adapter 1” Bridged and your adapter.
- Create a new virtual machine in virt-manager
- Select “Import existing disk image”, provide the path to the QCOW2 image above
- Choose “Generic Default” for the operating system
- Check the box for “Customize configuration before install”
- Select your bridge under “Network Selection”
- Under customization select “Overview” -> “Firmware” -> “UEFI x86_64: …”.****
- Create a new virtual machine
- Select “Custom”, make it compatible with the default of Workstation and ESX
- Choose “I will install the operating system later”, select “Linux” -> “Other Linux 5.x or later kernel 64-bit”
- Select “Use Bridged Networking”
- Select “Use an existing virtual disk” and select the VMDK file above,
After creation of VM go to “Settings” and “Options” then “Advanced” and select “Firmware type” to “UEFI”.
- Create a new virtual machine
- Select “Generation 2”
- Select “Connection -> “Your Virtual Switch that is bridged”
- Select “Use an existing virtual hard disk” and select the VHDX file from above
After creation go to “Settings” -> “Security” and deselect “Enable Secure Boot”.
Start up your Virtual Machine
- Start the Virtual Machine
- Observe the boot process of Home Assistant Operating System
- Once completed you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or http://X.X.X.X:8123 (replace X.X.X.X with your ’s IP address).
With the Home Assistant Operating System installed and accessible you can continue with onboarding.
Install Home Assistant Core
This guide assumes that you already have an operating system setup and have installed Python 3.8 (including the package python3-dev ) or newer.
Install dependencies
Before you start make sure your system is fully updated, all packages in this guide are installed with apt , if your OS does not have that, look for alternatives.
Install the dependencies:
Create an account
Add an account for Home Assistant Core called homeassistant . Since this account is only for running Home Assistant Core the extra arguments of -rm is added to create a system account and create a home directory.
Create the virtual environment
First we will create a directory for the installation of Home Assistant Core and change the owner to the homeassistant account.
Next up is to create and change to a virtual environment for Home Assistant Core. This will be done as the homeassistant account.
Once you have activated the virtual environment (notice the prompt change to (homeassistant) [email protected]:/srv/homeassistant $ ) you will need to run the following command to install a required Python package.
Once you have installed the required Python package it is now time to install Home Assistant Core!
Start Home Assistant Core for the first time. This will complete the installation for you, automatically creating the .homeassistant configuration directory in the /home/homeassistant directory, and installing any basic dependencies.
You can now reach your installation via the web interface on http://homeassistant.local:8123 .
When you run the hass command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get “site cannot be reached” error when accessing the web interface. This will only happen for the first time, and subsequent restarts will be much faster.
Сказ о том, как я Home Assistant настраивал
Home Assistant — это популярная система умного дома, которая автоматизирует привычные бытовые процессы и работает на YAML файлах. В этой статье я расскажу, как настроить Home Assistant (далее HA), и что конкретно я использую в повседневной жизни. Это поможет вам избежать ошибок и быстрее продвинуться в изучении HA.
На Хабре уже есть статьи о HA (раз, два, три), но здесь я хочу рассказать об установке и настройке системы от начала до конца. От первого запуска сервера до полноценно работающей системы, которую потом можно улучшать и дорабатывать для себя.
Основной единицей в HA является интеграция — логика, которая описывает взаимодействие с умным устройством или внешним сервисом. Большая часть полезной нагрузки HA ориентировано на связку: умное устройство + интеграция или внешнее API + интеграция.
Набор моих интеграций
Железо, участвующее в статье:
- Микроконтроллер Esp8266, а также датчик температуры и влажности DHT11;
- Лампа Xiaomi Desk Lamp;
- Raspberry Pi 4B в 2GB версии, как сервер для HA (в дальнейшем буду ее называть малинкой);
- Xiaomi Router 4A .
Сервисы, которые будем использовать:
- OpenWeatherMap для получения погоды, температуры, влажности на улице и других метеопараметров;
- Telegram для создания системы уведомлений;
- Google drive для создания бекапов;
- SpeedTest для замеров скорости;
- А также OpenUV для замеров ультрафиолетового излучения и др.
Установка
Установка HA предельно проста:
- Записать образ HA на SD карточку (подробная инструкция с ссылками на скачивание для разных версий Raspberry Pi тут).
- Подключить питание и Ethernet к малинке
- Подождать несколько минут, пока система развернется в локальной сети на :8123 .
Также можно установить на уже имеющуюся систему с помощью Docker-compose:
А теперь разберем несколько сценариев использования.
Отслеживание устройств
Начнем с отслеживания устройств, с помощью которого мы можем фиксировать вход и выход носителей из дома.
Я предлагаю 2 способа отслеживания:
- с помощью роутера (у меня в наличии Xiaomi Router Mi4A),
- с помощью GPS.
В системе доступно много производителей роутеров. Для старых и не перечисленных в списке моделей можно использовать nmap (более подробно тут).
Если установить на телефон официальное приложение, HA по умолчанию создаст интеграцию, и в системе появится дополнительное устройство, которое можно отследить.
С помощью Xiaomi Router Mi4A
- Не требует никаких действий на устройстве, отслеживает всех в локальной сети.
- Если устройство не подключено к домашней сети, то устройство пропадает в пустоту, и на картах мы его не увидим.
- Иногда может сработать триггер выхода/входа из зоны, когда фактически девайс не покидает зону (можно попробовать решить расширением зоны).
С помощью GPS
- Точность работы сравнима с GPS трекером в телефоне.
- О телефоне можно узнать: процент заряда аккумулятора, заряжается устройство или нет, а также показатель состояния аккумулятора.
- Активно тратит заряд.
- Требует подключение Интернета.
- Для точного трекинга необходимо настроить SSL, чтобы телефон мог отправлять данные о местоположении из вне локальной сети.
- Требует дополнительных прав доступа к GPS, возможна утечка данных третьей стороне в будущем.
- На бюджетных телефонах, которые имеют свойство неожиданно менять местоположение GPS, возможны проблемы с выпадением из зоны.
Создание системы отслеживания через роутер
Трекинг через локальную сеть роутера требует настройки, в отличие от GPS отслеживания. Два вида трекинга можно комбинировать для повышения точности. Ниже можно заметить, что в моем случае отслеживание через роутер работает лучше, чем через GPS. Зеленая зона значит, что телефон внутри зоны, красная — вне зоны.
Результаты работы отслеживания (сверху — роутер, снизу — GPS)
Можно подключиться через плагин SSH в VS Code, но получить доступ к проводнику в данный момент мне было удобнее. Поэтому, добавим сетевое расположение.
Нажмем обзор, найдем каталог config (мы в основном будем редактировать его) и выберем его как сетевую папку.
Дальше мы можем перейти в созданную папку и открыть ее через редактор.
После перезагрузки HA мы можем увидеть, что у нас появился новый глобальный объект device_tracker и наши устройства в нем.
Трекинг устройств через роутер
Освещение
Теперь, когда мы умеем отслеживать пользователя, мы можем включать и выключать определенные лампочки с учетом информации о его местоположении.
Для этого необходимо произвести действие по определенному событию. В этом нам помогут автоматизации.
Теперь импортируем в наш основной файл весь каталог automation — так нам будет удобнее при написании следующих автоматизаций.
Для того, чтобы получить адаптивное освещение в зависимости от времени суток, нужно настроить цветовую температуру. Это удобно сделать внутри блока switch. Тут важно понимать, что пока данный switch включен, изменить параметры температуры будет невозможно (через interval минус время_с_прошлого_обновления лампа примет старые параметры).
Здесь вы найдете больше про динамическую цветовую температуру (flux в терминологии HA). А если вам интересна тема адаптивного освещения, на Хабре есть отличная статья по этому поводу.
Для того, чтобы не разглашать всем секретные данные, создадим еще secrets.yaml . Туда мы сложим все данные, которые не должны попасть в публичный доступ. Для использования переменных из этого файла используем !secret.
В итоге у нас имеется Telegram бот, готовый к отправке сообщений.
Утренние (или нет) погодные оповещения
Теперь, когда у нас есть настроенный сервис уведомлений и погодная интеграция, мы можем сделать утренние оповещения о погоде.
Создаем новый файл автоматизации, и начинаем писать логику.
Пишем переменную, которая будет отвечать за срабатывание оповещений только по будням. Если он true — то в выходные оповещений не будет.
И подключаем в основном конфиг файле.
Добавим blueprints
Теперь небольшое лирическое отступление в виде рассказа о написании blueprints на примере уведомлений.
В данном случае я бы перевел blueprints не как чертежи, а как шаблоны или заготовки. Их удобнее использовать, если нужно написать несколько похожих автоматизаций, а основную логику оставить нетронутой.
Например, можно упростить создание уведомлений о начинающихся осадках.
“for” — это время, в котором должен оставаться выбранный параметр, чтобы сработал триггер на превышение уровня осадков.
Теперь, когда есть blueprint, мы можем написать автоматизацию с меньшим количеством логики.
Создадим уведомления о начале осадков.
Мы смогли вынести часть функциональности в отдельный файл. В подобных случаях, когда со временем появляется похожий код, можно выносить часть логики в отдельный файл.
Для большей полезности можно изменить шаблон и поменять action на повышение яркости для света в доме или закрытие штор.
Бэкапы
В бэкап попадает весь каталог /config , а также все установленные расширения. С любого бекапа можно восстановить состояние системы на момент его создания.
Можно настроить создание резервных копий в Google Drive:
- Скопировать ссылку https://github.com/sabeechen/hassio-google-drive-backup и зайти в HA (также можно прочитать подробную инструкцию в ReadMe репозитория по ссылке)
- Добавить ссылку как кастомный репозиторий в Supervisor’е через UI.
После этих манипуляций мы получаем регулярное создание бекапов, важность которых сложно переоценить.
NodeMCU
Так как умного градусника у меня нет, а температуру измерять хочется, воспользуемся ESP8266.
Сначала установим интеграцию ESPHome из официального списка интеграций.
Для каждого микроконтроллера, используемого в системе, требуется создать файл с подобным содержанием.
Подключимся к WiFi
По умолчанию используются секреты только от ESPHome. А для того, чтобы подгрузить секреты из HA, можно создать отдельный файл, где мы заинклудим эти секреты.
Теперь подключим data pin (обычно это средняя нога) термометра к D2 порту, дадим на него питание и землю. Потом создаём сам термометр (DHT11) и две переменные, которые будем отслеживать в HA.
Дальше нужно скомпилировать прошивку и загрузить на контроллер. Если он подключен напрямую к Raspberry Pi, то мы увидим его на /dev/ttyUSB0 и сможем загрузить прошивку в первый раз. Все последующие обновления можно загружать по воздуху. А если в списке устройства не видно, то можно скачать прошивку и воспользоваться ESPHome-Flasher.
Если все заработало, то в Developer Tools мы увидим созданные переменные.
Немного оптимизации
По умолчанию в HA используется SQLite, и сброс данных на диск происходит часто (каждую секунду). Это может привести в скором времени к выходу из строя SD карточки на малинке (если сервер стоит на ней). Чтобы продлить срок службы карточки, скажем HA, что нужно записывать на диск раз в commit_interval и исключить некоторые сущности, которые мы не хотим отслеживать на длинном временном промежутке (или вообще не хотим отслеживать).
Если мы хотим использовать СУБД, отличную от SQLite, то можно сделать один из следующих пунктов на выбор:
- Установить соответствующий аддон для перехода на MariaDB.
- Использовать существующую реляционную базу данных на удаленной машине, если указать строку для подключения в параметр db_url .
Отслеживание системных параметров
Чтобы отслеживать остаток свободной памяти, загруженность процессора или скорость Интернет соединения, мы можем добавить мониторинг показателей системы.
При желании можем создать автоматизацию, которая при критических показателях будет отправлять уведомление о необходимости принятия мер.
Также мы можем посмотреть Uptime сервера.
Заключение
- Простая установка и настройка, не требующая знания программирования.
- Большое коммьюнити — вопросов на форуме много, ответов тоже хватает.
- Огромное количество готовых интеграций со сторонними сервисами — скорее всего не придется писать свою интеграцию руками.
- Достаточно сложно отлаживать систему. Если action можно запустить программно в обход триггера, то триггер тестировать уже сложнее.
В итоге мы создали несложную систему умного дома, которую каждый может расширить покупкой новых устройств или написанием своих продуманных и продвинутых автоматизаций. По этой ссылке можно найти полную версию моих автоматизаций дома.
Главный экран
Что дальше? Можно добавить HACS (сборник UI компонентов и даже целых интеграций от коммьюнити, пригодится при использовании Яндекс Станции) и установить несколько UI элементов. Можно интегрировать умную колонку или телевизор и включать их по определенному условию. Вариантов апгрейда бесконечное множество.