====== 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