Найти в Дзене
Smart home Russia

Умный дом из Android телефона. Установка Home Assistant в termux

Получив контроль над своей старой мобилкой, первым делом, почему-то, захотелось поставить home assistant. Да, я понимаю, что ha сегодня местами избыточен, но удобство входа для новичка, которое он предлагает - неоспоримо.

Translation to English is here. Также, основной канал в telegram.

Статья живая и к ней регулярно появляются обновления, читайте внимательно, следите за обновлениями в конце статьи и за комментариями.

Прежде чем я начну описывать действия, читатель должен ознакомиться со ↓статьей↓:

В ↑этой↑ статье я рассказал о первичной настройке termux и о том, как работать с ним с персонального компьютера. Все дальнейшие действия описываются для ситуации, когда у вас уже получилось настроить termux.

Врать не буду, я начал поиски в google и сразу вышел на статью Home Assistant Core on Android Tablet. Инструкция, которую предлагают в официальном сообществе, проста. Вводим команды по очереди, подключившись с компьютера к нашему телефону через ssh:

pkg updates
pkg upgrade
pkg install python nano openssh termux-api make libjpeg-turbo
python -m venv hass source hass/bin/activate
pip install homeassistant

Если после ввода этих команд у Вас все заработает, то прошу отписаться в комментариях. В моем индивидуальном случае, при сборке ha вышла ошибка и на Jiayu и на Xiaomi. Оригинал статьи, кстати, лежит на github.

Оригинальная инструкция просит установить на Nexus7 вполне современный Android 10, он же LineageOS 17. Крайняя версия ОС для Jiayu S3 это madOS 2.1.3 на Android 8.1.0, а для Xiaomi - LineageOS 14.1 или Android 7.1.2. Возможно, инструкция не сработала именно по этой причине, но, если бы у меня был аппарат, подобный Nexus 7, то можно было бы проверить.

Первым пунктом этой инструкции нам рассказывают про резервную копию через TWRP, что логично, хотя мне еще не удалось сломать телефон любыми действиями в termux. Забавным фактом является то, что если люди смогли установить на nexus 7 c Android 5.0 обновление, предварительно прошив кастомное recovery, то про резервную копию человек, наверное, уже слышал.

Дальше нам рассказывают, как все прошить, но нас это не касается, поэтому мы идем на 4pda и находим все необходимые инструкции в ветке своего аппарата

И вот следущим пунктом приводятся команды, которые были выше

python: Home Assistant запускается в Python, поэтому это язык должен быть установлен
nano: для просмотра и редактирования файлов
termux-api: API для подключения к Termux
make: для возможности Make файлов запускаться
libjpeg-turbo: чтобы избежать ошибки на более позднем этапе, из-за отсутствия пакета JPEG

Тут скорее всего пройдет без ошибок и установится довольно быстро.

Дальше нужно будет ввести команды:

python -m venv hass
source hass/bin/activate
pip install homeassistant

Данные команды создают виртуальное пространство, активируют его и последней мы просим установить в него наш Home Assistant. И вот тут и начинаются проблемы, т.к. виртуальное пространство у меня создалось, а ha собирался с ошибками. Но, если же вдруг у вас все получилось, то вводим↓ команду ниже и все начинает работать.

hass -v

Переходим по адресу:
localhost:8123
должна появиться приветственная страничка HA

Однако, 174 комментария под статьей подсказывают нам, что команды не сработали как следует не только у меня... Перечитывая комментарии, можно убедиться, что проблемы у всех разные. У меня ошибка появлялась на пакете maturin. Однако, рабочий способ найти все же удалось. Вариант установки мной дополняется по мере прочтения той или иной информации. Также ребята в termux тоже не спят и упрощают нам жизнь и фиксят проблемы. Я стараюсь добавлять эту информация в инструкцию по возможности.
Делаем следующее:
pkg updates
pkg upgrade
pkg install python nano openssh termux-api make libjpeg-turbo make rust python-cryptography libcrypt libffi binutils

После установки пакетов переходим к созданию и активации виртуальной среды:
python -m venv hass
source hass/bin/activate

UPD1: В комментариях подсказывают, что на этом этапе может возникнуть ошибка:

Error: Command '['/data/data/com.termux/files/home/hass/bin/python', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

Там же подсказывают, что проблема не единичная. Лечится по-разному, много комментариев на форуме. Если у меня возникнет, расскажу, как решил. В самом конце статьи сможете найти вынесенный в статью комментарий.

Все, что произойдет дальше, займет у Вас очень много времени, после ввода некоторых команд может пройти до часа, это нормально, так было на всех телефонах
pip install --upgrade pip
pip install wheel
pip install tzdata
pip install maturin

Если с установкой wheel, tzdata и maturin проблем нет, то вот numpy и PyTurboJPEG просто так не соберутся, это особенность описана всюду, но проблему удалось решить. Подробнее описано, например, тут:

Ошибка возникает из-за того, что процедура установки в Termux не связывается с libm. Но это можно исправить, установив набор переменных среды MATHLIB вручную. Вы можете сделать это, просто написав их перед командой установки: MATHLIB="m"

