====== HA Raspberry PI ======
* na čistý raspberry PI OS (bez desktopu) nainstalovat docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
* kontejnery mám propojeny přes vlastní network, protože default bridge, který by jinak stačil, neposkytuje preklad názvu kontejnerů na jejich IP adresu (viz [[docker#komunikace_mezi_kontejnery]])
* vypnul jsem swap
* sudo dphys-swapfile swapoff
* sudo systemctl disable dphys-swapfile
* zapnul jsem cgroup pro memory (aby fungovaly limity RAM pro docker)
* do cmdline.txt jsem přidal ''cgroup_enable=memory cgroup_memory=1''
===== Kontejner s HA =====
* data ve složce /home/pi/homeassistant
* DBus je potřeba pro bluetooth integraci
* je potřeba mít nainstalován BlueZ viz https://www.home-assistant.io/integrations/bluetooth
* doporučuje se používat dbus-broker místo dbus-daemon
apt install dbus-broker
systemctl enable dbus-broker.service --now
systemctl disable dbus.service
* po spuštění na ''http://:8123''
pi@harpi:~ $ cat /home/pi/homeassistant/homeassistant.service
[Unit]
Description=Home Assistant Container
After=docker.service
Requires=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run \
--rm \
--name homeassistant \
-e TZ=Europe/Prague \
-v /home/pi/homeassistant/config:/config \
-v /run/dbus:/run/dbus:ro \
-p 8123:8123 \
--network my-net \
ghcr.io/home-assistant/raspberrypi4-64-homeassistant:stable
ExecStop=/usr/bin/docker stop homeassistant
[Install]
WantedBy=multi-user.target
* bacha.. musí být kvalitní napájení nebo se celé pi po spuštění HA zasekne :D
* instalace HACS
docker exec -it homeassistant /bin/bash
wget -O - https://get.hacs.xyz | bash -
* dříve se přidávalo přes configuration.yaml, teď už je to asi přes integraci (křičelo to, že to nemám přidávat ručně do yaml)
* v HACS jsem našel Local Tuya, ale není tam Tuya Local :D musí se přidat vlastní repo nebo kliknout na link v https://github.com/make-all/tuya-local
==== Bluetooth ====
Funguje správně?
* v journalctl home assistenta nebo ve web UI - system - logs je error:
2025-01-17 10:18:08.734 WARNING (MainThread) [bluetooth_auto_recovery.recover] Getting Bluetooth adapter failed hci0 [D8:3A:DD:96:0B:D9] because the system cannot create a bluetooth socket: Unable to open PF_BLUETOOTH socket
2025-01-17 10:18:08.735 WARNING (MainThread) [bluetooth_auto_recovery.recover] Could not find adapter with mac address D8:3A:DD:96:0B:D9 or hci0
2025-01-17 10:18:08.735 WARNING (MainThread) [bluetooth_auto_recovery.recover] Closing Bluetooth adapter hci0 [D8:3A:DD:96:0B:D9] failed: 'NoneType' object has no attribute 'detach'
* vypadá to, že v dockeru není přímý přístup k Bluetooth HW (přes ten PF_BLUETOOTH). Funguje pouze přístup přes dbus a nejde s tím nic udělat.
* HA (userspace) komunikuze s BlueZ přes DBUS (bluetooth systemd služba)
* PF_BLUETOOTH je pro přímý přístup k BT zařízení (kernelspace)
* přímý přístup může být potřeba například pro reset zařízení nebo určité BLE skeny
* v HA je nějaký bluetooth_auto_recovery.recover, což je py skript, nespíš používá pybluez vyžadující PF_BLUETOOTH
* ChatGPT říkal, že to může být tím img, že prostě nemá podporu pro PF_BLUETOOTH a proto nepomáhá ani když mu dávám privileged práva
* takhle jde ověřit, že PF_BLUETOOTH nefunguje
docker exec -it homeassistant /bin/bash
hciconfig
Can't open HCI socket.: Address family not supported by protocol
python3 -c "import socket; socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI)"
* takhle lze ověřit, že bluetooth přes D-BUS funguje
docker exec -it homeassistant /bin/bash
bluetoothctl list
Unable to open mgmt_socket
Controller D8:3A:DD:96:0B:D9 harpi [default]
proč to píše to "Unable to open mgmt_socket"?
* přidání --privileged nepomohlo
* přes výpis /dev lze ověřit, že privileged zpřístupnil vše včetně /dev/ttyACM0
* nejspíš ta hláška souvisí s PF_BLUETOOTH? (viděl jsem na diskuzi člověka, co na to pustil strace)
funguje divně
* měl jsem zapnutý --privileged a v bluetooth viděl 4 různá zařízení včetně xgimi RC hned po stisku tlačítka
* odstranil jsem —privileged a už nic neviděl
* vrátil jsem --privileged a zase nic neviděl
* spustil jsem ručně sken (bluetoothctl scan on), v kontejneru, a ukázalo se xgimi RC i v UI
* ale takto se to chovalo i bez privileged :D
* po ukončení bluetoothctl se ale vypne i sken
bluetoothctl
scan on
* při ručním spouštění skenů a pokusech se v HA občas ukáže nová chyba :D
hci0 (D8:3A:DD:96:0B:D9): Error stopping scanner: [org.bluez.Error.Failed] No discovery started
* chová se to divně
* na diskuzích často píši, že se to BT zasekává, hlavně na rpi. Proto je tam asi ten BT recovery skript. Jenomže on nemá přístup k tomu PF_BLUETOOTH
* doporučuje se používat spíš Bluetooth proxy přes ESP Home
===== Kontejner s MQTT =====
mkdir -p /home/pi/mosquitto/config /home/pi/mosquitto/data /home/pi/mosquitto/log
vim /home/pi/mosquitto/config/mosquitto.conf
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwordfile
docker run -it --rm -v /home/pi/mosquitto/config:/mosquitto/config eclipse-mosquitto mosquitto_passwd -c /mosquitto/config/passwordfile z2m
pi@harpi:~ $ cat mosquitto/mosquitto.service
[Unit]
Description=Mosquitto MQTT Broker Container
After=docker.service
Requires=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run \
--rm \
--name mosquitto \
-v /home/pi/mosquitto/config:/mosquitto/config \
-v /home/pi/mosquitto/data:/mosquitto/data \
-v /home/pi/mosquitto/log:/mosquitto/log \
--network my-net \
eclipse-mosquitto
ExecStop=/usr/bin/docker stop mosquitto
[Install]
WantedBy=multi-user.target
===== Kontejner s Zigbee2mqtt =====
* data ve složce /home/pi/zigbee2mqtt
* je třeba zjistit path k USB adaptéru a doplnit do docker
cat /home/pi/zigbee2mqtt/zigbee2mqtt.service
[Unit]
Description=Zigbee2MQTT Container
After=docker.service
Requires=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run \
--rm \
--name zigbee2mqtt \
--device=/dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20230221110549-if00:/dev/ttyACM0 \
-v /home/pi/zigbee2mqtt/data:/app/data \
-v /run/udev:/run/udev:ro \
-e TZ=Europe/Prague \
-p 8080:8080 \
--network my-net \
koenkk/zigbee2mqtt
ExecStop=/usr/bin/docker stop zigbee2mqtt
[Install]
WantedBy=multi-user.target
configuration.yaml
* je třeba nastavit device
* mám adaptér Sonoff ZBDongle-E V2, měl jsem firmware EZSP 6.4.x
* ale EZSP prý končí a nahrazuje ho ember
* do konfigurace jsem tedy přidal typ ember a musel jsem i boudrate
* naflashoval jsem ncp-uart-hw-v7.4.4.0-zbdonglee-230400.gbl přes universal-silabs-flasher
serial:
port: /dev/ttyACM0
adapter: ember
baudrate: 230400
* Zigbee síť se inicializuje automaticky
* je třeba nastavit parametry MQTT serveru v configu
* přidat ''user:'' a ''password:''
===== Kontejner s Unifi =====
* podle https://helgeklein.com/blog/dockerized-ubiquiti-unifi-network-server-setup-with-automatic-https/
* kvůli ARMv8 musím snížit verzi mongo na 4.4.18
* nové zařízení má credentials ubnt:ubnt, po adaptaci se změní na uživatele admin s generovaným heslem. Heslo lze zjistit a nastavit v Unifi Devices - Devices updates and settings
* zapnutí 802.11r automaticky vygeneruje mobilní doménu, lze zjistit z wireshark, na zařízení jsem ji nenašel.
mkdir -p unifi/db
mkdir -p unifi/data
mkdir -p unifi/db-init
vim unifi/db-init/init-mongo.js
db.getSiblingDB("unifi").createUser({user: "unifi", pwd: "YOUR_PASSWORD", roles: [{role: "dbOwner", db: "unifi"}]});
db.getSiblingDB("unifi_stat").createUser({user: "unifi", pwd: "YOUR_PASSWORD", roles: [{role: "dbOwner", db: "unifi_stat"}]});
vim unifi/container-vars.env
PUID=1000
PGID=1000
MONGO_USER=unifi
MONGO_PASS=YOUR_PASSWORD
MONGO_HOST=unify-mongodb
MONGO_PORT=27017
MONGO_DBNAME=unifi
vim unifi/docker-compose.yml
===== Kontejner DokuWiki =====
* dříve jsem provozoval na pi2, ale po upg tam byl problém s 64bit kódem na 32bit rpi.
* ze starého jsem zkopiroval
* dokuwiki/conf
* smazal jsem *.bak, *.examples, *.dist
* dokuwiki/data
* smazal jsem cache/, locks/, __dummy
===== Komunikace mezi kontejnery =====
* mám vytvořenou vlastní siť (typu bridge), aby mohli kontejnery mezi sebou komunikovat
docker network create my-net
docker network ls
===== TODO =====
FIXME
* ze tuya integrace nenajdou zařízení skenem, protože kontejner je v jiné síti
* zapsat, kde je jaká konfigurace HA
* hlavně ten .storage a že to jde klidně copy pastnout