Вчера вышла новость. Ребята из Home Assistant заявили что установка HA в виде набора докер контейнеров под управлением супервизора более не поддерживается (ссылка).
Я устанавливал Home Assistant именно тем способом, который стал deprecated, поэтому я пошел думать как мне дальше жить с Home Assistant.
В итоге я даже рад что этот способ стал deprecated. После того как я обдумал что делать дальше, я понял что мне супервизор вообще не нужен. И это действие команды Home Assistant сподвигло меня полностью отказаться от супервизора, а запускать все нужные мне вещи с помощью docker-compose.
Я уже реализовал эту идею. Переделал свою инсталляцию HA на использование docker-compose. Супервизора у меня больше нет. У меня очень небольшая инсталляция Home Assistant, поэтому в моем случае это было просто.
В этом тексте я описываю что, как и зачем я делал. Это не руководство к действию что всем нужно делать именно так, это только рассказ о моем опыте.
Home Assistant можно установить несколькими разными способами. Самый простой способ — это скачать официальный образ специальной операционной системы в котором уже правильным способом существует HA. Этот образ ставится на хост и Home Assistant работает. Это способ никуда и не делся. Анонс про deprecated никак не влияет на этот способ установки — этот способ все еще официально поддерживается.
Плюс этого способа — он очень простой. Скачивается образ, заливается на носитель — компьютер загружается — все, Home Assistant работает.
Но у этого способа есть недостаток: очень ограниченная возможность делать что-то свое на операционной системе из этого образа.
Поэтому я использовал другой вариант установки:
Вот ровно этот скрипт установки и объявили deprecated.
Почему я ставил HA не в виде официального образа, на собственноручно установленную операционную систему? Во-первых, мне так удобнее. Эту операционную систему я понимаю, ту которую тащит с собой HA — я не понимаю. Удобно зайти, что-то там посмотреть-сделать. Кроме Home Assistant у меня на этой операционной системе еще и крутятся мои скрипты, с помощью которых у меня настроен удаленный доступ к HA (я делаю проброску ssh туннелей, подробнее о том как это настроено тут).
Home Assistant заработает на том что за деньги предоставляют удаленный доступ к инсталляции HA. Забавно что в моем случае то что задеприкейтили как раз используется для того чтобы не платить им деньги, а сделать удаленный доступ другим способом.
Супервизор для меня решает две задачи:
Супервизор HA это отдельный докер контейнер, который управляет другими контейнерами. Если на моем компьютере с HA выполнить команду "docker ps -a", то появится список запущенных контейнеров:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f8575bf6af7 homeassistant/armv7-hassio-supervisor "/init" 27 hours ago Up 27 hours hassio_supervisor
b4a1cb189587 dwelch2101/zigbee2mqtt-armhf:1.13.0 "/init ./run.sh" 7 days ago Up 7 days 0.0.0.0:8485->8485/tcp addon_7ad98f9c_zigbee2mqtt
c8896eb85798 homeassistant/raspberrypi3-homeassistant:0.109.0 "/init" 10 days ago Up 9 hours homeassistant
07e5228c90eb homeassistant/armv7-addon-mosquitto:5.1 "/run.sh" 3 weeks ago Up 3 weeks 0.0.0.0:1883-1884->1883-1884/tcp, 0.0.0.0:8883-8884->8883-8884/tcp addon_core_mosquitto
6f2ac7d1dd27 homeassistant/armv7-hassio-multicast:2 "/init" 3 weeks ago Up 27 hours hassio_multicast
679ba6c7d255 homeassistant/armv7-hassio-cli:25 "/init /bin/bash -c …" 3 weeks ago Up 3 weeks hassio_cli
63e8df3820de homeassistant/armv7-hassio-dns:9 "/init coredns -conf…" 3 weeks ago Up 27 hours hassio_dns
74d8df79e422 homeassistant/armv7-hassio-audio:14 "/init" 3 weeks ago Up 3 weeks hassio_audio
Тут видно:
Но кроме этих понятных для меня штук еще и работают вещи которые я совершенно не понимаю зачем нужны: * audio — зачем? у меня к этому компьютеру не подключены колонки, никакое аудио я на нем не играю * dns — а это зачем? почему не использовать данные о dns с хост машины
Я вполне могу запустить руками и сервер mosquitto и zigbee2mqtt. Мне не ясно зачем тащить все вот это которое делает непонятно что.
Есть и другая вещь, почему я рад отказаться от супервизора. Я тут недавно узнал что супервизор обновляется сам. Они выпустили версию с багом (тред про баг, а потом сами раскатили исправление.
В случае системы автоматизации я считаю что это неприемлемое поведение. Они сами заявляют local first, а тут что-то автоматом без моего ведома приезжает из облака. В случае HA я хочу контролировать что приходит с обновлениями и иметь возможность это не поставить если мне это не нравится.
Так что, все обдумав я решил перестать использовать супервизор докера, а запускать все самостоятельно.
Убираю из автозапуска:
root@raspberrypi:~# mv /etc/systemd/system/hassio-supervisor.service /root/
root@raspberrypi:~# mv /etc/systemd/system/multi-user.target.wants/hassio-supervisor.service /root/
Перезагружаю компьютер и убиваю все контейнеры:
root@raspberrypi:~# docker ps -a|perl -nalE '`docker rm -f $F[0]`'
И еще раз перезагружаюсь
Удивительно, но одна из самых сложных вещей в переезде на docker-compose это была установка docker-compose.
В итоге я успешно установил docker-compose с помощью команд:
root@raspberrypi:~# apt-get update && apt install -y python3-pip
root@raspberrypi:~# pip3 install docker-compose
Но до этого я пробовал еще несколько способов и там все шло совсем не так.
Через некоторое время я соорудил yaml файл с описанием всех контейнеров которые мне нужно запускать. Их всего 3:
Я положил этот файл в /root/ha/docker-compose.yaml
homeassistant:
container_name: homeassistant
image: homeassistant/raspberrypi3-homeassistant:0.109.0
volumes:
- /usr/share/hassio/homeassistant/:/config/
ports:
- "8123:8123"
restart: always
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:1.6.9
volumes:
- ./mosquitto_data/:/mosquitto/data/
ports:
- "1883:1883"
restart: always
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:1.13.0
volumes:
- ./zigbee2mqtt_data/:/app/data/
- /run/udev:/run/udev:ro
devices:
- /dev/ttyACM0:/dev/ttyACM0
restart: always
privileged: true
environment:
- TZ=Europe/Moscow
И еще там же лежат 2 скрипта
restart
docker-compose build; ./stop; docker-compose up -d
stop:
docker-compose stop; docker-compose rm -f
Тут у меня написано что Home Assistant использует данные из той же папки с которой раньше работал Home Assistant из супервизора, так что все что у меня было настроено в HA осталось без изменений.
Я запускаю этот контейнер стандартным способом: он живет в своей собственной сети и только порт 8123 проброшен наружу. Для моих целей достаточно такого способа запуска, но вполне возможно это этот вариант подойдет не всем. Если у вас есть какие-то проблемы с тем как HA общается с сетевыми устройствами, то, возможно, вот этот вариант решит ваши проблемы (при таком способе сеть в контенере точно такая же как на хосте):
homeassistant:
container_name: homeassistant
image: homeassistant/raspberrypi3-homeassistant:0.109.0
volumes:
- /usr/share/hassio/homeassistant/:/config/
net: "host"
restart: always
MQTT сервер работает со всеми настройками по умолчанию. Т.е. для того чтобы к нему подключится можно ввести любой логин-пароль (или вообще не вводить). В качестве первого подхода это нормально, но в будущем нужно будет перенастроить. От старого MQTT сервера тут ничего не осталось. В моем случае это не сильно страшно. MQTT в основном это "получил, передал и тут же забыл", потерялись только сообщения с флагом retain. В моем случае это было совершенно не критично.
Хуже всего с zigbee2mqtt. Кроме описания в docker-compose.yaml я еще написал конфиг /root/ha/zigbee2mqtt_data/configuration.yaml
homeassistant: true
permit_join: false
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://192.168.31.86:1883'
serial:
port: /dev/ttyACM0
disable_led: true
advanced:
channel: 25
device_options:
retain: true
devices: devices.yaml
groups: groups.yaml
Я не стал разбираться как перетащить старый конфиг zigbee2mqtt в мою новую инсталляцию, а просто переспарил все все устройства заново. У меня устройств мало, так что мне это подошло.
Плюс мне все равно нужно было это рано или поздно делать. Раньше у меня был выбран для zigbee канал по умолчанию 11, но сейчас ко мне едут несколько Konke кнопок. Они не могут работать на этом канале, поэтому я тут заодно и сменил канал, а это действие требует переспаривания.
Итак. раньше я использовал супервизор для двух вещей:
Сейчас чтобы обновить HA мне нужно поменять одну строчку в docker-compose.yaml файле и запустить ./restart (но чтобы HA был поменьше в дауне стоит сначала сделать docker pull на нужный образ)
У меня пропала возможность устанавливать аддоны в один клик. Но мне это и не особо нужно. Если нужно что-то поднять я вполне могу сделать это сам.
Зато настройка программ совершенно обычная (как-то я очень много времени провел пытаясь настроить аддон zigbee2mqtt прежде чем узнал что его настройка через аддон отличается от настройки в обычном режиме).
В итоге я даже рад что случилось это изменение. Это меня сподвигло к тому чтобы уйти от супервизора который мне и не нужен к запуску через docker-compose, который я понимаю и могу контролировать.
Несколько часов на переезд и и меня опять все работает. Даже, похоже, что это жрет немного меньше ресурсов (хотя это все неважно, раньше проц был загружен на 4%, сейчас на 2%, все то же самое).
Я только-только это сделал, и пока не пожил с этим. Вполне возможно что какие-то вещи я переделаю, но пока мне кажется очень верным решение вообще отказаться от супервизора.
Пока я не понимаю, будет ли Home Assistant продолжать выпускать официальные докер образы с системой. По моим ощущениям, должны, но я слышал некоторые сомнения от разных людей. Но даже если они не будут сами делать образы, придется самому заворачивать код в образ, что вполне решаемо.
10 мая 2020
Кстати, у меня есть телеграм канал про Home Assistant: https://t.me/bessarabov_ha
|