Jak jsem se dostal k chytré domácnosti
Co se dozvíte v článku
První zařízení, které jsem si přibližně v roce 2019 pořídil, bylo pár žárovek IKEA Tradfri spoku s bránou, senzorem pohybu a kulatým vypínačem se stmíváním. Vše využívalo technologii Zigbee a jednalo se o poměrně cenově dostupné prvky, ideální pro seznámení technologií. Můj prvotní záměr byl na chodbě v patře vyměnit obyjčené LED žárovky za ty „chytré“ a když někdo projde, všechny se rozsvítí a po chvíli automaticky zhasnou.
Postupně jsem začal používat i žárovky v místnostech, bílé i barevné a zvlášť jsem si oblíbil ty od Philips Hue. Vynikaly například tím, že dokázaly svůj jas regulovat již od 1 %. Takže ve spojení s vhodnou barvou je to ideální použití v dětském pokojíčku místo lampičky na noční svícení. S Philips Hue bylo samozřejmě nutné pořídit také jejich bránu a vyzkoušel jsem i pohybové senzory (vnitřní i vnější), které byly o několik úrovní lepší než ty od IKEA.
Dále jsem doplnil i chytré vypínače a postupně odstranil ty původní. Takhle to pokračovalo dál a dál. Začal jsem zkoušet další a další zařízení a senzory od různých výrobců, až jsem dospěl do stádia, že nechci od každého výrobce mít vlastní obslužnou aplikaci a v ideálním případě ani vlastní bránu. To přece musí jít řešit jednodušeji.
Narazil jsem na zajímavý projekt Homebridge, který dokázal jednotlivé brány různých výrobců propojit a jejich zařízení integrovat do Apple Homekit. Bylo tedy možné používat jen jednu aplikaci na vše a lehce kombinovat zařízení různých výrobků. Tento software jsem používal k velké spokojenosti až do doby, než jsme si pořídili vířivku s Wi-Fi, kterou ale nebylo možné do toho systému integrovat. Napsal jsem si alespoň jednoduchý skript v Pythonu, který do vířivky posílal jednotlivé příkazy a ten vzdáleně z Homebridge volal. Nepraktické, ale alespoň něco.
Začal jsem googlit, zda někdo neřešil podobný problém, a ano, řešil a vyřešil. Konkrétně napsal vlastní integrací do Home Assistanta. Tak jsem velice rychle opustil původní řešení na Homebridge a zkoumal, co dalšího Home Asisstant nabízí. Když jsem zjistil, že je možné většinu Zigbee bran jednotlivých výrobců nahradit jedním USB koordinátorem, otevřely se mi další nevídané možnosti. Ale o tom podrobněji až v dalších pokračováních.
Hardware a software
Home Assistant je možné zprovoznit na různém hardware a softwarových platformách. V podstatě na čemkoliv, co používá architekturu x86 nebo ARM, běží na Linuxu (případně pomocí WSL rozšíření na MS Windows), podporuje Docker nebo Python. Nejčastěji jsou používané jednodeskové počítače typu Raspberry Pi. Dokonce je nad Raspberry Pi 4 postaven Home Assistant Yellow, který má integrován i Zigbee modul a rozšiřující slot M.2.
Nainstalovat je to možné samozřejmě i na jakýkoliv desktop či jako virtuální server. Vzhledem k poměrně nízkým nárokům na hardwarové prostředky (samozřejmě v závislosti na tom, co vše na daném prostředí poběží), tedy alespoň dvě CPU jádra, 2 GB RAM a alespoň 10 GB diskového prostoru, může Home Assistant spolehlivě běžet i na již „vysloužilých“ pracovních desktopech. Ověřenou funkčnost mám kromě Raspberry Pi 3 a 4 i např. na HP Elite 8200 Elite USDT, Fujitsu Futro S720 nebo Intel Nuc.
Instalace Home Assistant je k dispozici ve čtyřech variantách:
- Home Assistant Container
- Home Assistant Supervised
- Home Asisstant Operating System
- Home Assistant Core
Každá z nich má své výhody či nevýhody. Postupně si probereme každou z nich, včetně postupu instalace a zprovoznění. Ve všech ukázkách předpokládám aktuální distribuci Debian 12 Bookworm.
Home Assistant Container
Home Assistant Container není vlastně nic jiného než Docker image. Pokud máte již nějaký běžící počítač s Linuxem, stačí doinstalovat Docker z distribučních balíčků, stáhnout image a vytvořit kontejner s volume pro persistentní data. Jak na to?
Nainstalujeme Docker z distribučních repozitářů, vytvoříme adresář pro Docker volume, kde budou uložena persistentní data a Docker kontejner, který bude vycházet ze stable image Home Assistenta. K dispozici je ještě i větev latest, ale ta může obsahovat ještě nějaké neodladěné chyby. Obecně je dobrým pravidlem počkat až na první opravný minor release dané verze. Nová major verze vychází každý měsíc a doporučuji sledovat relase notes.
# apt install docker.io # mkdir /opt/homeassistant # docker run -d --name homeassistant --privileged -v /opt/homeassistant:/config -v /run/dbus:/run/dbus:ro -v /etc/localtime:/etc/localtime:ro --network host ghcr.io/home-assistant/home-assistant:stable
Jakmile dojde ke stažení zmíněné Docker image, vytvoří se kontejner a na pozadí spustí. Na portu TCP/8123
poslouchá již webový frontend, stačí tedy zadat do webového prohlížeče http://ip_adresa:8123
a dokončit instalaci.
Počáteční nastavení je velice jednoduché. V prvním kroku zadáme název, uživatelské jméno administrátora a jeho heslo.
V dalším kroku pak pojmenujeme domácnost a vybereme polohu. Zadání polohy můžeme přeskočit a nastavit později. Nicméně je to vhodné např. pro zařízení, které dokáží hlásit svojí polohu (např. mobilní telefon, automobil), na základě které pak Home Asisstant dokáže rozlišit, zdali osoba nebo věc je doma či nikoliv. V tomto kroku ještě vyplníme povinnou položku země, zbytek není povinný.
Ve třetím kroku pak můžeme anonymizovaně sdílet informace své instalace. Standardně je zvoleno nic nezasílat, stačí ten jen pokračovat na poslední krok.
V posledním kroku se provede prohledání lokální sítě, ve které Home Asisstant běží a pokud se najdou známá zařízení, systém nabídne rovnou nainstalovat jejich integrace (tedy obslužný software). Po potvrzení tlačítkem Dokončit se již rovnou spustí základní obrazovka (dashboard) Home Assistenta.
Aktualizace Docker image se provádí standardním způsobem, tedy docker pull _image_
, zastavení a smazání běžícího kontejneru a znovu spuštění.
# docker pull ghcr.io/home-assistant/home-assistant:stable # docker stop homeassistant # docker rm homeassistant # docker run ...
Spuštění kontejneru je můžeme zjednodušit vytvořením jednoduché systemd service, která bude obsahovat výše použitý Docker příkaz pro spuštění kontejneru. Zde je však vhodné při volání docker run
, viz výše, namísto parametru -d
, který spustí kontejner na pozadí, použít parametr --rm
, který provede smazání kontejneru, jakmile se ukončí.
Toho využívám pro zjednodušení aktualizací a to poměrně jednoduchým způsobem. Každou noc se totiž spustí cronová úloha, která zavolá docker pull ghcr.io/home-assistant/home-assistant:stable
a v případě potřeby stáhne novou docker image Home Asisstenta. Pokud tomu tak je a po přečtení release notes nezjistím žádný zásadní problém, znamená pak provedení aktualizace na novější verzi dva kroky. Zastavení systemd service a její opětovné spuštění.
Definice služby pak může vypadat takto:
[Unit] Description=docker-homeassistant After=docker.service Wants=docker.service [Service] ExecStart=/usr/bin/docker run --rm --name homeassistant --privileged -v /opt/homeassistant:/config -v /run/dbus:/run/dbus:ro -v /etc/localtime:/etc/localtime:ro --network host ghcr.io/home-assistant/home-assistant:stable Restart=always RestartSec=10s [Install] WantedBy=multi-user.target
Pokud raději pracujete s docker-compose
, pak pro uvažovaný soubor docker-compose.yml
můžeme použít tento předpis:
version: '3' services: homeassistant: container_name: homeassistant image: "ghcr.io/home-assistant/home-assistant:stable" volumes: - /opt/homeassistant:/config - /etc/localtime:/etc/localtime:ro - /run/dbus:/run/dbus:ro restart: unless-stopped privileged: true network_mode: host
Spuštění pak provedeme opět standardně příkazem docker-compose up -d
Pohledem na výstup příkazu docker ps
pak vidíme pouze jeden běžící kontejner.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d3fff1cf3087 ghcr.io/home-assistant/home-assistant:stable "/init" 2 minutes ago Up 2 minutes homeassistant
Home Assistant Supervised
Home Assisant Supervised přináší rozšíření předchozí varianty Container, konkrétně o takzvané add-ons (doplňky), tedy možnost instalovat další software, který je pak možné s Home Assistentem využít a není třeba jej instalovat ručně. Typicky jde např. o Grafana, Influxdb, Wireguard a podobně. Všechny tyto přídavky jsou ve skutečnosti také dockerové kontejnery, které je možné konfigurovat a spouštět přímo z rozhraní Home Assistanta a jsou přímo do něj integrované. Pro jakoukoliv správu tedy pak není nutné se ani přihlašovat na konzoli serveru.
Tento benefit s sebou nese i několik omezení. Předně je podporován pouze Debian Linux. Ačkoliv je již v dokumentaci uvedena podpora Debian 12 Bookworm (vyšel 10. června 2023), instalační balíček je možné nainstalovat pouze na Debian 11 Bullseye. Dalším omezením je, že nelze využít dockerový balíček přímo z distribučních repozitářů, ale striktně docker-ce
z oficiálních zdrojů.
Instalace na čistém systému pak vypadá následovně.
# sudo apt-get install jq wget curl udisks2 libglib2.0-bin network-manager dbus systemd-journal-remote lsb-release -y # sudo curl -fsSL get.docker.com | sh # sudo wget https://github.com/home-assistant/os-agent/releases/download/1.5.1/os-agent_1.5.1_linux_x86_64.deb # sudo dpkg -i os-agent_1.5.1_linux_x86_64.deb # sudo wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb # sudo dpkg -i homeassistant-supervised.deb
Balíček os-agent
slouží ke komunikaci démona s hostujícím operačním systémem. Je to v podstatě podobný agent, jaký se používá například u virtualizací. Po dokončení instalace balíčku homeassistant-supervised
je dostupné webové rozhraní opět na portu TCP/8123
, stačí tedy zadat do webového prohlížeče http://ip_adresa:8123
a dokončit instalaci podobně jako u předchozí variantě.
Pohledem na výstup příkazu docker ps
už neběží jen jeden dockerový kontejner jako v předchozím případě:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 350955490ae8 ghcr.io/home-assistant/qemux86-64-homeassistant:2023.6.2 "/init" 2 minutes ago Up 2 minutes homeassistant c831a9527e57 ghcr.io/home-assistant/amd64-hassio-supervisor:latest "/init" 2 minutes ago Up 2 minutes hassio_supervisor 69a38f0310b7 ghcr.io/home-assistant/amd64-hassio-multicast:2022.02.0 "/init" 2 minutes ago Up 2 minutes hassio_multicast 0bad3350e686 ghcr.io/home-assistant/amd64-hassio-observer:2021.10.0 "/init" 2 minutes ago Up 2 minutes 0.0.0.0:4357->80/tcp, :::4357->80/tcp hassio_observer 8a73b209008f ghcr.io/home-assistant/amd64-hassio-audio:2023.04.2 "/init" 2 minutes ago Up 2 minutes hassio_audio 0e554583c3f4 ghcr.io/home-assistant/amd64-hassio-dns:2022.04.1 "/init" 2 minutes ago Up 2 minutes hassio_dns 52dea74db6b5 ghcr.io/home-assistant/amd64-hassio-cli:2023.05.0 "/init" 2 minutes ago Up 2 minutes hassio_cli
Od této chvíle již veškerá nastavení, aktualizace (všech kontejnerů a add-ons) a instalace dalšího software provádíme výhradně ve webovém rozhraní Home Assistant.
Jak na první pohled poznáme, jaká edice Home Asisstant se používá? V menu Nastavení → O aplikaci se kromě verze Home Assistant a verze Frontend ukazuje i verze Supervisor. Hlavní důvod, proč je tato variantu u uživatelů oblíbená, je právě existence obchodu s doplňky v menu Nastavení. K tomu se dostaneme v některém z dalších pokračování.
Home Assistant OS
Home Assistant OS je kompletní softwarové vybavení včetně operačního systému, které zahrnuje edici Supervised běžící na upravené distribuci Linuxu. Je to tedy další stupeň pro zjednodušení zprovoznění vlastní instance.
K dispozici jsou připravené instalační obrazy pro architektury x86/ARM pro nabootování na USB flash disk nebo pro některé z používaných virtualizačních technologií, konkrétně Vmware, VirtualBox nebo QEMU/KVM. Připravil jsem si ukázku instalace pro virtualizaci QEMU/KVM.
Aktuálně je k dispozici verze 10.3, stáhneme tedy variantu QCOW2
a rozbalíme archiv xz. Jedná se již o připravený obraz operačního systému a dalšího softwarového vybavení.
# apt-install qemu-kvm virtinst xz-utils # cd /opt # wget https://github.com/home-assistant/operating-system/releases/download/10.3/haos_ova-10.3.qcow2.xz # xz -dv haos_ova-10.3.qcow2.xz
Po rozbalení už jen vytvoříme a spustíme virtuální server
# cd /opt # virt-install --name haos --os-variant=generic --ram=2048 --vcpus=2 --disk haos_ova-10.2.qcow2,bus=sata --graphics none --boot uefi --import
Jakmile nabootuje operační systém, objeví se standardní linuxový login. Můžeme se přihlásit jako uživatel root
bez hesla a poté se pomocí příkazu hassos-cli
připojit na jednoduchou textovou konzoli Home Assistant.
V tuto chvíli se začnou spouštět dockerové kontejnery (stejné, jako v případě edice Supervised) a připravovat spuštění Home Assistenta. Tato operace může trvat několik minut, stav lze opět ověřit přístupem na webové rozhraní na adrese http://ip_adresa:8123
. Poté stačí jen dokončit instalaci, jako v předchozích případech.
Pokud se nyní podíváme do menu Nastavení → O aplikaci, ukazuje se navíc i verze Operating System. Podobně jako v edici Supervised, i v tomto případě se sledují dostupné aktualizace všech komponent, včetně operačního systému a na doslova na jeden klik lze aktualizace provést bez dalších starostí.
Home Assistant Core
Poslední varianta se jmenuje Home Assistant Core a je určena zejména těm, kteří nechtějí použít hotové dockerové řešení a současně mají více zkušeností s Linuxem. Jedná se totiž o přípravu pythoního prostředí a spuštění aplikace.
Postup instalace je podobný, jako u jakékoliv aplikace v Pythonu – tedy nejdříve nainstalujeme všechny potřebné balíky potřebné pro vývoj a Python minimálně ve verze 3.10.
# apt-get install -y python3 python3-dev python3-venv python3-pip bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff6 libturbojpeg0-dev tzdata ffmpeg liblapack3 liblapack-dev libatlas-base-dev
Poté vytvoříme uživatelský účet v operačním systému, připravíme venv, stáhneme Home Assistant v požadované verzi a spustíme.
# useradd -rm homeassistant # mkdir /opt/homeassistant # chown homeassistant:homeassistant /opt/homeassistant # sudo -u homeassistant -H -s # cd /opt/homeassistant # python3 -m venv . # source bin/activate # python3 -m pip install wheel # pip3 install homeassistant==2023.6.2 # ./bin/haas
Po spuštění se automaticky vytvoří všechny potřebné konfigurační soubory v adresáři /home/homeassistant/.homeassistant
a je opět potřeba několik minut počkat, než se nainstalují potřebné knihovny a závislosti. Webové rozhraní je opět na portu TCP/8123
, stačí tedy zadat do webového prohlížeče http://ip_adresa:8123
a dokončit instalaci podobně jako v předchozí variantě.
Nainstalováno
Jakou variantu tedy vybrat? Záleží na tom, do jaké míry se chcete věnovat správě a údržbě celé instalace, jaké máte zkušenosti se správou Linuxu a na jakém hardware budete Home Assistant provozovat. Nejčastější použití se totiž ukazuje spojení Home Assistant Supervised (případně Home Assistant OS) s Raspberry Pi. Tento jednodeskový počítač je totiž nenáročný na spotřebu elektrické energie, je malých rozměrů a pokud na něm poběží jen Home Assistant, je to dostačující. Velkým benefitem je možnost instalace již zmíněných doplňků, což zvládnou i méně zkušení uživatelé.
Náročnější uživatelé možná zvolí spíše Home Assistant Container, protože již doma nějaký desktop nebo server mají pro jiné účely a absenci add-ons dokáží vyřešit jiným způsobem. Toto je koneckonců i můj případ. Variantu Home Assistant Core pravděpodobně zvolí opravdoví fajnšmekři. Opravdu se ukazuje, že tuto cestu volí spíše menšina.
V příštím díle se podíváme podrobněji na práci s integracemi, tedy jak do Home Assistanta přidat a následně ovládat svá zařízení. Z velké části se ale zaměříme právě na protokol Zigbee a ukážeme si, jak nakonfigurovat koordinátor včetně dalšího potřebného software. Nebude chybět ani několik tipů na bezchybná a zajímavá zařízení.
(Autorem všech obrázků je Václav Steiner.)