Home Assistant Core on Android Tablet

Hi @smithbill17,

I ran into this error on Lineage 19.x, so don’t think you need to re-flash.

If you’re using the packaged Termux python 3.11, then try: pkg i python-numpy.

If not, you’ll have to build a patched package from the termux-packages repo.

See the explanation on the Termux wiki

Hello @talss89 .
I did everything as you said and in the end I get this:

(hass) ~ $ pip install git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d
Collecting git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d
  Cloning https://github.com/amitdev/lru-dict (to revision 5013406c409a0a143a315146df388281bfb2172d) to /data/data/com.termux/files/usr/tmp/pip-req-build-du45fk9s
  Running command git clone --filter=blob:none --quiet https://github.com/amitdev/lru-dict /data/data/com.termux/files/usr/tmp/pip-req-build-du45fk9s
  Running command git rev-parse -q --verify 'sha^5013406c409a0a143a315146df388281bfb2172d'
  Running command git fetch -q https://github.com/amitdev/lru-dict 5013406c409a0a143a315146df388281bfb2172d
  Running command git checkout -q 5013406c409a0a143a315146df388281bfb2172d
  Resolved https://github.com/amitdev/lru-dict to commit 5013406c409a0a143a315146df388281bfb2172d
  Preparing metadata (setup.py) ... done
(hass) ~ $ pip list
Package                    Version
-------------------------- ---------
aiohttp                    3.8.4
aiohttp-cors               0.7.0
aiosignal                  1.3.1
anyio                      3.6.2
astral                     2.2
async-timeout              4.0.2
atomicwrites-homeassistant 1.4.1
attrs                      22.2.0
awesomeversion             22.9.0
bcrypt                     4.0.1
certifi                    2022.12.7
cffi                       1.15.1
charset-normalizer         3.1.0
ciso8601                   2.3.0
cryptography               40.0.1
frozenlist                 1.3.3
h11                        0.14.0
home-assistant-bluetooth   1.9.3
homeassistant              2023.4.4
httpcore                   0.16.3
httpx                      0.23.3
idna                       3.4
ifaddr                     0.1.7
Jinja2                     3.1.2
lru-dict                   1.1.8
MarkupSafe                 2.1.2
maturin                    0.14.17
multidict                  6.0.4
numpy                      1.24.2
orjson                     3.8.7
pip                        23.1
pycparser                  2.21
PyJWT                      2.6.0
pyOpenSSL                  23.1.0
python-slugify             4.0.1
PyTurboJPEG                1.7.0
pytz                       2023.3
PyYAML                     6.0
requests                   2.28.2
rfc3986                    1.5.0
setuptools                 67.6.1
sniffio                    1.3.0
text-unidecode             1.3
typing_extensions          4.5.0
tzdata                     2023.3
ulid-transform             0.6.3
urllib3                    1.26.15
voluptuous                 0.13.1
voluptuous-serialize       2.6.0
wheel                      0.40.0
yarl                       1.8.1
(hass) ~ $ hass -v
2023-04-17 12:28:10.337 INFO (MainThread) [homeassistant.bootstrap] Config directory: /data/data/com.termux/files/home/.homeassistant
Bad system call

You need to remove lru-dict first.

Try:

pip uninstall lru-dict

then:

pip install git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d

@talss89

