Установка Home Assistant на AltLinux
Разберем, как установить приложение HomeAssistant на операционную систему linux для AMD/Intel или ARM контроллера.
Установка Home Assistant на AltLinux
Варианты установки системы Home Assistant
Чтобы поставить и запустить Home Assistant на ARM контроллере, в нашем случае мы имеем Raspberri Pi4 (причем он у нас уже с подключенной камерой) Вместо него может быть использован любой одноплатный комп, например Raspberri Py или Repka Pi , или Orange Pi 3B . Нам понадобится SD-карта не менее чем 8 Гбайт и адаптер для записи на нее образа скаченной операционной системы (Фото 1).
Варианты установки системы Home Assistant могут быть следующими:
- Установить HA вместе с предустановленной операционной системой - вариант HAOS. В этом случае будут доступны максимально возможные опции для запуска Supervisor. Операционная система HAOS занимает весь носитель и предоставляет среду Linux для запуска Supervisor и Core.
- Установить HA в минимальной конфигурации, в режиме CORE. В этом случае будет установлено только одно ядро системы, без дополнений и расширений, которые можно будет до установить уже самостоятельно. Ядро (CORE) взаимодействует напрямую с пользователем, супервизором, устройствами и сервисами Io, все эти настройки взаимодействия придется выполнять вручную.
- Установить HA в контейнер Docker. Если операционная система не Debian, то HA будет установлен в режиме CORE.
- Установить HA в режиме VirtualBox. В этом случае будет доступ к Супервайзеру и Аддонам, если удастся запустить виртуальную машину.
- Установить HA в режиме Супервизор (Supervisor) на операционную систему Debian, или ее клон. В этом случае будут доступны расширения - Аддоны.
Почитать подробнее про разные методы установки можно здесь , словарь терминов и определений в HomeAssistan здесь. Home Assistant предоставляет платформу для управления домом и домашней автоматизации. Home Assistant — это не просто приложение: это встроенная система, которая предоставляет такие же возможности, как и другие готовые потребительские продукты: подключение, настройка и обновление выполняются через простой в использовании интерфейс.
Скачиваем дистрибутив образа
Скачиваем дистрибутив Альтлинукс версии: p11 для ARM с официального сайта http://nightly.altlinux.org/p11-aarch64/release/ последнюю версию нужного нам образа ISO, например вот эту alt-p11-builder-20240529-aarch64.iso
Если же у вас процессор архитектуры AMD/Intel - 64 разрядный, то образ ISO вам нужно скачивать вот этот alt-p11-builder-20240529-x86_64.iso
Как вариант, можно скачать стартовый набор Starterkits/Download -- сборки операционной системы Alt Linux на базе стабильного репозитория, они предназначенные для опытных пользователей.
Для скачивания образа из консоли можно использовать команду wget:
$ wget http://nightly.altlinux.org/p10-aarch64/release/alt-p10-builder-20230610-aarch64.img.xz
Не забываем, что прежде чем запустить это скачивание файла, нам нужно перейти в то место, где мы хотим хранить наш файл, например:
$ cd /home/user/distrib
После завершения процесс скачивания, вставляем карточку SD через адаптер (фото 1)в USB разъем, чтобы проверить на какой том это устройство смонтировалось при подключении. Для проверки используем команду df, и видим примерно такой вывод:
udevfs 1,9G 96K 1,9G 1% /dev /dev/sdb5 7,5G 4,0K 7,5G 1% /run/media/user/4785-9AD2
Отсюда мы делаем вывод, что наше устройство смонтировано на том /dev/sdb. После это, запускаем команду копирования образа ISO на на SD носитель. Команда потребует ввести пароль рута:
$ su -c "xzcat alt-p10-builder-20230610-aarch64.img.xz |dd of=/dev/sdb bs=4M status=progress"
Либо если вы скачали ISO файл, не запакованный в архив *.xz, то можно записать на USB устройство командой dd:
# dd if=alt-p11-builder-20240529-aarch64.iso of=/dev/sdb bs=4M status=progress
Запускаем операционку на одноплатнике
Вставляем нашу SD карточку, с записанным на нее ISO образом операционной системы в одноплатник. Подаем питание на него. Для работы дальше, можно использовать монитор, подключенный к компу и клавиатуру. А можно соединиться и работать сразу по сети, но тогда предварительно надо будет сгенерить ключ для входа в root и положить его в корневую директорию SD карточки. Для генерации ключа используется команд $ ssh-keygen -t rsa после этого файл можно по адресу: $ cat ~/.ssh/id_rsa.pub
Этот файл можно на SD карточку, командой: cp ~/.ssh/id_rsa_ha.pub /run/media/user/FF2E-507C/.
Если загрузка системы прошла все без ошибок, то на мониторе мы увидим приглашение, и тогда входим в рута:
login: root password: altlinux
Убедимся, что сервис удаленного доступа по протоколу SSH - sshd запущен, для этого выполняем команду
# systemctl enable sshd --now
должны получить ответ # /lib/systemd/systemd-sysv-install enable sshd Обновляем для верности всю систему:
# apt-get update
Если обновление прошло нормально, то в конце вывода мы должны увидеть что то в таком духе:
Найдено http://ftp.altlinux.org p10/branch/noarch/classic release Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено
Теперь нам надо добавить пользователя, в нашем примере мы его назвали user, задаем ему пароль (вводим два раза, без отображения на экране) и включаем этого пользователя в группы, которые нам понадобятся в дальнейшем при настройке системы :
# adduser user; passwd user; usermod -aG wheel user; usermod -aG wheel user; usermod -aG docker user; usermod -aG uucp user; usermod -aG video user
Для того, чтобы мы могли дистанционно заходить на наш хост, нам нужно знать его IP адрес, который он получает от DHCP сервера, для этого определяем IP адрес нашего одноплатника командой ifconfig
$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr DC:A6:32:C3:68:66 inet addr:192.168.9.132 Bcast:192.168.9.255 Mask:255.255.255.0 inet6 addr: fe80::4a4f:c4ca:9857:d421/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:432562 errors:0 dropped:0 overruns:0 frame:0 TX packets:177156 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:607652351 (579.5 MiB) TX bytes:12324924 (11.7 MiB)
Выходим из рута. Переподсоединяемся по ssh в пользователя user, для этого в консоли, уже на своей локальной машине задаем команду для входа в одноплатник по сети на IP адрес 192.168.9.132:
$ ssh user@192.168.9.132
Если у вас ос Windows, то можете использовать для входа программу Putty, как ее сконфигурить и настроить написано в ее разделе помощь.
Устанавливаем Home Assistant
При первом входе в систему размер партиции корневой директории может оказаться заполненным на 100% и составлять порядка 2Гб. Для того чтобы использовать весь размер SD карточки, нужно перезагрузить систему.
Для установки в режиме Container ставим два пакета, сам докер и докер композер. Почитать более подробно про Compose plugin можно здесь. Для их установки нам понадобится ввести пароль рута.
su -c "apt-get install docker-engine docker-compose"
Запускаем сам докер
su -c "systemctl enable --now docker"
Посмотреть версию докера-композера можно командой:
$ docker-compose version docker-compose version 1.29.2, build unknown docker-py version: 5.0.0 CPython version: 3.9.16 OpenSSL version: OpenSSL 1.1.1u 30 May 2023
Для того чтобы сконфигурить нашу систему HA, cоздаем папку и заходим в нее:
$ mkdir homeassistant $ mkdir video $ cd homeassistant/ $ pwd /home/user/homeassistant $ vim compose.yml
Cоздаем конфигурационный файл для первого запуска нашей системы командой vim compose.yml не забываем про медиа директорию. Не забываем поправить /home/user на те пути, которые у вас в системе
version: '3' services: homeassistant: container_name: homeassistant image: "ghcr.io/home-assistant/home-assistant:stable" volumes: - /home/user/homeassistant:/config - /etc/localtime:/etc/localtime:ro - /home/user/video:/media restart: unless-stopped privileged: true network_mode: host devices: - /dev/ttyUSB0:/dev/ttyUSB0
Запускаем инстанс докера
$ docker-compose up -d
При первом запуске скачиваются нужные файлы, происходит подготовка и запуск приложения. Если все прошло нормально, то должен быть примерно вот такой результат:
Status: Downloaded newer image for ghcr.io/home-assistant/home-assistant:stable Creating homeassistant ... done
Если вывалились ошибки типа:
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))
То надо выйти из сеанса user и снова в него войти, чтобы подхватились обновления окружения.
Теперь мы можем в браузере зайти по нашему IP адресу хоста с указанием порта по умолчанию: http://192.168.9.132:8123
В браузере должно открыться новое окно с приглашением ввести пользователя, пароль для входа в систему Home Assitant и ввести локальные настройки: Страна, Валюта, Местоположение и д.р. Задаем пользователя, пароль и отвечаем на вопросы:
hauser 12345
Если сделали все нормально, то у нас открывается панель Обзор, в меню Настройки>> О программе мы можем посмотреть версию нашей установленной системы.
Восстановить версию из Backup
Для того чтобы наполнить нашу версию установленной системы конфигурациями из предыдущих, настроенных версий, нам понадобится архив с файлами и директориями предыдущих конфигураций и базы данных. Заходим через консоль в командную строку исходного инстанса HA. Переходим в нужную нам папку, где сохраняются все конфигурационые файлы. Например это может быть директория /home/user/homeassistant/config Убедимся, что здесь у нас хранятся все конфигурационные файлы нашего приложения, командой ls, вывод должен быть приметрно таким:
$ ls /home/user/homeassistant/config automations.yaml configuration.yaml esphome home-assistant.log.fault home-assistant_v2.db-wal secrets.yaml blueprints configuration.yaml~ home-assistant.log home-assistant_v2.db scenes.yaml tts catusb.log deps home-assistant.log.1 home-assistant_v2.db-shm scripts.yaml www1
Выполняем архивацию всей папки /home/user/homeassistant командой tar, обратите внимание, что это архвирование лучше выполнять из root-a, поскольку там есть скрытые папки с уровнем доступа от root-a:
# tar cvf homeassistant11.tar /home/user/homeassistant
Переносим наш файл архива на другой сервер с инстансом HomeAssistant:
$ scp homeassistant11.tar user@192.168.9.132:.
При запросе вводим пароль пользователя c именем user
Переходим на новый сервер в корневую директорию:
$ ssh user@192.168.9.132
Останавливаем, если был запущен сервис Докер. Разархивируем наш архивный файл. Переходим в директорию, где расположен файл compose.yml например это может быть директория /home/user/homeassistant11, . Запускаем Докер. $ docker-compose stop $ tar xvf homeassistant11.tar $ cd /home/user/homeassistant11/ $ docker-compose up -d
Переходим в браузере на этот сервер по порту 8123, должен заработать новый инстанс Home Assistant по порту 8123:
http://192.168.9.132:8123/
Дополнительные настройки Home Assistant
Что бы можно было работать с базой данныхи выполнять SQL запросы, нужно доустановить пакет:
$ su -c "apt-get install sqlite3"
Для работы с базой данных можно перейти в директорию и запустить работу с базой данных.
cd homeassistant/ sqlite3 home-assistant_v2.db .schema states
Посмотереть какие датчики есть в системе можно запросом:
SELECT states_meta.entity_id FROM states LEFT JOIN states_meta ON (states.metadata_id=states_meta.metadata_id) LEFT JOIN state_attributes ON (states.attributes_id=state_attributes.attributes_id) WHERE last_changed_ts is NULL group by states_meta.entity_id;
Посмотреть среднюю температуру по дням можно запросом:
SELECT avg(state), substr(datetime(states.last_updated_ts,'unixepoch'), 1,10) timing FROM states LEFT JOIN states_meta ON (states.metadata_id=states_meta.metadata_id) LEFT JOIN state_attributes ON (states.attributes_id=state_attributes.attributes_id) WHERE last_changed_ts is NULL and states_meta.entity_id='sensor.hotbed_themp' group by substr(datetime(states.last_updated_ts,'unixepoch'), 1,10);
Что бы увеличить время сохранения данных на период в год, нужно установить параметр в файле конфигурации:
recorder: db_url: !secret db_link purge_entities: 365
Чтобы установить работу с видеокамерой необходимо добавить пакет:
su -s "apt-get install fswebcam"
Строка записи картинки на устройство /dev/video0 c поворотом на 180 градусов:
$ fswebcam -d v4l2:/dev/video0 --rotate=180 -r 1920x1080 /home/user/homeassistant/11.jpg -t 1
Как использовать Arduino
Что бы работать в HomeAssistant с Arduino по протоколу firmata необходимо скачать сам скетч с протоколом и загрузить его в контроллер Arduino. После этого, для того чтобы убедится как работает контроллер с протоколом, присоединится к нему можно используя приложение с сайта и скачав от туда файл firmata_test.64bit. В дополнение возможно понадобится доустановить библиотеку libpng12:
su -s "apt-get install libpng12"
Для того чтобы считывать значения в HA из контролера Arduino с загруженным в него приложением, нужно организовать взаимодействие через COM порт, который в нашем случае является /dev/ttyUSB0, для этого создадим файл, который назовем например arduino_usb.sh и сделаем его исполняемым:
$ cat arduino_usb.sh #!/bin/bash /bin/stty -F /dev/ttyUSB0 raw -echo 9600 $ /usr/bin/cat < /dev/ttyUSB0 > /home/user/homeassistant/catusb.log &
Обязательно надо установить параметры порта /dev/ttyUSB0 на скорости -echo 9600. Командой cat считываем значения из порта и записываем их в файл /home/user/homeassistant/catusb.log знак & обозначает, что мы их записываем в фоновом режиме
Как настроить отображение погоды
- В интеграциях убедится, что шаблон //Meteorologisk institutt (Met.no) установлен и работает.
- В объектах найти ID объекта, например это будет weather.home_assistant
- В файле configuration.yaml в разделе сенсоров вставить нужную запись кода. Предварительно можно убедится, что этот сенсор по ID объекта отработает в меню Панель разработчика >> Шаблоны
- Перегрузить инстанс HA , и убедится что появились этот объект sensor.pogoda_za_oknom
- Создать карточку - по имени сенсора с отображением погоды - температуры, ветра, влажности, дождя на панели, в зависимости от того что нам нужно.
hours_to_show: 24 graph: line type: sensor entity: sensor.pogoda_za_oknom unit: °C detail: 1
Пример записи кода для файла configuration.yaml
sensor:
- platform: template
sensors:
pogoda_za_oknom:
value_template: "{{state_attr('weather.home_assistant','temperature')|float}}"
unit_of_measurement: '°C'
Ссылка на раздел официальной документации