diff --git a/src/contents/6-tervezes.tex b/src/contents/6-tervezes.tex index 6d899c9a44142feb6c30fa0a615ba8d4a02c6267..62cbb70b9c6bf6eaf4cea9d9bf20ede794f79e42 100644 --- a/src/contents/6-tervezes.tex +++ b/src/contents/6-tervezes.tex @@ -324,4 +324,75 @@ framework; előre tervezés szempontjából hasznos tudásnak tartom. \subsection{Home Assistant okosotthon} +\paragraph{} A Home Assistant egy nyílt platform, otthon-automatizációs +célokra. Egy központi, egységes felületet ad a felhasználó számára, ahol +eléri az összes okos eszközét és azok funkcióit. A teljes szoftver moduláris, +bővíthető integrációk segítségével, Python nyelven. A nyílt forrású kód +és licensz jóvoltából számos gyártó által fejlesztett protokoll, eszköz és +architektúrával van integrálva, melyet a Home Assistant fejlesztői közössége +épít. \cite{hass-github} A GitHub felmérése szerint 2024-ben a Home Assisstant +volt a legnépszerűbb projekt a platformon, csupán a hozzájárulók száma +alapján. \cite{github-2024} A projekt támogatást élvez az Open Home Foundation +jóvoltából, kinek tevékenységét számos vállalat szponzorál -- köztük az +Espressif is. \cite{openhome} + +Nem csupán a népszerűsége és nyíltsága miatt választottam ezt a megoldást, hanem +az egyedi architektúrai felépítése miatt is. A szoftver minden adatot entitások +formájában értelmez. Egy entitásnak van egy egyedi azonosítója, típusa (ún. +``domain''), neve, állapota, illetve egyéb attribútumai. Egy entitás domain-je +sokféle lehet, ezek közül megemlítendő: nyomógomb, kapcsoló (ki/be), bináris +szenzor (ki/be, igaz/hamis), szenzor (hőmérséklet, légnyomás, áramfogyasztás +stb.), lámpa, zár, kamera és természetesen riasztó vezérlőpanel, mozgásérzékelő. +\cite{hass-entities} Jól látható, hogy egyes entitások csupán információt +közölnek, mások pedig felhasználói interakciót engednek meg. Lehetőség van +adott entitásokat csoportosítani felhasználó által definiált területekre (area). +Ez például hasznos akkor, ha több lámpa van egy szobában és mindet egyszerre +szeretnénk irányítani. A szoftver definiálja az eszköz (device) fogalmát; +ami szintén egy entitások csoportosítása, de azt nem a felhasználó, hanem a +gyártó/megalkotó határozza meg -- például egy IP kamera, ahol van egy kamera +entitás, és egy nappali és éjszakai mód között váltó gomb. Vagy vegyünk egy okos +kapu vezérlőt, ahol két mód elérhető: a kapu két szárnyát egyszerre nyitó gomb, +csak az egyik szárnyat nyitó gomb, és akár egy állapot visszajelző szenzor. + +Az entitásokat a felhasználó eléri a Home Assistant webes felületén (frontend), +amiben azokra automatizmusokat is lehet létrehozni. Egy automatizmus három +fázisból áll: indító események (trigger), feltételek (conditions), és +műveletek (actions). A felhasználó megadja, hogy milyen események -- entitás +állapotváltozások -- hatására induljon el a műveletek listája. A feltételek +megszabják, hogy a kiváltott esemény mellett definiált megkötések keretében +szabad-e futtatni a műveleteket. \cite{hass-automations} A dokumentáció a +következő példa mondattal magyarázza a felépítést: \textsl{``Amikor Paulus + hazaér és a nap már lement, akkor kapcsolódjanak be a lámpák a nappaliban.''} +\cite{hass-automations} A riasztórendszer-kezelőpanel típusú entitások +élesítésére és hatástalanítására is van művelet. Ezzel a rendszerünk frontend +oldalról is teljeskörűleg integrálható lesz. Szabadságot tudunk adni a +végfelhasználónak, hogy a saját igényei szerint lehessen a rendszert működtetni +-- automatizált módon is. Ha a mozgásérzékelő típusú bináris érzékelőket a Home +Assistant számára elérhetőve tesszük, nem csak a biztonságtechnikai szerepet +tudná betölteni a rendszer, hanem az otthonautomatizáció szerepét is bővítené. +Például, a következő két automatizmust lehetne megvalósítani egy mozgásérzékelő +entitás jelenlétével: Amikor mozgás van a szobában és a rendszer hatástalanítva +van és a nap már lement, akkor kapcsolódjon fel a szobában lévő lámpa. Illetve +ha nincs mozgás legalább 10 percen át, akkor kapcsolódjon le a lámpa. + +Az MQTT egy első osztályú integráció a Home Assistantban. Az MQTT minden QoS +szintjét támogatja, illetve a többi integrációhoz képest sokkal általánosabb +interfészt ad. Ez kimagaslóan jobb élményt ad a végfelhasználó és a fejlesztő +számára is. MQTT-n keresztül lehetőség van entitások és eszközök telepítésére +manuális konfiguráció vagy az úgynevezett ``MQTT-discovery'' segítségével. +Mindkét esetben az eszközöknek és entitásoknak van egy deklaratív leíró sémája, +ami tartalmaz meta-adatokat az azok működtetésére. Manuális konfiguráció esetén +ezt a Home Assistantban YAML formátumban kell megadni, autodiscovery során +pedig egy előre meghatározott topic-on kell küldeni JSON formátumban a rendszer +felé. Látható, hogy az utóbbi esetben az azt támogató eszköz végfelhasználói +onbarding élménye sokkal kényelmeseb. Például, az eszköz első indítása után +az autodiscovery üzenet küldésével a Home Assistant frontend felületén azonnal +látni fog a felhasználó egy jóváhagyandó üzenetet, hogy az készen áll a +használatra. Jóváhagyás után a meghirdetett entitások importálásra kerülnek a +Home Assistantba. \cite{hass-mqtt} Célom úgy megvalósítani a saját rendszert, +hogy az alapból támogassa az autodiscovery-t. Így \aref{kereskedelmi}. +fejezetben megismert DIY rendszereknél is potenciálisan jobb élményt tudna +nyújtani, hiszen a kommunikáció vezetékes médiumon történne. Ennek realitását +szintén a gyakorlatban fogjuk tudni megállapítani. + \clearpage % Ez azért kell, hogy nehogy képek átcsússzanak a következő fejezethez diff --git a/src/hivatkozasok.bib b/src/hivatkozasok.bib index 0e95b28d0658c0c2b9e4c2e2787ca6d1af8aed72..94efd7bd22271c60e7c7424f685fd17e496f54b2 100644 --- a/src/hivatkozasok.bib +++ b/src/hivatkozasok.bib @@ -615,3 +615,44 @@ urldate = {2025-04-22}, url = {https://docs.esp-rs.org/esp-idf-svc/esp_idf_svc/index.html}, urldate = {2025-04-25}, } + +@online{hass-github, + title = {Home Assistant Core - GitHub}, + url = {https://github.com/home-assistant/core}, + urldate = {2025-04-26}, +} + +@online{github-2024, + title = {Octoverse: AI leads Python to top language as the number of global + developers surges}, + organization = {GitHub Octoverse 2024}, + date = {2024-11-22}, + url = { + https://github.blog/news-insights/octoverse/octoverse-2024/#the-state-of-open-source + }, + urldate = {2025-04-26}, +} + +@online{openhome, + title = {Who supports our work - Open Home Foundation}, + url = {https://www.openhomefoundation.org/supporters/}, + urldate = {2025-04-26}, +} + +@online{hass-entities, + title = {Entities and domains - Home Assistant}, + url = {https://www.home-assistant.io/docs/configuration/entities_domains/}, + urldate = {2025-04-26}, +} + +@online{hass-automations, + title = {Understanding automations - Home Assistant}, + url = {https://www.home-assistant.io/docs/automation/basics/}, + urldate = {2025-04-26}, +} + +@online{hass-mqtt, + title = {MQTT - Home Assistant}, + url = {https://www.home-assistant.io/integrations/mqtt/}, + urldate = {2025-04-26}, +}