Вступление
Данный мануал составлен мной после нескольких недель штудирования форумов, для тех, кто захочет пройти моим путем. Критика приветствуется.
Выбор стека
Про Home Assistant (далее для краткости - HA) сказано было многое, и, на мой взгляд, это самая удачная система умного дома. По теме выбора можно почитать тут:
Почему HDD? Много раз на форумах писали, что малинка с Home Assistant на борту кушает SD карты по одной за год. Кроме того, HA еще и логи пишет не понятно до каких пределов. Так что никаких SD.
Оборудование в наличии
Raspberry Pi 4
HDD
Переходник SATA - USB (при необходимости)
Монитор
Клава
Ноут (комп) c возможностью записи SD карт. (У меня ноут под Windows 10)
Роутер для выхода в сеть
Варианты установки Home Assistant
Официальный сайт предлагает нам несколько способов установки Home Assistant:
Home Assistant Operating System для Raspberry Pi. Самый простой способ установки: залил образ и нет проблем. Все фичи в наличии. Рекомендован разработчиками. Минус - отсутствие полноценной системы.
Home Assistant Operating System (VM) для Linux. Поднимаем виртуальную машину. Качаем образ. Запускаем. Профит. Да, все фичи на месте. Рекомендован разработчиками. Минус - виртуальная машина более затратна для системы чем Docker. Впрочем, этот способ я не пробовал.
Home Assistant Container. Установка в контейнер Docker. Также рекомендован разработчиками. Минус - нет Supervisor.
Home Assistant Core. Устанавливаем окружение Python. Устанавливаем Home Assistant. Минус - нет Supervisor.
Home Assistant Supervised. Установка в контейнер Docker, но уже с Supervisor в комплекте. Вот что про это пишут разработчики:
Внимание! Этот способ запуска Home Assistant потребует всех ваших сил. У вас будут строгие требования, которым придется следовать. Если вы не понимаете зачем оно вам надо, используйте способы описанные выше.
Этот метод установки обеспечит полный функционал HA на обычной системе. Это значит, что все компоненты HA будут использованы за исключением Home Assistant Operating System. Пользователь сам ответственен, чтобы все требуемые компоненты были установлены и настроены. Список компонентов и их версии меняются со временем, а Home Assistant Supervised предоставляется как есть. И, вообще, мы принимаем багрепорты воспроизводимые только на свежеустановленном полностью обновленном Debian без дополнительных архивов.
Этот метод считается продвинутым и должен использоваться только если читающий - эксперт в управлении Linux, Docker и сетях. Приятно слышать.
Мы работаем только с Docker и ни с чем другим.
Дальше идет список требований. К нему вернемся в процессе установки.
Только вышеназванная версия Debian (на момент написания статьи это Debian Linux Debian 10 aka Buster (no derivatives)) поддерживается. Когда выходит новая версия Debian поддержка предыдущей прекращается в течение 4 месяцев. Если только новая версия не соответствует требованиям Supervisor.
Этот метод не будет работать если читающий где-то накосячит. Кстати, вот вам еще несколько дополнительных условий:
Эта система только для Home Assistant. Даже не думайте устанавливать еще какое-то ПО.
Читающий ответственен:
За установку и настройку ОС
За обновление компонентов, необходимых для Supervisor
За установку хоть чего нибудь, конфликтующего с Supervisor
За обновления безопасности
Время от времени требования к Supervisor меняются и читающий должен сам обновлять свою ОС и устанавливать недостающие компоненты
Заключение: Эксперт. Тебе будет непросто. Смирись.
Это наш путь.
Шаг 0. Первый контакт
Здесь и далее я буду подключать Raspberry через WiFi. Начнем с того, что пропишем в нашем домашнем DHСP сервере статический IP-адрес Raspberry. Это нужно для удобства, чтобы не выяснять каждый раз, как достучаться до малинки.
Вот официальный туториал как подружить Raspberry и WiFi.
Качаем образ Ubuntu от сюда. На данный момент это Ubuntu Server 20.04.2 LTS 64-bit. Заливаем на SD карту при помощи Balena Etcher. Вынимаем карту и ... снова вставляем откуда взяли. Это нужно, чтобы загрузочный сектор Ububuntu стал доступен в проводнике. Открываем файл network-config
и прописываем туда параметры WiFi. Должно получится что-то вроде:
version: 2
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
"сюда пишем название сети":
password: "сюда пишем пароль"
А теперь немного комментариев разработчиков:
Имя сети должно быть в кавычках
При первой загрузке Raspberry попытается присоединится к WiFi. Эта попытка обречена на провал. Но не расстраивайтесь, просто перезагрузите малинку
sudo reboot -h now
и все заработает.
Для этого нам и нужен монитор с клавой. И да, дефолтный логинubuntu
пароль такой же. Если выдается сообщение Login incorrect
значит нужно просто немного подождать и попробовать еще раз. Затем нам предложат задать свой супер-мега-сложный пароль и не отстанут, пока не сделаем это. Как только мы получили доступ к телу командной строке - перезагружаемся. Верный признак, что коннект есть - Ubuntu рапортует, что можно поставить несколько апдейтов. Узнать IP и MAC адрес малинки можно командой ip a
. А теперь идем в настройки роутера и прописываем статический IP дли MAC одноплатника. Как это сделать не скажу - здесь все индивидуально.
Шаг 1. Настройка загрузки с HDD
Обновляем систему чтобы все было по фен-шую.
sudo apt update
sudo apt upgrade -y
Теперь устанавливаем пакет для работы с загрузчиком sudo apt install rpi-eeprom
. На всякий случай перезагружаемся sudo reboot -h now
.
У загрузчика имеется три версии релиза (выдержка из оригинальной статьи):
default
- Обновляется для поддержки нового железа, исправления критических ошибок и регулярного обновления новых фичей, протестированных в релизеlatest
.
latest
- Обновляется, когда новые фичи прошли успешное бета-тестирование
beta
- Здесь тестируется все новое
Из вышесказанного понятно, что релизы проранжированы по степени новизны/стабильности.
На одном из форумов написано:
Будьте уверены, что используете последнюю версию релиза
latest
(он жеstable
). Если же нет, Вы не сможете загрузиться с USB. Не существуетdefault
(он жеcritical
) релиза с поддержкой загрузки по USB.
Как по мне, все нормально запустилось с default
ветки. По-видимому, на дату статьи релиз уже обновили.
Итак, делай раз: обновляем загрузчик до последней версии sudo rpi-eeprom-update -a
. Перезагружаемся sudo reboot -h now
.
Делай два: заливаем Ubuntu на USB (HDD) носитель. Как это сделать, описано в Шаге 0. Примечание: некоторые рапортуют о проблемах с питанием HDD при использовании переходника SATA-USB. Что с этим делать - думайте сами. Например, замените HDD на SSD. Лично у меня HDD Toshiba MK7575GSX нормально завелся.
Делай три: В загрузочном разделе (он всегда первый и отформатирован в FAT32) Находим файл vmlinuz
, распаковываем его в эту же директорию (я использовал 7-Zip) и переименовываем в vmlinux
. Идем в config.txt
, комментим строки чтобы было как-то так:
#[pi4]
#kernel=uboot_rpi_4.bin
#max_framebuffers=2
#[pi2]
#kernel=uboot_rpi_2.bin
#[pi3]
#kernel=uboot_rpi_3.bin
И дописываем, чтобы было как-то так:
[all]
arm_64bit=1
device_tree_address=0x03000000
kernel=vmlinux
initramfs initrd.img followkernel
Все. Больше здесь ничего ни трогаем, впрочем кому как нравится...
Делай четыре: прописываем настройки wi-fi как в шаге 0.
Делай пять. Идем сюда: https://github.com/raspberrypi/firmware/tree/master
и копируем себе репозиторий. Там есть такая зеленая кнопка Code
, а в ней Download ZIP
. В скаченном архиве идем в папку Boot
и копируем (с заменой конечно же!) файлы с расширением .dat
и .elf
в загрузочный раздел нашего USB носителя. Теперь USB готов к работе. Подключаем его к порту USB 3.0 (тот, что с синей полоской) чтобы быстрее работало. Пробуем загрузиться, и... надеюсь, что все заведется.
Траблшутинг: Лично у меня была проблема - не запускалась малинка после очередного обновления ядра Linux или чего-то такого. Но потом ребята с GitHub'а все пофиксили и стало ОК. Так что, если у вас что-то идет не так: либо нарушили какой-то пункт из описанных выше, либо ждем обновления ветки (кстати, можно перейти на релиз latest
и попробовать с него), либо повезет в любви. И еще, после обновления системы, выполняемого, например, командой sudo apt full-upgrade
Ubuntu перестанет запускаться до тех пор, пока в загрузочном секторе мы снова не распакуем vmlinuz
в vmlinux
.
Шаг 2. Устанавливаем зависимости
Разработчики требуют, чтобы в системе было установлено Docker, Systemd, NetworkManager, AppArmor. Sysstemd и AppArmor уже установлены в системе - по ним дополнительных действий не требуется.
Хотя пакет jq
отсутствует в официальных требованиях, без него установочный скрипт все-равно не запустится. С него и начнем. Выполняем sudo apt install jq
. Готово!
Теперь возьмемся за NetworkManager. Для начала устанавливаем его командой sudo apt install network-manager
. Добавляем в автозагрузку sudo systemctl enable NetworkManager
. Но просто установить и запустить его недостаточно. В настоящий момент есть две альтернативные системы управления сетью systemd-networkd и NetworkManager. По умолчанию в системе установлена первая, а нам нужен именно NetworkManager. Чтобы переключится на него идем в /etc/netplan
и редактируем файл конфигурации командой sudo vi /etc/netplan/50-cloud-init.yaml
. Примечание: у меня это 50-cloud-init.yaml
. Говорят, название может отличаться. Добавляем строку renderer: NetworkManager
следующей строкой за network:
. Обращаем внимание на отступы. В yaml отступы решают. Делаем sudo netplan generate
иsudo netplan apply
, перезагружаемся. Останавливаем systemd-networkd - он теперь больше не нужен -sudo systemctl stop systemd-networkd
и отключаем его от автозагрузкиsudo systemctl disable systemd-networkd
, перезагружаемся.
Приступаем к установке Docker. Далее взяты инструкции с официального сайта Docker.
Для начала установим зависимости, которые требует Docker sudo apt install apt-transport-https ca-certificates curl gnupg-agent \
software-properties-common
.
Добавляем официальный ключ Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
. Проверяем, что ключ добавился правильно командой sudo apt-key fingerprint 0EBFCD88
. В ответе должно быть 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
.
Добавляем официальный репозиторий Docker в систему.
sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) \
stable"
Обновляем репозитории sudo apt update
и устанавливаем Docker командой sudo apt install docker-ce docker-ce-cli containerd.io
. Проверяем, что Docker встал нормально командой sudo docker run hello-world
.
Шаг 3. Устанавливаем Home Assistant
И вот уже все готово, чтобы установить Home Assistant! Качаем установочный скрипт командой curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh
Но запускать его не спешим. А лучше открываем его через vi installer.sh
. Находим строчку и # Pull supervisor image
после нее вставляем sleep 20
, а затем вставляем еще одну строкуHASSIO_VERSION="latest"
. Переходим в режим суперпользователяsudo su
и запускаем скрипт bash installer.sh --machine raspberrypi4-64
. Ждем когда скрипт отработает до конца. Первая загрузка Home Assistant занимает некоторое время. Будьте терпеливы. Если все прошло нормально, достучаться до HA можно по адресу http://локальный ip малинки:8123. Не забудьте удалить rm installer.sh
он теперь не нужен.
Вот и все.
IRT
Сколько сложностей. Зачем вам кривая Ubuntu c проблемами вроде:
Это все не нужно, потому что давно уже есть нормальный чистый Debian под Raspberry Pi 4 (и 3):
raspi.debian.net/tested-images
Причем сейчас там появились сборки с Bullseye, что означает куда более современный софт в репах. Мои платы на этих образах работают уже полгода, обновляться можно сколько угодно безо всякого опасения, что все слетит, все стабильно железно.
Монитор с клавиатурой не нужно, все можно поставить в headless режиме, в файл /boot/firmware/sysconf.txt можно прописать свой ключ для SSH и спокойно все настраивать удаленно.
Если так сильно хочется подключать плату по Wi-Fi, то вставляем SSID и пароль в файл /etc/network/interfaces.d/wlan0:
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid my-network-ssid
wpa-psk s3kr3t_P4ss
Дальше уже дело вкуса, но зачем вам Supervisor? Я лично поставил HA в Docker, настроил автоматизацию, что при обновлении мне падает сообщение в Telegram вида:
Update available.
Home Assistant 2021.3.4 is available.
После чего, когда мне удобно, я захожу по SSH в Debian на плате и запускаю скрипт ./update-hass.sh:
docker pull homeassistant/home-assistant:stable
docker stop home-assistant
docker rm home-assistant
docker run --restart=always -d --name="home-assistant" -v /home/user/homeassistant/:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant:stable
docker image prune --force
Последняя строчка подчищает скачанные образы, docker pull выкачивает новый, но старый остается занимать место на диске, со временем может много накопиться старых образов.
Вот и все, то есть обновить контейнер с HA несложно, а что еще может Supervisor? Ставить дополнения к HA? Так дополнения это те же самые контейнеры Docker, можно и самому поставить, если хочется. Разве что для обновления HA через Web-интерфейс? Ну если вы столько мучались с Ubuntu на Raspberry, то и обновить докер-контейнер с HA не проблема.
Skywrtr
Я ставил Ubuntu Server на малинку и никаких проблем с ней не было. Причем ставил на USB-флешку с помощью Pi Imager и все заработало сразу, без всяких правок в загрузочном разделе.
При этом, непонятно, зачем автору так много действий для установки Docker, если он уже есть в стандартных репах Ubuntu.
Singrana
А вот можно тут по подробнее? Стянуть-то образ не сложно, а вот как правильно потом запустить дополнение? И что бы HASS его увидел?
Skywrtr
Прописать в конфиги Home Assistant. То есть в контейнере запускается отдельный сервис, будь то Mosquitto, MariaDB, ESPHome и т.д, а потом прикручивается в HA через конфиги. Некоторые подхватываются сами с помощью интеграций. Возни немногим больше, но зато прозрачнее, легче и понятнее в целом. Так что супервизор не нужен совершенно. Если создать себе соответствующий docker-compose.yml, чтобы все сервисы разом запускались, так вообще все просто будет.
Например, пишем что-то такое:
Singrana
Спасибо, попробую.
В частности вот это поставить github.com/alexmorbo/domru
Интеграции вроде как нету к этому
jo_b1ack
сколько таких статей уже? сотни… все одно из пустого в порожнее: скачайте образ, настройте сеть, поставте докер… Зачем эти статьи нужны если это все есть в официальной документации…
Лучше бы описали какой то юзкейс, который вы применили в ХА для решения какой-то задачи, и как оно повлияло в итоге на вашу жизнь. А эти установки образов никому не нужны… или люди настолько отупели, что не могут 2 раза клацнуть мышью.
shaggyone
Некоторое время прикидываю возможные кейсы. Вот что накопилось:
Пользуюсь уже давно. Очень полезная штука для домашней автоматизации — подсветка рабочей зоны на кухне, когда кто нибудь заходит на кухню. Делал 4 года назад, без намёков на HA и вообще умность. Имеет основной признак удачного решения — незаметность при обычных кейсов. Хочется только заменить датчик движения на датчик присутствия, ну и установить там, где покрытие у него будет получше.
Сделал недавно на базе HA:
1. управление Tion'ом. Платить десятку за их magic air нет никакого желания, ну и пульт на BTE, из соседней комнаты не достаёт. Благо один хороший человек с год назад расковырял протокол пульта, написал статью на хабр и к настоящему моменту интеграцию с HA сделал (хотя я свою на коленке сваял)
2. включение выключение верхнего света в комнатах, пока больше для понта, чем полезно.
Из того, что хочется:
1. датчики протечки и датчики дыма, которые сообщают о том,
2. датчики температура, влажность, CO2 по всей квартире, чтобы обстановку мониторить. Больше любопытства ради.
3. Попробовать интересные кейсы, вроде постепенного увеличения яркости лампы, чтобы имитировать рассвет, вроде пишут, что так проще просыпаться по утрам. Есть вариант купить филипсовскую лампу или китайский аналог, но не так интересно (и, если не зайдёт, по крайней мере не будет странный девайс с ограниченной полезностью глаза мозолить).
4. летом есть планы прикрутить к HA кондиционер
5. есть планы сделать управление местным освещением и кнопку «сделать хорошо».
6. если тяму хватит, переделать гирлянду, что висит на окне под zigbee, выкинуть режимы мне не нравятся и оставить те, что нравятся.
7. вечернее освещение в коридоре
8. главный выключатель, чтобы можно было по команде извне обесточить всю квартиру (кроме холодильника), при этом, чтобы включить можно было только вручную.
9. термостаты на батареи, с управлением по температуре в дальнем углу.
Собственно, все кейсы такие, что без этого можно жить и горя не знать, но почему бы и да.
yAndre
Почему регулярные статьи это хорошо
Потому что из-за регулярных обновлений появляются новые нюансы установки. И по доке полугодовой давности уже не сделать.
Юзкейс
Управление оборудованием в небольшой переговорной комнате.
По беспроводной кнопке — вкл, выкл, перегрузил системник с софтом для видеосвязи.
По датчику присутствия — отключил видео панели и отправил камеру в Mute или всё разбудил. Вкл/Выкл доп. свет.
И т.д. можно автоматизироваться до бесконечности