Skip to content
Snippets Groups Projects
Verified Commit d83f095c authored by Nádudvari Ákos's avatar Nádudvari Ákos
Browse files

feat(tervezés): home assistant ismertető init

parent df4eb2be
Branches
No related tags found
No related merge requests found
Pipeline #2710 passed
...@@ -324,4 +324,75 @@ framework; előre tervezés szempontjából hasznos tudásnak tartom. ...@@ -324,4 +324,75 @@ framework; előre tervezés szempontjából hasznos tudásnak tartom.
\subsection{Home Assistant okosotthon} \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 \clearpage % Ez azért kell, hogy nehogy képek átcsússzanak a következő fejezethez
...@@ -615,3 +615,44 @@ urldate = {2025-04-22}, ...@@ -615,3 +615,44 @@ urldate = {2025-04-22},
url = {https://docs.esp-rs.org/esp-idf-svc/esp_idf_svc/index.html}, url = {https://docs.esp-rs.org/esp-idf-svc/esp_idf_svc/index.html},
urldate = {2025-04-25}, 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},
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment