The xiaomi
platform offers presence detection by looking at connected devices to a Xiaomi router.
Setup
To use an Xiaomi router in your installation, add the following to your configuration.yaml
file:
# Example configuration.yaml entry
device_tracker:
- platform: xiaomi
host: YOUR_ROUTER_IP
password: YOUR_ADMIN_PASSWORD
Configuration Variables
host string Required
The IP address of your router, e.g., 192.168.0.1
.
username string (Optional, default: admin)
The admin username.
password string Required
The password for the admin account.
See the device tracker integration page for instructions how to configure the people to be tracked.
Compatibility test
To ensure that your router is compatible, navigate to http://YOUR_ROUTER_IP/api/misystem/devicelist
.
You should see a listing of the device currently connected to your router.
However, some users report that even when the previous URL does not work, they have been able to integrate their Mi Router 3 in Home Assistant. E.g., some users with the Mi Router 3 and firmware version 2.10.46 Stable have integrated their routers successfully and an alternative URL to test integration with is http://YOUR_ROUTER_IP/cgi-bin/luci/api/misystem/devicelist
. Navigating to this page should show the {"code":401,"msg":"Invalid token"}
message.
Help us to improve our documentation
Suggest an edit to this page, or provide/view feedback for this page.
MiWiFi for Home Assistant
The component allows you to monitor devices and manage routers based on MiWiFi from Home Assistant.
❗ Supports routers with original or original patched MiWifi firmware
❗ On the modified firmware, not all functionality may work
More info
- Install
- Config
- Advanced config
- Automatically remove devices
- Advanced config
- Supported routers
- Check list
- Required
- Additional
- Action
- Summary
- Check list
- Conflicts
- Entities
- Services
- Calculate passwd
- Send request
- Events
- Luci response
- Performance table
- Example automation
- Device blocking
- Lighting automation
- Diagnostics
- FAQ
Supported routers
Many more Xiaomi and Redmi routers supported by MiWiFi
Check list
Required
xqsystem/login
— Authorization;xqsystem/init_info
— Basic information about the router;misystem/status
— Basic information about the router. Diagnostic data, memory, temperature, etc;xqnetwork/mode
— Operating mode. Repeater, Access Point, Mesh, etc.
Additional
misystem/topo_graph
— Topography, auto discovery does not work without it;xqsystem/check_rom_update
— Getting information about a firmware update;xqnetwork/wan_info
— WAN port information;xqsystem/vpn_status
— Information about vpn connection;misystem/led
— Interaction with LEDs;xqnetwork/wifi_detail_all
— Getting information about WiFi adapters;xqnetwork/wifi_diag_detail_all
— Getting information about guest WiFi;xqnetwork/avaliable_channels
— Gets available channels for WiFi adapter;xqnetwork/wifi_connect_devices
— Get information about connected devices;misystem/devicelist
— More information about connected devices;xqnetwork/wifiap_signal
— AP signal in repeater mode;misystem/newstatus
— Additional information about connected devices for force load mode.
Action
xqsystem/reboot
— Reboot;xqsystem/upgrade_rom
— Firmware update;xqsystem/flash_permission
— Clear permission. Required only for firmware updates;xqnetwork/set_wifi
— Update WiFi settings. Causes the adapter to reboot;xqnetwork/set_wifi_without_restart
— Update Guest WiFi settings.
❗ If your router is not listed or not tested, try adding an integration, it will check everything and give a link to create an issue. You just have to click Submit new issue
❗ If at the time of adding the integration only Router {ip} not supported
message is displayed, please create an issue with the message that the router is not supported, indicating the model of the router.
Summary
- 🟢 — Supported
- 🔴 — Not supported
- ⚪ — Not tested
Image | Router | Code | Required | Additional | Action |
---|---|---|---|---|---|
Xiaomi 5G CPE Pro | CB0401 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi Router 4A Gigabit V2 | R4AV2 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Home WiFi | RB08 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX6000 | RB06 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX5400 | RA74 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Gaming Router AX5400 | RB04 | 🟢🟢🟢🟢 | 🟢🟢⚪🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢⚪🟢🟢🟢 | |
Xiaomi Router AC1200 | RB02 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Router CR8808 | CR8808 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Mesh System AX3000 | RA82 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Router AX3200 | RB01 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX1800 | RA71 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX6S | RB03 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Router AX3000 | RA80 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX3000 | RA81 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi China Unicom WiFi 6 Router | CR6606 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Router AX9000 | RA70 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX5 | RA50 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi Router AX6000 | RA72 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX6 | RA69 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi Router 4 Pro | R1350 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi AIoT Router AC2350 | R2350 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AX5 | RA67 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi Router AX1800 | RM1800 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Xiaomi AIoT Router AX3600 | R3600 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Redmi Router AC2100 | RM2100 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi Router AC2100 | R2100 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢 | |
Mi Router Mesh | D01 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 4A | R4AC | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 4A Gigabit | R4A | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 4C | R4CM | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 4Q | R4C | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 4 | R4 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 3A | R3A | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 3C | R3L | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router HD | R3D | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router Pro | R3P | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 3G | R3G | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router 3 | R3 | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router R2D | R2D | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router Lite | R1CL | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router Mini | R1CM | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 | |
Mi Router R1D | R1D | 🟢🟢🟢🟢 | 🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🔴 | 🟢🟢🟢🟢🟢 |
Да, вам не послышалось, в этой статье будет установка Home Assistant на роутер Xiaomi, причём в операционную систему Debian, которую мы перед этим установим на маршрутизатор в chroot среду Entware )))
В предыдущем посте я уже рассказал, как установить MQTT брокер Mosquitto на роутер Xiaomi Mi WiFi Router 3G, но судя по практически отсутствующей нагрузке брокера на процессор и ОЗУ роутера, эта задачка оказалась для него не серьёзной. Что ж, нагрузим его как следует и установим на него Debian в chroot среду, ну а в Debian уже установим «полноценную» систему «Умного дома» — Home Assistant Core ))) Как она будет там работать (тормозить), это уже второй вопрос (см. ниже характеристики роутера) — мне же был интересен только сам процесс и факт запуска )))
Напомню, что есть у меня в коллекции Wi-Fi роутер «Xiaomi Mi Wi-Fi Router 3G» с прошивкой от Padavan, который после покупки роутера MikroTik остался не у дел. Точнее не работает больше, как полноценный роутер, стоя на страже интернета, а выполняет свою функцию как дополнительная точка доступа Wi-Fi, маршрутизатор на 2-а порта и сетевое файловое хранилище с диском на 500 Гб. Есть у этого роутера такая замечательная штука, как Entware — это репозиторий (хранилище), которая позволяет «проводить много экспериментов с ним» )))
Сначала я решил «покурить тему» в сети интернет на предмет наличия у кого-либо опыта и мануалов, описанного у меня в посте «баловства», но каких-либо толковых гайдов на эту тему не нашёл. Встретил только на 4pda такое сообщение:
Но способ описанный по ссылке из этого сообщения, мне показался уж очень «замысловатым» и есть подозрение, что он уже устарел на текущий момент. Хотя если в Entware сейчас есть пакеты python 3.8 и выше, которые требуются для установки Home Assistant Core с декабря 2020 года, то способ тоже может быть рабочим. Я не проверял.
Итак, много слов — ближе к делу )))
Алгоритм (последовательность) установки на роутер Xiaomi Mi WiFi Router 3G операционной системы Debian в chroot среду, а затем системы «Умного дома» — Home Assistant Core, у нас такая:
Компилируем (собираем) скриптом PROMETHEUS самую свежую прошивку от Padavan. Я выбрал репозитарий Alxdm.
После прошивки и настройки роутера, развёртываем Entware на своём внешнем носителе. (Рекомендую использовать жесткий диск, ибо ресурс флеш-карт не большой. У меня флешка на 128 Гб прожила только три года).
Подключаемся через PuTTY по SSH к роутеру.
Для получения списка и обновления новых пактов, выполните:
# opkg update
# opkg upgrade
Запускаем скрипт установки службы Debian 8 на маршрутизаторы MIPS замечательного человека (нашего соотечественника) Александра Рыжова. Судя по всему он специализируется на Keenetic, но его скрипт замечательно отрабатывает и на Xiaomi Mi WiFi Router 3G. Среду Debian 8 — debian_clean.tgz устанавливающуюся в скрипте, собирал он сам и расположена она на его сетевом ресурсе. Если не доверяете, то можете собрать свою, например уже среду Debian 10 по его же инструкции. 😉
Я не заморачивался и пошёл следующим простым путём:
# cd /opt
# wget --no-check-certificate https://raw.githubusercontent.com/DontBeAPadavan/chroot-debian/master/install.sh
# sh install.sh
Теперь у вас на роутере есть Debian 8 — радуйтесь и хвалитесь друзьям )))
Если что-то пошло в установленной системе Debian у вас нет так, то не переживайте — это легко поправимо — ваш роутер не пострадает от лёгких экспериментов )))
# cd /opt
# /opt/etc/init.d/S99debian stop
# rm -fr debian
# rm /opt/etc/init.d/S99debian
# sh install.sh
Теперь подключаемся через PuTTY по SSH к Debian:
IP — локальный адрес вашего роутера
Порт: 65022 (потом можете сменить)
Логин: root
Пароль: debian (потом можете сменить)
Обновим систему Debian::
Для получения списка новых пактов, выполните:
# apt-get update
Для выполнения обновления пакетов, выполните:
# apt-get upgrade
# apt-get install transmission-daemon
# echo 'transmission-daemon' >> /chroot-services.list
Последняя команда (в качестве примера) добавляет передачу в список служб Debian, которая запускается во время загрузки. transmission-daemon это имя сценария из /etc/init.d/<name>.
Установка Home Assistant на роутер Xiaomi
Если вы это делаете сейчас, то надеюсь для эксперимента, как я, а не на полном серьёзе, ибо «Умный дом» на роутере, ну такое себе ; -)) Ресурсов хватит на мониторинг десятка датчиком и управления несколькими выключателями…, что-то серьёзное не получится или будет работать с жёсткими тормозами. Имейте это ввиду!
Устанавливаем необходимые нам пакеты для питона стандартным способом:
# apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5
Проверяем версию python:
# python3 --version
Не порядок! Так дело не пойдёт, с декабря 2020 года для установки Home Assistant Core нужен python3.8 или версии порядком выше, устанавливаем его любым удобным вам способом, например:
Устанавливаем недостающие библиотеки:
# apt install build-essential libncurses5-dev libgdbm-dev libnss3-dev libsqlite3-dev libreadline-dev curl libbz2-dev
Ставим пакет wget:
# apt install wget
Скачиваем последую версию Python с официального сайта:
# wget https://www.python.org/ftp/python/3.9.1/Python-3.9.21.tgz
Распаковываем архив:
# tar xzf Python-3.9.1.tgz
Устанавливаем (собираем):
# cd Python-3.9.1
# ./configure --enable-optimizations
# make altinstall
Долго ждём завершения…. (~ 01:30 часа)
Здесь на пару часиков можно идти пить чай…. 😀
И ещё раз подумать — действительно ли вам это нужно…? Может просто купить «Raspberry Pi 4 b» или поставить «простенький сервер» для своего «Умного дома»? Кстати в качестве него может выступать например Nettop, как у меня:
Почитайте пока на эту тему мой пост Простая установка Home Assistant Supervised на Debian | Kali Linux на Неттоп (домашний сервер), Ноутбук, Десктоп… или даже VirtualBox
Если хотите просто протестировать систему, то можно поставить Home Assistant Core или Home Аssistant Supervised на бесплатный VPS — сервер от Oracle, вариантов, отличных от описанного в этом посте, в лучшую сторону — множество…
А тем временем роутер у меня стойко держал нагрузку:
И за один час + 25 минут у меня наконец собрался Python-3.9.1:
Устанавливаем Home Assistant Core:
# cd
Создаём пользователя homeassistant:
# useradd -rm homeassistant
Создадим папку homeassistant в папке srv:
# cd /srv
# mkdir homeassistant
и назначим её владельцем пользователя homeassistant:
# chown homeassistant:homeassistant homeassistant
Создание и изменение виртуальной среды (вводите лучше построчно):
# cd /srv/homeassistant
# python3.9 -m venv . (пробел и точка нужна)
# source bin/activate
Устанавливаем необходимый пакет Python:
# python3 -m pip install wheel
Устанавливаем Home Assistant Core:
# pip3 install homeassistant
Опять идём пить чай или кофе 😀
Где-то через час возвращаемся к терминалу и вводим последнюю команду, которая создаёт каталог конфигурации и установит все основные зависимости:
# hass
Ещё где-то через час… 😀 😀 😀 пробуем зайти по адресу ipaddress:8123 (ipaddress вашего роутера) в браузере, где должна открыться такая страничка. Вводим свои данные (регистрируемся) и настраиваем/тестируем систему….
Проверяем, что у нас установилась свежая версия системы Home Assistant Core (http://ipaddress:8123/config/info):
Папка с конфигами лежит по пути — /opt/debian/root/.homeassistant
Можно открывать и редактировать, например через WinSCP
Закинем в конфиг несколько сенсоров для проверки работоспособности с рабочей системы Home Assistant:
Перезапустим Home Assistant и понаблюдаем за поведением ЦП и ОЗУ нашего роутера.
«Пациент скорее жив, чем мёртв» 😀
Ну что ж, оставим систему для экспериментов на недельку другую и посмотрим, как она там будет жить ))
В заключении несколько примечаний, которые могут пригодится в дальнейшем:
Для обновления Home Assistant (а они выходят регулярно) нужно ввести в терминале Debian эти команды:
# cd /srv/homeassistant
# source bin/activate
# python3 -m pip install --upgrade homeassistant
И набраться терпения на пару часиков 😀
После установки обновления и/или правки конфигов нужно перезапустить сервер, например из веб-интерфейса: Настройки → Сервер → Перезапустить
Если после перезапуска роутера у вас «не стартует Debian», то добавляем задержку в веб-интерфейсе роутера, следуя по пути: «Персонализация» — «Скрипты» — «Выполнить после полного запуска маршрутизатора«, например 20 секунд:
sleep 20
/opt/etc/init.d/S99debian start
Спасибо Дмитрию за эту подсказку 😉
Ну, и само собой, необходимо добавить Home Assistant в автозапуск.
Можно добавить по аналогии старта Debian:
sleep 20
chroot /opt/debian /srv/homeassistant/bin/hass -c "/root/.homeassistant"
На этом у меня Ф С Ё ! )))
Недавно приобрел новый роутер с WiFi6 взамен своему старому микротику, который даже не умел 5G. Не то, чтобы микротик плохо работал, но захотелось обновиться. Роутер нравится, покрытие сети и скорость улучшились, например ESP, которая находится в самой дальней от роутера точке перестала отваливаться. Живу в двушке, 63 м2, роутер стоит примерно посередине. Работает в режиме точки доступа, так как в качестве входа из Интернет использую Cisco ASA5505.
На микротике отлично работал штатный devicetracker. На присутствие или отсутствие жильцов квартиры завязаны автоматизации по свету, музыке и безопасности. Но на xiaomi штатный devicetracker не заработал. Я расстроился и стал мониторить тему на openwrt.org, но прогресса по портированию прошивки пока нет.
Вышел из ситуации с помощью linux bash и MQTT Device Tracker
Данный способ будет работать на любом роутере с линуксом на борту и доступом по ssh (или телнет).
Для начала необходимо получить доступ к ssh. По состоянию 06.08.2020 в крайней прошивке 1.0.336 такая возможность есть.
Настройка роутера вне темы данной статьи, IP у роутера 10.5.254.11/24.
Любым браузером логинимся в роутер. Попадаем на следующий адрес:
http://10.5.254.11/cgi-bin/luci/;stok=45dcadc532a5h2f99a365dde74512384/web/home#router
Нас интересует набор символов после stok= до /web (выглядит примерно так 45dcadc532a5h2f99a365dde74512384), это токен, меняется от сессии к сессии. Для получения доступа по SSH переходим последовательно по следующим адресам (меняем токен и IP на свои):
http://10.5.254.11/cgi-bin/luci/;stok=<TOKEN>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h;nvram set ssh_en=1; nvram commit; http://10.5.254.11/cgi-bin/luci/;stok=<TOKEN>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h;sed -i ‘s/channel=.*/channel=\»debug\»/g’ /etc/init.d/dropbear; http://10.5.254.11/cgi-bin/luci/;stok=<TOKEN>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h;/etc/init.d/dropbear start; http://10.5.254.11/cgi-bin/luci/;stok=<TOKEN>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h; echo -e ‘admin\nadmin’ | passwd root;
Можно логиниться в роутер по ssh, логин root, пароль admin. Пароль рекомендую поменять командой passwd.
Для захода с сервера HA на ssh роутера без пароля генерируем ключ и вписываем его в файл с ключами ssh на роутере (за сервис ssh ответственен демон dropbear).
На сервере из под пользователя, с правами которого будем запускать скрипт даем команды:
ssh-keygen ssh root@10.5.254.11 «tee -a /etc/dropbear/authorized_keys» < /home/USER/.ssh/id_rsa.pub
Не забываем поменять адрес роутера и имя пользователя. Вторая команда запросит пароль на роутер.
После этого можно заходить ssh root@10.5.254.11 без пароля.
У роутера несколько беспроводных сетевых интерфейсов, нас интересуют два wl0 и wl1. Один отвечает за сеть 5g, второй за сеть 2,4g. Лично мне, надо отслеживать 3 устройства (телефоны), их мак адреса я знаю, одно работает по 2,4g и 2 работают по 5g.
На сервере с HA пишим скрипт:
#!/bin/bash kira_present=`ssh root@10.5.254.11 ‘iwinfo wl1 assoclist’ | grep -ic 90:2B:D2:09:73:0E` /usr/bin/mosquitto_pub -h 10.5.254.100 -r -u homeassistant -P ПАРОЛЬ_ОТ_MQTT -m $kira_present -t location/kira oleg_present=`ssh root@10.5.254.11 ‘iwinfo wl0 assoclist’ | grep -ic C0:EE:FB:09:A5:31` /usr/bin/mosquitto_pub -h 10.5.254.100 -r -u homeassistant -P ПАРОЛЬ_ОТ_MQTT -m $oleg_present -t location/oleg irina_present=`ssh root@10.5.254.11 ‘iwinfo wl0 assoclist’ | grep -ic 94:65:2D:28:C2:13` /usr/bin/mosquitto_pub -h 10.5.254.100 -r -u homeassistant -P ПАРОЛЬ_ОТ_MQTT -m $irina_present -t location/irina exit 0
У меня за MQTT отвечает mosquito.
Скрипт стартую с помощью cron каждые 2 минуты. Для этого запускаем команду:
crontab -e
Вписываем строку и сохраняем:
*/2 * * * * /местонахождениескрипта
В Home Assistant в configuration.yaml добавляем следующее:
device_tracker: — platform: mqtt devices: kira_honor_mqtt: ‘location/kira’ oleg_op6_mqtt: ‘location/oleg’ irina_op3_mqtt: ‘location/irina’ qos: 1 payload_home: ‘1’ payload_not_home: ‘0’ source_type: router
Работает так:
Команда
iwinfo wl1 assoclist | grep -ic 90:2B:D2:09:73:0E
Выводит список устройств подключенных к сети и грепом ищется соответствие с мак адресом, если есть соответствие, то при наличии ключа -с в команде grep выводится количество строк с совпадениями, но так как мак адреса уникальны (если вы их сами не меняли на одинаковые для каких-то своих целей), в выводе будет или 1 при наличии устройства или 0 при отсутствии, что и указано в конфиге в HA:
payload_home: ‘1’
payload_not_home: ‘0’
Если обновить прошивку роутера доступ к ssh слетит, так что пока не убежусь что в новой прошивке есть возможность получить доступ по ssh обновляться не буду.
Время на прочтение
11 мин
Количество просмотров 135K
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 к малинке
- Подождать несколько минут, пока система развернется в локальной сети на
<ip адрес малинки>:8123
.
Также можно установить на уже имеющуюся систему с помощью Docker-compose:
version: '3'
services:
homeassistant:
container_name: homeassistant
image: homeassistant/raspberrypi4-homeassistant:stable
volumes:
- /PATH_TO_YOUR_CONFIG:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
network_mode: host
А теперь разберем несколько сценариев использования.
Отслеживание устройств
Начнем с отслеживания устройств, с помощью которого мы можем фиксировать вход и выход носителей из дома.
Я предлагаю 2 способа отслеживания:
- с помощью роутера (у меня в наличии Xiaomi Router Mi4A),
- с помощью GPS.
В системе доступно много производителей роутеров. Для старых и не перечисленных в списке моделей можно использовать nmap (более подробно тут).
Если установить на телефон официальное приложение, HA по умолчанию создаст интеграцию, и в системе появится дополнительное устройство, которое можно отследить.
С помощью Xiaomi Router Mi4A
Плюсы
- Не требует никаких действий на устройстве, отслеживает всех в локальной сети.
Минусы
- Если устройство не подключено к домашней сети, то устройство пропадает в пустоту, и на картах мы его не увидим.
- Иногда может сработать триггер выхода/входа из зоны, когда фактически девайс не покидает зону (можно попробовать решить расширением зоны).
С помощью GPS
Плюсы
- Точность работы сравнима с GPS трекером в телефоне.
- О телефоне можно узнать: процент заряда аккумулятора, заряжается устройство или нет, а также показатель состояния аккумулятора.
- Можно контролировать устройства (пользователей) не только на вход домой, но и на вход в любую из кастомных зон.
Минусы
- Активно тратит заряд.
- Требует подключение Интернета.
- Для точного трекинга необходимо настроить SSL, чтобы телефон мог отправлять данные о местоположении из вне локальной сети.
- Требует дополнительных прав доступа к GPS, возможна утечка данных третьей стороне в будущем.
- На бюджетных телефонах, которые имеют свойство неожиданно менять местоположение GPS, возможны проблемы с выпадением из зоны.
Создание системы отслеживания через роутер
Трекинг через локальную сеть роутера требует настройки, в отличие от GPS отслеживания. Два вида трекинга можно комбинировать для повышения точности. Ниже можно заметить, что в моем случае отслеживание через роутер работает лучше, чем через GPS. Зеленая зона значит, что телефон внутри зоны, красная — вне зоны.
Результаты работы отслеживания (сверху — роутер, снизу — GPS)
Редактирование конфигурационных файлов через VSCode
Можно подключиться через плагин SSH в VS Code, но получить доступ к проводнику в данный момент мне было удобнее. Поэтому, добавим сетевое расположение.
Нажмем обзор, найдем каталог config (мы в основном будем редактировать его) и выберем его как сетевую папку.
Дальше мы можем перейти в созданную папку и открыть ее через редактор.
router_device_tracker.yaml
platform: xiaomi
host: 192.168.31.1
password: !secret xiaomi_router_password
configuration.yaml
device_tracker: !include configs/router_device_tracker.yaml
После перезагрузки HA мы можем увидеть, что у нас появился новый глобальный объект device_tracker и наши устройства в нем.
Трекинг устройств через роутер
Освещение
Теперь, когда мы умеем отслеживать пользователя, мы можем включать и выключать определенные лампочки с учетом информации о его местоположении.
Для этого необходимо произвести действие по определенному событию. В этом нам помогут автоматизации.
automation/phone_tracker
- alias: Entering home
trigger:
platform: state
to: home
entity_id: device_tracker.mi9lite
action:
- service: light.turn_on
data:
entity_id: light.midesklamp1s_f86f
brightness: 35
color_temp: 350
- alias: Leaving home
trigger:
platform: state
to: not_home
entity_id: device_tracker.mi9lite
action:
- service: light.turn_off
entity_id: light.midesklamp1s_f86f
Теперь импортируем в наш основной файл весь каталог automation — так нам будет удобнее при написании следующих автоматизаций.
configuration.yaml
automation: !include_dir_merge_list automation
Пример работы:
https://www.youtube.com/watch?v=Sii4rBtXYVw
Для того, чтобы получить адаптивное освещение в зависимости от времени суток, нужно настроить цветовую температуру. Это удобно сделать внутри блока switch. Тут важно понимать, что пока данный switch включен, изменить параметры температуры будет невозможно (через interval
минус время_с_прошлого_обновления
лампа примет старые параметры).
Здесь вы найдете больше про динамическую цветовую температуру (flux в терминологии HA). А если вам интересна тема адаптивного освещения, на Хабре есть отличная статья по этому поводу.
configuration.yaml
switch:
- platform: flux
lights:
- light.midesklamp1s_f86f
name: Fluxer
start_time: '9:00'
stop_time: '0:00'
start_colortemp: 5000
sunset_colortemp: 3200
stop_colortemp: 2800
brightness: 25.5
disable_brightness_adjust: true # яркость будет константой
mode: mired # для не rgb ламп
transition: 30
interval: 30```
<!--</spoiler>-->
# Погода
По умолчанию в HA уже присутствует интеграция с погодным API от [Meteorologisk institutt](https://www.home-assistant.io/integrations/met/) (Норвежский метеорологический институт), но мы можем легко создать другую прямо через UI.
## Создание новой интеграции OpenWeatherMap
Переходим в config / Integration на UI , нажимаем на Add integration, и выбираем из списка OpenWeatherMap.

Вводим api_key, полученный на их сайте и нажимаем Submit. В итоге получим 19 сущностей, которые можем использовать для своих целей в автоматизациях.

*Сущности OWM (на скриншот попали не все 19)*
Таким же образом через UI можно создать интеграции к другим сервисам вроде SpeedTest, или OpenUV.
# Уведомления
Для настройки уведомлений можно использовать стандартные оповещения HA, отображаемые в боковом меню, уведомления на конкретных устройствах (нужно установленное приложение на девайсе), а также оповещения в сторонние сервисы.

*persistent_notification*
Альтернативный способ уведомлений - это уведомления в сторонние сервисы, например Telegram. Для начала нужно создать бота, получить его api_key (при создании отправят ключ) и chat_id, который можно найти в ответе внутри `result.chat.id` после запроса на https://api.telegram.org/bot{api_key}/getUpdates .
<!--<spoiler title="Ответ с Telegram API приходит пустой">-->
Такое иногда случается по разным причинам.
В таких случаях подходит другой способ получения chat_id - написать @getmyid_bot боту и скопировать себе user ID.
<br>

<!--</spoiler>-->
Простейшая настройка Telegram бота:
<!--<spoiler title="notification/telegram_bot.yaml">-->
- platform: polling
api_key: !secret telegram_api
allowed_chat_ids:- !secret telegram_chat_id
Для того, чтобы не разглашать всем секретные данные, создадим еще secrets.yaml
. Туда мы сложим все данные, которые не должны попасть в публичный доступ. Для использования переменных из этого файла используем !secret.
Пример секретов:
secrets.yaml
telegram_api: %api_key%
telegram_chat_id: %chat_id%
configuration.yaml
telegram_bot: !include notification/telegram_bot.yaml
В итоге у нас имеется Telegram бот, готовый к отправке сообщений.
Утренние (или нет) погодные оповещения
Теперь, когда у нас есть настроенный сервис уведомлений и погодная интеграция, мы можем сделать утренние оповещения о погоде.
Создаем новый файл автоматизации, и начинаем писать логику.
Пишем переменную, которая будет отвечать за срабатывание оповещений только по будням. Если он true — то в выходные оповещений не будет.
input_boolean.yaml
alarmweekday:
name: Weekdays Only
initial: off
icon: mdi:calendar
И подключаем в основном конфиг файле.
configuration.yaml
input_boolean: !include input_boolean.yaml
automation/morning_alarm.yaml
- alias: 'Wake Me Up'
trigger:
platform: time
at: input_datetime.weather_notification
condition:
condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmweekday # оповещение в выходные
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmweekday
state: 'off'
action:
service: telegram_bot.send_message
data: # тут
message: "{% if now().strftime('%H')|int < 7 %}
Доброй ночи,
{% elif now().strftime('%H')|int < 12 %}
Доброе утро,
{% elif now().strftime('%H')|int < 18 %}
Хорошего дня,
{% else %}
Хорошего вечера,
{% endif %}
сейчас на улице {{states('sensor.openweathermap_temperature')}}°C. "
Пример работы:
https://www.youtube.com/watch?v=vSmSbSd_f-Q
Добавим blueprints
Теперь небольшое лирическое отступление в виде рассказа о написании blueprints на примере уведомлений.
В данном случае я бы перевел blueprints не как чертежи, а как шаблоны или заготовки. Их удобнее использовать, если нужно написать несколько похожих автоматизаций, а основную логику оставить нетронутой.
Например, можно упростить создание уведомлений о начинающихся осадках.
blueprints/precipitation_start.yaml
blueprint:
name: Fallout start notification
domain: automation
input: # аргументы шаблона
precipitation:
name: Precipitation level
selector:
entity:
domain: sensor # только для ui, поможет создать автоматизацию, предоставляя только сенсоры в выпадающем списке
message_start:
name: Telegram message
default: "No message"
trigger: # условия срабатывания
- platform: numeric_state
entity_id: !input precipitation
above: 0.9
for:
minutes: "{{ states('input_number.minimum_time_for_stable_value')|int }}"
action:
- service: telegram_bot.send_message
data:
message: !input message_start
“for” — это время, в котором должен оставаться выбранный параметр, чтобы сработал триггер на превышение уровня осадков.
input_number.yaml
minimum_time_for_stable_value:
name: Minimum time for stable value
initial: 1
min: 0
max: 59
step: 1
Теперь, когда есть blueprint, мы можем написать автоматизацию с меньшим количеством логики.
Создадим уведомления о начале осадков.
automation/rain_start.yaml
- alias: 'Rainy is started'
use_blueprint:
path: homeassistant/fallout_start_notification.yaml
input:
precipitation: sensor.openweathermap_rain
message_start: "Похоже, дождь начинается. Уже накапало {{states('sensor.openweathermap_rain')}}мм."
automation/snow_start.yaml
- alias: 'Snow is started'
use_blueprint:
path: homeassistant/fallout_start_notification.yaml
input:
precipitation: sensor.openweathermap_snow
message_start: "Пошел снежок. Уже навалило {{states('sensor.openweathermap_snow')}}мм."
Мы смогли вынести часть функциональности в отдельный файл. В подобных случаях, когда со временем появляется похожий код, можно выносить часть логики в отдельный файл.
Для большей полезности можно изменить шаблон и поменять action на повышение яркости для света в доме или закрытие штор.
Бэкапы
В бэкап попадает весь каталог /config
, а также все установленные расширения. С любого бекапа можно восстановить состояние системы на момент его создания.
Можно настроить создание резервных копий в Google Drive:
- Скопировать ссылку https://github.com/sabeechen/hassio-google-drive-backup и зайти в HA (также можно прочитать подробную инструкцию в ReadMe репозитория по ссылке)
- Добавить ссылку как кастомный репозиторий в Supervisor’е через UI.
- Открыть его (Open Web UI) и следовать инструкциям по аутентификации с Google Drive
После этих манипуляций мы получаем регулярное создание бекапов, важность которых сложно переоценить.
Интерфейс бекапов
ESP
NodeMCU
Так как умного градусника у меня нет, а температуру измерять хочется, воспользуемся ESP8266.
Сначала установим интеграцию ESPHome из официального списка интеграций.
Для каждого микроконтроллера, используемого в системе, требуется создать файл с подобным содержанием.
esphome/home_params.yaml
Проинициализируем контроллер.
esphome:
name: home_params
platform: ESP8266
board: nodemcuv2
logger:
api:
ota:
Подключимся к WiFi
wifi:
ssid: !secret xiaomi_router_ssid
password: !secret xiaomi_router_password
По умолчанию используются секреты только от ESPHome. А для того, чтобы подгрузить секреты из HA, можно создать отдельный файл, где мы заинклудим эти секреты.
Теперь подключим data pin (обычно это средняя нога) термометра к D2 порту, дадим на него питание и землю. Потом создаём сам термометр (DHT11) и две переменные, которые будем отслеживать в HA.
sensor:
- platform: dht
model: DHT11
pin: D2
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 60s
Дальше нужно скомпилировать прошивку и загрузить на контроллер. Если он подключен напрямую к Raspberry Pi, то мы увидим его на /dev/ttyUSB0 и сможем загрузить прошивку в первый раз. Все последующие обновления можно загружать по воздуху. А если в списке устройства не видно, то можно скачать прошивку и воспользоваться ESPHome-Flasher.
Загружаем прошивку.
Если все заработало, то в Developer Tools мы увидим созданные переменные.
Developer Tools
Немного оптимизации
По умолчанию в HA используется SQLite, и сброс данных на диск происходит часто (каждую секунду). Это может привести в скором времени к выходу из строя SD карточки на малинке (если сервер стоит на ней). Чтобы продлить срок службы карточки, скажем HA, что нужно записывать на диск раз в commit_interval
и исключить некоторые сущности, которые мы не хотим отслеживать на длинном временном промежутке (или вообще не хотим отслеживать).
configs/recorder.yaml
commit_interval: 1500
purge_keep_days: 7
exclude:
domains:
- updater
- automation
entity_globs:
- sensor.miwifi_router*
entities:
- sensor.date
- sensor.date_time
- sensor.time
- sensor.openweathermap_forecast_time
configuration.yaml
recorder: !include configs/recorder.yaml
Если мы хотим использовать СУБД, отличную от SQLite, то можно сделать один из следующих пунктов на выбор:
- Установить соответствующий аддон для перехода на MariaDB.
- Использовать существующую реляционную базу данных на удаленной машине, если указать строку для подключения в параметр
db_url
.
Отслеживание системных параметров
Чтобы отслеживать остаток свободной памяти, загруженность процессора или скорость Интернет соединения, мы можем добавить мониторинг показателей системы.
sensors/system_monitor.yaml
- platform: systemmonitor
resources:
- type: disk_use_percent
arg: /
- type: memory_free
- type: memory_use_percent
- type: processor_use
- type: processor_temperature
- type: disk_free
arg: /
При желании можем создать автоматизацию, которая при критических показателях будет отправлять уведомление о необходимости принятия мер.
Также мы можем посмотреть Uptime сервера.
sensors/uptime.yaml
- platform: uptime
name: Time Online
configuration.yaml
sensor: !include_dir_merge_list sensors
Вариант представления на UI
Заключение
Плюсы HA
- Простая установка и настройка, не требующая знания программирования.
- Большое коммьюнити — вопросов на форуме много, ответов тоже хватает.
- Огромное количество готовых интеграций со сторонними сервисами — скорее всего не придется писать свою интеграцию руками.
Минусы HA
- Достаточно сложно отлаживать систему. Если action можно запустить программно в обход триггера, то триггер тестировать уже сложнее.
В итоге мы создали несложную систему умного дома, которую каждый может расширить покупкой новых устройств или написанием своих продуманных и продвинутых автоматизаций. По этой ссылке можно найти полную версию моих автоматизаций дома.
Главный экран
Что дальше? Можно добавить HACS (сборник UI компонентов и даже целых интеграций от коммьюнити, пригодится при использовании Яндекс Станции) и установить несколько UI элементов. Можно интегрировать умную колонку или телевизор и включать их по определенному условию. Вариантов апгрейда бесконечное множество.
Успехов в автоматизации!
Литература
- Документация HA