(hass) ~ $ pip uninstall lru-dict
Found existing installation: lru-dict 1.1.8
Uninstalling lru-dict-1.1.8:
  Would remove:
    /data/data/com.termux/files/usr/lib/python3.11/site-packages/lru.cpython-311.so
    /data/data/com.termux/files/usr/lib/python3.11/site-packages/lru_dict-1.1.8.dist-info/*
Proceed (Y/n)? y
  Successfully uninstalled lru-dict-1.1.8
(hass) ~ $ pip install git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d
Collecting git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d
  Cloning https://github.com/amitdev/lru-dict (to revision 5013406c409a0a143a315146df388281bfb2172d) to /data/data/com.termux/files/usr/tmp/pip-req-build-fv_k_o5d
  Running command git clone --filter=blob:none --quiet https://github.com/amitdev/lru-dict /data/data/com.termux/files/usr/tmp/pip-req-build-fv_k_o5d
  Running command git rev-parse -q --verify 'sha^5013406c409a0a143a315146df388281bfb2172d'
  Running command git fetch -q https://github.com/amitdev/lru-dict 5013406c409a0a143a315146df388281bfb2172d
  Running command git checkout -q 5013406c409a0a143a315146df388281bfb2172d
  Resolved https://github.com/amitdev/lru-dict to commit 5013406c409a0a143a315146df388281bfb2172d
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: lru-dict
  Building wheel for lru-dict (setup.py) ... done
  Created wheel for lru-dict: filename=lru_dict-1.1.8-cp311-cp311-linux_armv7l.whl size=22808 sha256=5c14a44f0cd119ab7e7c61f5e3413ee1090090d707ff6472f3eb1297bd38298d
  Stored in directory: /data/data/com.termux/files/home/.cache/pip/wheels/06/a3/a4/1451203259031f09c1d125226a23d74f822a56c09c33bca1ce
Successfully built lru-dict
Installing collected packages: lru-dict
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
homeassistant 2023.4.4 requires pip<23.1,>=21.0, but you have pip 23.1 which is incompatible.
Successfully installed lru-dict-1.1.8
(hass) ~ $ hass -v
2023-04-17 12:55:18.002 INFO (MainThread) [homeassistant.bootstrap] Config directory: /data/data/com.termux/files/home/.homeassistant
Bad system call
````(hass) ~ $ pip install pip==23.0.1
Collecting pip==23.0.1
  Using cached pip-23.0.1-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.1
    Uninstalling pip-23.1:
      Successfully uninstalled pip-23.1
Successfully installed pip-23.0.1

[notice] A new release of pip is available: 23.0.1 -> 23.1
[notice] To update, run: pip install --upgrade pip
(hass) ~ $ hass -v
2023-04-17 12:57:53.419 INFO (MainThread) [homeassistant.bootstrap] Config directory: /data/data/com.termux/files/home/.homeassistant
Bad system call`

(hass) ~ $ pip install pip==23.0.1
Collecting pip==23.0.1
Using cached pip-23.0.1-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.1
Uninstalling pip-23.1:
Successfully uninstalled pip-23.1
Successfully installed pip-23.0.1

[notice] A new release of pip is available: 23.0.1 → 23.1
[notice] To update, run: pip install --upgrade pip
(hass) ~ $ hass -v
2023-04-17 12:57:53.419 INFO (MainThread) [homeassistant.bootstrap] Config directory: /data/data/com.termux/files/home/.homeassistant
Bad system call

1 Like

@talss89 you are a genius sir. Your pkg i python-numpy did the trick. I also needed your detail about uninstalling & reinstalling lru-dict

In the end, I think this is a full list of the instructions I needed to get HomeAssistant set up based on @gj9159a post (I’m not sure if there is anything that is unnecessary in the end, but I’m pasting it here in case it helps others):

# set SELinux=Permissive
su
setenforce 0

apt update
apt upgrade
pkg install openssh
passwd #setting the password
sshd #go to kitty/putty on PC
termux-setup-storage #confirm on the device
pkg install tsu python nano termux-api make libjpeg-turbo make rust python-cryptography libcrypt libffi binutils mosquitto wget -y

pkg install git
pkg i python-numpy

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
#We are looking for aiohttp and change its version to 3.8.3, as well as numpy to version 1.24.2, then press CTRL-X, Y, ENTER.
nano homeassistant-2023.2.3/homeassistant-2023.2.3.dist-info/METADATA
#We are looking for aiohttp and change its version to 3.8.3, press CTRL-X, Y, ENTER.
rm homeassistant-2023.2.3-py3-none-any.whl
wheel pack homeassistant-2023.2.3

pip uninstall lru-dict
pip install git+https://github.com/amitdev/lru-dict@5013406c409a0a143a315146df388281bfb2172d

pip install homeassistant-2023.2.3-py3-none-any.whl
pip install --upgrade pip
hass -v
#wait 5 minutes and restart the device
source hass/bin/activate #don't forget to activate the environment
hass -v #after a couple of minutes, you can try to log in
4 Likes

Great, so glad it worked out, and thank you for contributing your process, this is exactly what I needed!

I’m building a full Home Assistant Core .deb package with dh-virtualenv, so we can all leave this confusion behind and just install with pkg i homeassistant, so your process is really useful to see. I’ll review and merge with my build script.

There are known issues with network reconnects triggering an error loop (socket _accept_connection() error 22), and a discovery bug that relies on /etc/resolv.conf. I have patches for both in the pipeline, but for now you may want to use a restart automation.

Will share once I have something working.

1 Like

Had this error, managed to fix it somehow (can’t remember how) and worked for several days without any issues. Today I restarted Termux and now I get this error again.
I can start with --safe-mode but nothing in the logs (no errors, no warnings, no failures)

EDIT:
I think I solved it. Try this:

pkg in proot
termux-chroot
source hass/bin/activate
hass -v
1 Like

I’ve built an installer for HA Core on Android / Termux (ARM64). It’s alpha, but works on my LineageOS 19 rooted device, and on Termux / ARM64 machines in the cloud.

For anyone eager to try, there is a one-liner web install (although please be prepared for this to possibly break Termux entirely - this is not production ready):

curl -sL https://github.com/talss89/termux-home-assistant-installer/releases/download/v2023.4.4-alpha.3/remote-install.sh | bash

Would be interested to see how this works for others. Please raise issues via the GitHub repo.

5 Likes

Congratulations for the work Talss89!
Awesome works on my Samsung Tab S2 lineage os 18(homeassistant 2023.5.3)! I just have an error for ha-av how can I fix?

talss89, I express my great gratitude to you for the work done! This is exactly what was needed and was asking for! I hope you won’t abandon the script and will update it as much as possible, thank you!

With hass - v boot, did you have any errors with ha-av?

newest HA & clang

yes | pkg update
pkg install python make cmake ninja patchelf rust libcrypt libffi libjpeg-turbo llvm binutils-is-llvm libsodium ffmpeg  libandroid-execinfo -y

pkg install python-numpy python-bcrypt python-cryptography python-pillow -y

python -m venv --without-pip --system-site-packages hass
source hass/bin/activate

pip install wheel
pip install tzdata
pip install maturin
pip install setuptools
pip install webrtcvad
pip install aiohttp_cors==0.7.0
MATHLIB=m pip install PyTurboJPEG==1.7.1

SODIUM_INSTALL=system pip install pynacl

CARGO_BUILD_TARGET="$(rustc -Vv | grep "host" | awk '{print $2}')" pip install homeassistant

hass -v --skip-pip-packages numpy
#after 2 min kill hass and start again
2 Likes

In order to avoid logspam due to wifi disconnection you can start HA with wifi turned off and then turn it on.

Or just change default network adapter in settings to “lo”

pycares fix

wget https://files.pythonhosted.org/packages/01/50/e3015e6e03a3cf64113f509e8b86b71af37169b59ccedfcb182f3d031329/pycares-4.3.0.tar.gz

tar -xf pycares-4.3.0.tar.gz

sed -i s/'#define HAVE_GETSERVBYPORT_R 1'//g ./pycares-4.3.0/deps/build-config/config_android/ares_config.h

pip install ./pycares-4.3.0
1 Like

Hi Daaflip, I also have the same problem, but I can’t solve it. What do you mean termux pinned?

Can this Home Assistant give any glitches when you use non-original hardware or ops?

Great script, two things though.

Maturin uses rust, so you need the cargo build target variable as well.

There is a problem currently with python 3.11: module ‘urllib3.util’ has no attribute ‘PROTOCOL_TLS’
The fix is currently to run pip install git+https://github.com/boto/botocore

@the.joker many android phones allow you to “pin” an app, this means it will stay active.

no problems for me on the fresh install, only numpy 1.23.2 had dlopen error
dlopen failed: cannot locate symbol “npy_nextafterf” referenc

I was to lazzy to fix it and just installed python-numpy (1.25.2)

pip uninstall numpy

pkg i python-numpy

hass -v --skip-pip-packages numpy
1 Like

Unfortunately I’ve had lot of issues with this recently. I use the tablet to launch another app to monitor cameras, and it looks like a recent update of this app introduced a memory leak.
And if your foreground app requests more and more memory, Android will terminate even the “wake lock” or “pinned” processes, it seems.

At least that’s what has happened to me for about a month, whenever I let this camera app run: Termux gets memory collected.