Поэтому продолжаем вводить команды:
MATHLIB=m pip install numpy
MATHLIB=m pip install PyTurboJPEG==1.6.7

Дальше проще не становится, вводим:
export RUSTFLAGS="-C lto=n"
export CARGO_BUILD_TARGET="$(rustc -Vv | grep "host" | awk '{print $2}')" export CRYPTOGRAPHY_DONT_BUILD_RUST=1

Без этих команд у нас не соберется криптография, которая так нужна для сборки HA. Именно на нее у меня ругался ha, когда я пытался собрать его в первый раз. Почитать подробнее можно, например, тут:

Я не уверен, в какой момент это начало происходить, но я думаю, что в последних двух версиях Rust я начал получать эту ошибку в конце компиляции проекта с включенным Thin LTO

Ну и последним этапом мы наконец собираем homeassistant:
pip install homeassistant==2022.12.0

В этот раз все проходит без проблем и можно приступать к запуску:
hass -v

Через несколько минут ha запустится и будет работать.

После перезагрузки, для повторного запуска HA набираем:
source hass/bin/activate
hass -v

Нужно понимать, что способ новый, все постоянно обновляется, никто не обещает нам стабильной работы и проблемы еще будут, но я буду стараться отлавливать их и решать, о чем буду сообщать.

Ну и не забываем про написанное ниже↓, всем добра и с наступающим новым годом!

Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще и развивать канал☺.

Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube, Reddit

UPD2: В комментариях сообщили, что появились новые проблемы(подробнее можно почитать там же) дали следующий алгоритм:

Вот так у меня нормально устанавливается на устройстве (32 ГБ ПЗУ, 2 ГБ ОЗУ, Android 7.1.2):
#Если какому-то пакету не удалось скачаться или собраться, то требуется повторить команду ещё раз (возможно даже несколько раз).
apt update
apt upgrade
pkg install openssh
passwd #ставим пароль
sshd #переходим в kitty/putty на ПК
termux-setup-storage #подтверждаем на устройстве
pkg install python nano termux-api make libjpeg-turbo make rust python-cryptography libcrypt libffi binutils -y
python -m venv --without-pip hass
source hass/bin/activate
pip install wheel
pip install tzdata
pip install maturin
pip install setuptools
MATHLIB=m pip install numpy
MATHLIB=m pip install PyTurboJPEG==1.6.7
export RUSTFLAGS="-C lto=n"
export CARGO_BUILD_TARGET="$(rustc -Vv | grep "host" | awk '{print $2}')"
export CRYPTOGRAPHY_DONT_BUILD_RUST=1
pip install homeassistant==2022.12.0
hass -v

UPD3: Еще один вариант из комментариев:

Я тут сварганил ещё более интересный и правильный вариант установки, т.к. по ней можно использовать самую свежую версию Home assistant (сейчас это homeassistant==2023.2.3):

#Если какому-то пакету не удалось скачаться или собраться, то требуется повторить команду ещё раз (возможно даже несколько раз):
apt update
apt upgrade
pkg install openssh
passwd #ставим пароль
sshd #переходим в kitty/putty на ПК
termux-setup-storage #подтверждаем на устройстве
pkg install tsu python nano termux-api make libjpeg-turbo make rust python-cryptography libcrypt libffi binutils mosquitto wget -y
python -m venv --without-pip hass
source hass/bin/activate
pip install wheel
pip install tzdata
pip install maturin
pip install setuptools
MATHLIB=m pip install aiohttp_cors==0.7.0
MATHLIB=m pip install numpy==1.24.2
MATHLIB=m pip install PyTurboJPEG==1.6.7
export RUSTFLAGS="-C lto=n"
export CARGO_BUILD_TARGET="$(rustc -Vv | grep "host" | awk '{print $2}')"
export CRYPTOGRAPHY_DONT_BUILD_RUST=1
pip download homeassistant==2023.2.3
wheel unpack homeassistant-2023.2.3-py3-none-any.whl
nano homeassistant-2023.2.3/homeassistant/package_constraints.txt
#Ищем aiohttp и меняем его версию на 3.8.3, а также numpy на версию 1.24.2, затем жмём CTRL-X, Y, ENTER.
nano homeassistant-2023.2.3/homeassistant-2023.2.3.dist-info/METADATA
#Ищем aiohttp и меняем его версию на 3.8.3, жмём CTRL-X, Y, ENTER.
rm homeassistant-2023.2.3-py3-none-any.whl
wheel pack homeassistant-2023.2.3
pip install homeassistant-2023.2.3-py3-none-any.whl
pip install --upgrade pip
hass -v
#ждём 5 минут и перезапускаем устройство
source hass/bin/activate #не забываем активировать среду
hass -v #через пару минут можно пробовать зайти
#если нужен доступ по FTP, то:
pkg install busybox termux-services
source $PREFIX/etc/profile.d/start-services.sh
sv-enable ftpd
sv up ftpd #чтобы отключить: sv down ftpd