diff --git a/src/contents.tex b/src/contents.tex index b08498ea0c4370d020d55fa3ba77bfc88fda7c99..bf020b938791bec88b92249abac0fe98d73d9000 100644 --- a/src/contents.tex +++ b/src/contents.tex @@ -10,17 +10,19 @@ % Kötelező részek % Ha nem szeretnéd ezeket a részeket feltüntetni a tartalomjegyzékben, akkor egyszerűen töröld az \addcontentsline kezdetű sorokat. -\includepdf{./images/temabejelento.pdf} +\clearpage \addcontentsline{toc}{chapter}{Témabejelentő} +\includepdf{./images/temabejelento.pdf} % Hogy kétoldalas nyomtatás esetéb a témabejelentő közvetlenül a címlap után lehessen % \ureslap % A kétoldalas témabejelentő miatt a nyilatkozat oldalszáma 3 % \setcounter{page}{3} - +\clearpage \addcontentsline{toc}{chapter}{Nyilatkozat} \input{contents/1-nyilatkozat} +\clearpage \addcontentsline{toc}{chapter}{Kivonat} %TC:endignore \input{contents/2-kivonat} @@ -48,8 +50,9 @@ %TC:ignore % Hivatkozásjegyzék/bibliográfia +\clearpage +\addcontentsline{toc}{chapter}{Irodalom} \printbibliography -\addcontentsline{toc}{chapter}{Felhasznált irodalom} % Mellékletek - ha nincs mellékleted, töröld az alábbi részt \appendix diff --git a/src/contents/5-elozmenyek.tex b/src/contents/5-elozmenyek.tex index cefe09cccf90cc605a5df2ed2693a46bdecd4b10..8c3b6551ddc342378eccd18f8e1c9c6d4d084ab5 100644 --- a/src/contents/5-elozmenyek.tex +++ b/src/contents/5-elozmenyek.tex @@ -527,7 +527,24 @@ az infravörös frekvenciatartományban érzékelhető. Ezt kihasználva jelenl és mozgásérzékelés lehetséges egy hőérzékelő elem segítségével, ami a kapott intenzitást feszültségszintre kódolja. A mozgásérzékeléshez a PIR érzékelő szenzora elé helyezett prizma által kijelölt zónák közötti hősugárzás-különbségek -mérésével érhető el. \cite{pir-history} A behatolásjelzés megbízhatóságának +mérésével érhető el. \cite{pir-history} +A szenzor működését \aref{diag:pir}. ábra és a detektálás módszerét \aref{diag:pir-det}. ábra szemlélteti. + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.5\textwidth]{./images/pir.png} + \caption{A PIR belső működésének blokk diagramja \cite{pir-diag}} + \label{diag:pir} +\end{figure} + +\begin{figure}[htbp!] + \centering + \includegraphics[width=0.5\textwidth]{./images/pir-det.jpg} + \caption{A PIR mozgásérzékelést meghatározó működése \cite{pir-diag}} + \label{diag:pir-det} +\end{figure} + +A behatolásjelzés megbízhatóságának szempontjából érdemes több PIR érzékelőt elhelyezni egy megfigyelt területre. Alapesetben tegyük fel, hogy egy PIR mozgásérzékelő önmaga $P_{PIR} = 0,5$ valószínűséggel észlel behatolót és arra jelez is. Ez egyelőre egy diff --git a/src/contents/6-tervezes.tex b/src/contents/6-tervezes.tex index 67b7ceb03a257cdb0835ff9639b4d80e3225cf91..5b0ce2f90e93a014f0ce091bfb2c3728c7e6a701 100644 --- a/src/contents/6-tervezes.tex +++ b/src/contents/6-tervezes.tex @@ -314,6 +314,7 @@ annak okát és helyes használatát. Ezzel a hozzáállással a szoftverbiztons garanciáját a nyelvi elemekre és a fordítóra helyezem át ahol csak lehet, csökketve az emberi hibából fakadó helytelenségeket. +% TODO: async rust + ábra az async runtime működéséről \subsection{MQTT protokoll} @@ -335,13 +336,21 @@ architektúrai elemet, hogy a kliensek között legyen egyetlen szerver, elnevez szerint a ``broker''. A broker fogadja a kliensek csatlakozási, feliratkozási, üzenetküldési, leválasztási és egyéb kérelmeit. Nyilván tartja a klienseket, azok jogosultságait és a topic-on közzétett üzenetek továbbítását végzi. -Az architektúra modelljét \aref{diag:mqtt}. ábrán rajzoltam le szemléltetés végett. Számos implementációja van mind kliens oldali és broker oldali szerepeknek. \cite{mqtt-vs-coap} +Az architektúra modelljét \aref{diag:mqtt}. ábrán rajzoltam le szemléltetés +végett. Az első lépésben a kliens feliratkozik a ``topic1'' üzenet kategóriára. +A második lépésben egy másik kliens iratkozik fel egy másik kategóriára: +``topic2''. 3. lépésben egy harmadik kliens küld üzenetet a ``topic1'' +kategórián, melyet fogad az első kliens. További lépésekben szemléltetem, +hogy bármilyen kliens feliratkozhat bármilyen kategóriára, illetve bármilyen +kategóriára küldhet üzenetet bármilyen kliens. Egy üzenetet akkor továbbít a +broker, ha annak kategóriájára van feliratkozott kliens. + \begin{figure}[htbp!] {\footnotesize\includesvg[width=\textwidth]{images/mqtt.drawio.svg}} - \caption{Az MQTT protokoll architektúra-modellje} + \caption{Az MQTT protokoll architektúra-modell bemutatása 8 lépésben} \label{diag:mqtt} \end{figure} @@ -411,34 +420,34 @@ kapu vezérlőt, ahol az entitások a következők: a kapu két szárnyát egysz 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. - -Ezzel a Home Assistant belső architektúráját magas szinten kielemeztük. -Szemléltetés céljával lerajzoltam a modellt \aref{diag:hass-arch}. ábrán. +Az entitásokat a felhasználó eléri a Home Assistant webes felületén +(frontend). \Aref{diag:hass-demo}. ábrán látható egy példa a frontend +kinézetére. A felületen a felhasználó az entitások vezérlésén kívül azokra +automatizmusokat is tud 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. \begin{figure}[htbp!] - {\footnotesize\includesvg[width=\textwidth]{images/hass.drawio.svg}} - \caption{A Home Assistant architektúra-modellje \cite{hass-diagram}} - \label{diag:hass-arch} + \centering + \includegraphics[width=\textwidth]{images/hass-demo.png} + \caption{A Home Assistant frontend felülete - gyártói demo \cite{hass-demo}} + \label{diag:hass-demo} \end{figure} Az MQTT egy első osztályú integráció a Home Assistantban. Az MQTT minden QoS @@ -467,8 +476,13 @@ felhasználó Home Assistant felületén. Ez elméletben kényelmesebb, mint pé a WiFi konfigurációja. Ennek realitását szintén a gyakorlatban fogjuk tudni megállapítani. -\subsection{Összesítés} - +Ezzel a Home Assistant belső architektúráját magas szinten kielemeztük. +Szemléltetés céljával lerajzoltam a modellt \aref{diag:hass-arch}. ábrán. +\begin{figure}[htbp!] + {\footnotesize\includesvg[width=\textwidth]{images/hass.drawio.svg}} + \caption{A Home Assistant architektúra-modellje \cite{hass-diagram}} + \label{diag:hass-arch} +\end{figure} \clearpage % Ez azért kell, hogy nehogy képek átcsússzanak a következő fejezethez diff --git a/src/contents/7-eredmenyek.tex b/src/contents/7-eredmenyek.tex index fb1993d4bf228aac503b6fc8b89893e2bb012c85..1d895ead15294319602f5745c2400ba871e51881 100644 --- a/src/contents/7-eredmenyek.tex +++ b/src/contents/7-eredmenyek.tex @@ -536,6 +536,22 @@ használok az események feldolgozásához. Ugyanilyen adatszerkezetet használo az ellenkező irányban is -- a parancsok fogadására. Mindkét queue esetén a konkurrens hozzáférést egy \mintinline{rust}/Mutex<>/ biztosítja. +Ezennel a firmware a feladatát teljeskörűleg teljesíti. A megvalósítás +funkcionális blokkdiagramját lerajzoltam \aref{diag:firmware}. ábrán. Jól +látható, hogy a \mintinline{rust}/scheduler/ szál csupán egy köztes pont a +központi egység belső logikája és az MQTT kliens között. Ezt az indokolja, hogy +ha a rendszer a későbbiekben bővítve lesz, lehetőség nyílik több csatornával +integrálni a rendszer logikáját -- illetve egymást -- egy általánosított +interfészen keresztül. + +\begin{figure}[htbp!] + \ttfamily + {\scriptsize \includesvg[width=\columnwidth]{images/firmware.drawio.svg} } + \rmfamily + \caption{A megvalósított firmware funkcionális blokkdiagramja} + \label{diag:firmware} +\end{figure} + \section{Tesztelés, validálás} \label{teszt} diff --git a/src/hivatkozasok.bib b/src/hivatkozasok.bib index 15541c52635b20ae7bb3085b2a4957f7269ffc4f..a7a0f10734d0168b6f41005920fa4ac49b1231de 100644 --- a/src/hivatkozasok.bib +++ b/src/hivatkozasok.bib @@ -737,3 +737,15 @@ urldate = {2025-04-22}, journal = {International Journal of Security and Networks}, doi = {10.1504/IJSN.2021.119395}, } + +@online{hass-demo, + title = {Overview - Home Assistant - Demo}, + url = {https://demo.home-assistant.io/#/lovelace/home}, + urldate = {2025-04-05}, +} + +@online{pir-diag, + title = {Simple Motion Alarm Sensor Circuit Diagram | ElecCircuit}, + url = {https://www.eleccircuit.com/pir-motion-sensor-alarm-circuit/}, + urldate = {2025-04-05}, +} diff --git a/src/images/firmware.drawio.svg b/src/images/firmware.drawio.svg new file mode 100644 index 0000000000000000000000000000000000000000..4ad94847bae083d0524fd96660d9b5874d003b18 --- /dev/null +++ b/src/images/firmware.drawio.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Do not edit this file with editors other than draw.io --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="691px" height="491px" viewBox="-0.5 -0.5 691 491" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0" version="26.2.14"> <diagram id="2FsiOsy2cjTVrEidp5H9" name="Page-1"> <mxGraphModel dx="962" dy="744" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="VCQW6hEs_HFuUsdHcM73-2" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="500" y="10" width="260" height="160" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-4" value="main()" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="510" y="20" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-5" value="Perifériák inicializálása" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="510" y="50" width="240" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-6" value="spawn()" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="510" y="100" width="240" height="39" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-8" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="280" y="280" width="200" height="160" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-9" value="alarm\_task()" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="295" y="290" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-11" value="Állapotgép" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="290" y="320" width="180" height="90" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-12" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="530" y="240" width="200" height="210" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-13" value="scheduler\_task()" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="542" y="250" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-14" value="Parancsok fogadása" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="540" y="280" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-15" value="Események kiváltása" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="540" y="329" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-16" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="770" y="200" width="200" height="300" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-17" value="network\_task()" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="785" y="210" width="110" height="30" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-18" value="Ethernet link kezelés" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="780" y="240" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-19" value="DHCP kliens" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="780" y="289" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-20" value="MQTT kliens" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="780" y="340" width="180" height="90" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-21" value="OTA kezelés" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="780" y="440" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-22" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-20" target="VCQW6hEs_HFuUsdHcM73-14"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="770" y="560" as="sourcePoint" /> <mxPoint x="820" y="510" as="targetPoint" /> <Array as="points"> <mxPoint x="740" y="350" /> <mxPoint x="750" y="300" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-23" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-11" target="VCQW6hEs_HFuUsdHcM73-15"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="460" y="280" as="sourcePoint" /> <mxPoint x="510" y="230" as="targetPoint" /> <Array as="points"> <mxPoint x="500" y="390" /> <mxPoint x="500" y="350" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-24" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-14" target="VCQW6hEs_HFuUsdHcM73-11"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="410" y="220" as="sourcePoint" /> <mxPoint x="460" y="170" as="targetPoint" /> <Array as="points"> <mxPoint x="500" y="300" /> <mxPoint x="500" y="343" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-25" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-15" target="VCQW6hEs_HFuUsdHcM73-20"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="170" as="sourcePoint" /> <mxPoint x="450" y="120" as="targetPoint" /> <Array as="points"> <mxPoint x="750" y="349" /> <mxPoint x="740" y="408" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-26" value="Autodiscovery logika" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="540" y="380" width="180" height="40" as="geometry" /> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-27" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-6" target="VCQW6hEs_HFuUsdHcM73-8"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="360" y="190" as="sourcePoint" /> <mxPoint x="410" y="140" as="targetPoint" /> <Array as="points"> <mxPoint x="570" y="190" /> <mxPoint x="390" y="240" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-28" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-6" target="VCQW6hEs_HFuUsdHcM73-12"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="610" y="240" as="sourcePoint" /> <mxPoint x="700" y="210" as="targetPoint" /> <Array as="points"> <mxPoint x="630" y="180" /> </Array> </mxGeometry> </mxCell> <mxCell id="VCQW6hEs_HFuUsdHcM73-29" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="VCQW6hEs_HFuUsdHcM73-6" target="VCQW6hEs_HFuUsdHcM73-16"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="830" y="170" as="sourcePoint" /> <mxPoint x="880" y="120" as="targetPoint" /> <Array as="points"> <mxPoint x="680" y="190" /> <mxPoint x="860" y="170" /> </Array> </mxGeometry> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="VCQW6hEs_HFuUsdHcM73-2"><g><rect x="220" y="0" width="260" height="160" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-4"><g><rect x="230" y="10" width="60" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 25px; margin-left: 260px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">main()</div></div></div></foreignObject><text x="260" y="29" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">main()</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-5"><g><rect x="230" y="40" width="240" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 60px; margin-left: 231px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Perifériák inicializálása</div></div></div></foreignObject><text x="350" y="64" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Perifériák inicializálása</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-6"><g><rect x="230" y="90" width="240" height="39" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 110px; margin-left: 231px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">spawn()</div></div></div></foreignObject><text x="350" y="113" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">spawn()</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-8"><g><rect x="0" y="270" width="200" height="160" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-9"><g><rect x="15" y="280" width="90" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 295px; margin-left: 60px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">alarm\_task()</div></div></div></foreignObject><text x="60" y="299" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">alarm\_task()</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-11"><g><rect x="10" y="310" width="180" height="90" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 355px; margin-left: 11px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Állapotgép</div></div></div></foreignObject><text x="100" y="359" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Állapotgép</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-12"><g><rect x="250" y="230" width="200" height="210" rx="30" ry="30" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-13"><g><rect x="262" y="240" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 255px; margin-left: 322px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">scheduler\_task()</div></div></div></foreignObject><text x="322" y="259" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">scheduler\_task()</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-14"><g><rect x="260" y="270" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 290px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Parancsok fogadása</div></div></div></foreignObject><text x="350" y="294" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Parancsok fogadása</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-15"><g><rect x="260" y="319" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 339px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Események kiváltása</div></div></div></foreignObject><text x="350" y="343" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Események kiváltása</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-16"><g><rect x="490" y="190" width="200" height="300" rx="30" ry="30" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-17"><g><rect x="505" y="200" width="110" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 215px; margin-left: 560px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">network\_task()</div></div></div></foreignObject><text x="560" y="219" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">network\_task()</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-18"><g><rect x="500" y="230" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 250px; margin-left: 501px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Ethernet link kezelés</div></div></div></foreignObject><text x="590" y="254" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Ethernet link kezelés</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-19"><g><rect x="500" y="279" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 299px; margin-left: 501px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DHCP kliens</div></div></div></foreignObject><text x="590" y="303" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">DHCP kliens</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-20"><g><rect x="500" y="330" width="180" height="90" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 375px; margin-left: 501px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">MQTT kliens</div></div></div></foreignObject><text x="590" y="379" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">MQTT kliens</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-21"><g><rect x="500" y="430" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 450px; margin-left: 501px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">OTA kezelés</div></div></div></foreignObject><text x="590" y="454" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">OTA kezelés</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-22"><g><path d="M 500 352.5 Q 460 340 465 315 Q 470 290 446.37 290" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 441.12 290 L 448.12 286.5 L 446.37 290 L 448.12 293.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-23"><g><path d="M 190 377.5 Q 220 380 220 360 Q 220 340 253.63 339.16" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 258.88 339.03 L 251.97 342.7 L 253.63 339.16 L 251.8 335.7 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-24"><g><path d="M 260 290 Q 220 290 220 311.5 Q 220 333 196.37 332.61" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 191.12 332.52 L 198.18 329.14 L 196.37 332.61 L 198.06 336.13 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-25"><g><path d="M 440 339 Q 470 339 465 368.5 Q 460 398 493.63 397.58" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 498.88 397.51 L 491.93 401.1 L 493.63 397.58 L 491.84 394.1 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-26"><g><rect x="260" y="370" width="180" height="40" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 390px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Autodiscovery logika</div></div></div></foreignObject><text x="350" y="394" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Autodiscovery logika</text></switch></g></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-27"><g><path d="M 290 129 Q 290 180 200 205 Q 110 230 101.54 263.82" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 100.27 268.92 L 98.57 261.28 L 101.54 263.82 L 105.36 262.97 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-28"><g><path d="M 350 129 Q 350 170 350 223.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 350 228.88 L 346.5 221.88 L 350 223.63 L 353.5 221.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="VCQW6hEs_HFuUsdHcM73-29"><g><path d="M 410 129 Q 400 180 490 170 Q 580 160 587.99 183.96" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 589.65 188.94 L 584.11 183.41 L 587.99 183.96 L 590.75 181.19 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/src/images/hass-demo.png b/src/images/hass-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..09a791b2868eb64b383c70092c15b1df395232bb Binary files /dev/null and b/src/images/hass-demo.png differ diff --git a/src/images/mqtt.drawio.svg b/src/images/mqtt.drawio.svg index d79828ac5ab7d30d35e642debc1e9180e3a0f4ac..b344d23dcd247e1d3aa375c3b8853429fe766ac8 100644 --- a/src/images/mqtt.drawio.svg +++ b/src/images/mqtt.drawio.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file with editors other than draw.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="492px" height="351px" viewBox="-0.5 -0.5 492 351" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0" version="26.2.14"> <diagram name="Page-1" id="u-_sONg8PaacN-QFZamk"> <mxGraphModel dx="494" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="nID7ZsawUktWha8Jv44--1" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="160" y="410" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--2" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="130" y="540" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--3" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="160" y="670" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--4" value="broker" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="320" y="550" width="120" height="70" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--5" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="510" y="410" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--6" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="530" y="540" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--7" value="kliens" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> <mxGeometry x="510" y="670" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--9" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--1" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="320" y="510" as="sourcePoint" /> <mxPoint x="400" y="490" as="targetPoint" /> <Array as="points"> <mxPoint x="260" y="520" /> <mxPoint x="380" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--10" value="2. publish" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="270" y="450" width="70" height="30" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--11" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0.027;exitY=0.697;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--7" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="350" y="750" as="sourcePoint" /> <mxPoint x="400" y="700" as="targetPoint" /> <Array as="points"> <mxPoint x="410" y="740" /> <mxPoint x="310" y="710" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--12" value="1. subscribe" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="320" y="730" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--13" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.327;entryY=0.037;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--4" target="nID7ZsawUktWha8Jv44--7"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="410" y="700" as="sourcePoint" /> <mxPoint x="460" y="650" as="targetPoint" /> <Array as="points"> <mxPoint x="430" y="680" /> <mxPoint x="510" y="630" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--14" value="3. üzenet fogadása" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="375" y="670" width="130" height="30" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="nID7ZsawUktWha8Jv44--1"><g><ellipse cx="75" cy="45" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 45px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="75" y="49" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--2"><g><ellipse cx="45" cy="175" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 175px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="45" y="179" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--3"><g><ellipse cx="75" cy="305" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 305px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="75" y="309" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--4"><g><rect x="190" y="140" width="120" height="70" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 175px; margin-left: 191px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">broker</div></div></div></foreignObject><text x="250" y="179" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">broker</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--5"><g><ellipse cx="425" cy="45" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 45px; margin-left: 381px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="425" y="49" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--6"><g><ellipse cx="445" cy="175" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 175px; margin-left: 401px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="445" y="179" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--7"><g><ellipse cx="425" cy="305" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 305px; margin-left: 381px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens</div></div></div></foreignObject><text x="425" y="309" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--9"><g><path d="M 106.82 76.82 Q 130 110 190 75 Q 250 40 250 133.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 250 138.88 L 246.5 131.88 L 250 133.63 L 253.5 131.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--10"><g><rect x="140" y="40" width="70" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 55px; margin-left: 175px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">2. publish</div></div></div></foreignObject><text x="175" y="59" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">2. publish</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--11"><g><path d="M 382.43 322.73 Q 280 330 230 315 Q 180 300 217.41 215.82" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 219.55 211.02 L 219.9 218.84 L 217.41 215.82 L 213.5 216 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--12"><g><rect x="190" y="320" width="90" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 335px; margin-left: 235px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">1. subscribe</div></div></div></foreignObject><text x="235" y="339" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">1. subscribe</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--13"><g><path d="M 280 210 Q 300 270 340 245 Q 380 220 405.85 258.06" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 408.8 262.41 L 401.97 258.58 L 405.85 258.06 L 407.76 254.65 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--14"><g><rect x="245" y="260" width="130" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 275px; margin-left: 310px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">3. üzenet fogadása</div></div></div></foreignObject><text x="310" y="279" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">3. üzenet fogadása</text></switch></g></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="551px" height="381px" viewBox="-0.5 -0.5 551 381" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0" version="26.2.14"> <diagram name="Page-1" id="u-_sONg8PaacN-QFZamk"> <mxGraphModel dx="530" dy="724" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="nID7ZsawUktWha8Jv44--1" value="kliens 3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> <mxGeometry x="160" y="410" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--2" value="kliens 2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> <mxGeometry x="90" y="590" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--4" value="broker" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="320" y="550" width="120" height="70" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--5" value="kliens 4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> <mxGeometry x="510" y="410" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--7" value="kliens 1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> <mxGeometry x="550" y="690" width="90" height="90" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--9" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0.996;exitY=0.37;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#001DBC;fillColor=#0050ef;exitPerimeter=0;" parent="1" source="nID7ZsawUktWha8Jv44--1" target="nID7ZsawUktWha8Jv44--4" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="320" y="510" as="sourcePoint" /> <mxPoint x="400" y="490" as="targetPoint" /> <Array as="points"> <mxPoint x="280" y="470" /> <mxPoint x="380" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--10" value="3. publish (topic1)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1"> <mxGeometry x="250" y="400" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--11" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0.027;exitY=0.697;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fillColor=#0050ef;strokeColor=#001DBC;" parent="1" source="nID7ZsawUktWha8Jv44--7" target="nID7ZsawUktWha8Jv44--4" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="350" y="750" as="sourcePoint" /> <mxPoint x="400" y="700" as="targetPoint" /> <Array as="points"> <mxPoint x="440" y="740" /> <mxPoint x="380" y="680" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--12" value="1. subscribe (topic1)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1"> <mxGeometry x="370" y="740" width="130" height="30" as="geometry" /> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--13" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.327;entryY=0.037;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.869;exitY=1;exitDx=0;exitDy=0;fillColor=#0050ef;strokeColor=#001DBC;exitPerimeter=0;" parent="1" source="nID7ZsawUktWha8Jv44--4" target="nID7ZsawUktWha8Jv44--7" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="410" y="700" as="sourcePoint" /> <mxPoint x="460" y="650" as="targetPoint" /> <Array as="points"> <mxPoint x="430" y="680" /> <mxPoint x="510" y="630" /> </Array> </mxGeometry> </mxCell> <mxCell id="nID7ZsawUktWha8Jv44--14" value="3. üzenet (topic1)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1"> <mxGeometry x="460" y="610" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--2" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="220" y="610" as="sourcePoint" /> <mxPoint x="270" y="560" as="targetPoint" /> <Array as="points"> <mxPoint x="230" y="550" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-3" value="2. subscribe (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="110" y="540" width="130" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-6" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--5" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="350" y="380" as="sourcePoint" /> <mxPoint x="400" y="330" as="targetPoint" /> <Array as="points"> <mxPoint x="470" y="490" /> <mxPoint x="410" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-7" value="4. publish (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="390" y="410" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-8" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;entryX=1;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--4" target="nID7ZsawUktWha8Jv44--2"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="240" y="670" as="sourcePoint" /> <mxPoint x="290" y="620" as="targetPoint" /> <Array as="points"> <mxPoint x="240" y="690" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-9" value="4. üzenet (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="180" y="600" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-10" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--2" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="168.5" y="665" as="sourcePoint" /> <mxPoint x="321.5" y="670" as="targetPoint" /> <Array as="points"> <mxPoint x="160" y="730" /> <mxPoint x="320" y="680" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-11" value="5. unsubscribe (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="140" y="720" width="140" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-12" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.93;entryY=0.02;entryDx=0;entryDy=0;fillColor=#fa6800;strokeColor=#C73500;entryPerimeter=0;" edge="1" parent="1" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="545" y="500" as="sourcePoint" /> <mxPoint x="445" y="595" as="targetPoint" /> <Array as="points"> <mxPoint x="500" y="520" /> <mxPoint x="432" y="510" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-13" value="6. publish (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="460" y="520" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-16" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0.693;exitY=0.018;exitDx=0;exitDy=0;fillColor=#fa6800;strokeColor=#C73500;exitPerimeter=0;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--7" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="510" y="565" as="sourcePoint" /> <mxPoint x="639" y="618" as="targetPoint" /> <Array as="points"> <mxPoint x="610" y="575" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-17" value="7. subscribe (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="465" y="560" width="130" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-18" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.713;exitY=0.927;exitDx=0;exitDy=0;exitPerimeter=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--1" target="nID7ZsawUktWha8Jv44--4"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="270" y="540" as="sourcePoint" /> <mxPoint x="320" y="490" as="targetPoint" /> <Array as="points"> <mxPoint x="260" y="550" /> <mxPoint x="340" y="480" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-19" value="8. publish (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="240" y="470" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-20" value="" style="curved=1;endArrow=classic;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;entryX=0.054;entryY=0.371;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;fillColor=#fa6800;strokeColor=#C73500;entryPerimeter=0;" edge="1" parent="1" source="nID7ZsawUktWha8Jv44--4" target="nID7ZsawUktWha8Jv44--7"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="387" y="663" as="sourcePoint" /> <mxPoint x="513" y="720" as="targetPoint" /> <Array as="points"> <mxPoint x="400" y="660" /> <mxPoint x="423" y="720" /> <mxPoint x="520" y="680" /> </Array> </mxGeometry> </mxCell> <mxCell id="1DcpTbh7sDHWkL4HCO8W-21" value="8. üzenet (topic2)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> <mxGeometry x="430" y="660" width="120" height="30" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="nID7ZsawUktWha8Jv44--1"><g><ellipse cx="115" cy="55" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 55px; margin-left: 71px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens 3</div></div></div></foreignObject><text x="115" y="59" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens 3</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--2"><g><ellipse cx="45" cy="235" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 235px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens 2</div></div></div></foreignObject><text x="45" y="239" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens 2</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--4"><g><rect x="230" y="150" width="120" height="70" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 185px; margin-left: 231px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">broker</div></div></div></foreignObject><text x="290" y="189" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">broker</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--5"><g><ellipse cx="465" cy="55" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 55px; margin-left: 421px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens 4</div></div></div></foreignObject><text x="465" y="59" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens 4</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--7"><g><ellipse cx="505" cy="335" rx="45" ry="45" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 335px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">kliens 1</div></div></div></foreignObject><text x="505" y="339" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">kliens 1</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--9"><g><path d="M 159.64 43.3 Q 190 70 240 60 Q 290 50 290 143.63" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/><path d="M 290 148.88 L 286.5 141.88 L 290 143.63 L 293.5 141.88 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 29, 188), rgb(178, 203, 255)); stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--10"><g><rect x="160" y="0" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 15px; margin-left: 220px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">3. publish (topic1)</div></div></div></foreignObject><text x="220" y="19" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">3. publish (topic1)</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--11"><g><path d="M 462.43 352.73 Q 350 340 320 310 Q 290 280 290 226.37" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/><path d="M 290 221.12 L 293.5 228.12 L 290 226.37 L 286.5 228.12 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 29, 188), rgb(178, 203, 255)); stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--12"><g><rect x="280" y="340" width="130" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 355px; margin-left: 345px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">1. subscribe (topic1)</div></div></div></foreignObject><text x="345" y="359" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">1. subscribe (topic1)</text></switch></g></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--13"><g><path d="M 334.28 220 Q 340 280 380 255 Q 420 230 484.73 289.04" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/><path d="M 488.6 292.58 L 481.07 290.45 L 484.73 289.04 L 485.79 285.27 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 29, 188), rgb(178, 203, 255)); stroke: light-dark(rgb(0, 29, 188), rgb(178, 203, 255));"/></g></g><g data-cell-id="nID7ZsawUktWha8Jv44--14"><g><rect x="370" y="210" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 225px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">3. üzenet (topic1)</div></div></div></foreignObject><text x="430" y="229" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">3. üzenet (topic1)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-1"><g><path d="M 76.82 203.18 Q 140 150 222.28 166" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 228.9 167.29 L 219.21 169.99 L 222.28 166 L 220.93 161.15 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-3"><g><rect x="20" y="140" width="130" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 155px; margin-left: 85px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">2. subscribe (topic2)</div></div></div></foreignObject><text x="85" y="159" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">2. subscribe (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-6"><g><path d="M 420 55 Q 380 90 350 70 Q 320 50 320 142.13" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 320 148.88 L 315.5 139.88 L 320 142.13 L 324.5 139.88 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-7"><g><rect x="300" y="10" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 25px; margin-left: 360px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">4. publish (topic2)</div></div></div></foreignObject><text x="360" y="29" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">4. publish (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-8"><g><path d="M 230 202.5 Q 150 290 84.32 269.2" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 77.89 267.16 L 87.82 265.59 L 84.32 269.2 L 85.11 274.17 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-9"><g><rect x="90" y="200" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 215px; margin-left: 150px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">4. üzenet (topic2)</div></div></div></foreignObject><text x="150" y="219" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">4. üzenet (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-10"><g><path d="M 45 280 Q 70 330 150 305 Q 230 280 256.48 227.04" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 259.5 221 L 259.5 231.06 L 256.48 227.04 L 251.45 227.04 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-11"><g><rect x="50" y="320" width="140" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 335px; margin-left: 120px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">5. unsubscribe (topic2)</div></div></div></foreignObject><text x="120" y="339" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">5. unsubscribe (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-12"><g><path d="M 455 100 Q 410 120 376 115 Q 342 110 341.68 143.53" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 341.61 150.28 L 337.2 141.24 L 341.68 143.53 L 346.2 141.33 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-13"><g><rect x="370" y="120" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 135px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">6. publish (topic2)</div></div></div></foreignObject><text x="430" y="139" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">6. publish (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-16"><g><path d="M 522.37 291.62 Q 520 175 356.29 201.48" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 351.1 202.32 L 357.45 197.75 L 356.29 201.48 L 358.57 204.66 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-17"><g><rect x="375" y="160" width="130" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 175px; margin-left: 440px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">7. subscribe (topic2)</div></div></div></foreignObject><text x="440" y="179" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">7. subscribe (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-18"><g><path d="M 134.17 93.43 Q 170 150 210 115 Q 250 80 258.89 142.21" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 259.84 148.89 L 254.11 140.62 L 258.89 142.21 L 263.02 139.35 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-19"><g><rect x="150" y="70" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 85px; margin-left: 210px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">8. publish (topic2)</div></div></div></foreignObject><text x="210" y="89" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">8. publish (topic2)</text></switch></g></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-20"><g><path d="M 320 220 Q 310 260 321.5 290 Q 333 320 381.5 300 Q 430 280 459.93 317.26" fill="none" stroke="#c73500" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/><path d="M 464.16 322.52 L 455.01 318.32 L 459.93 317.26 L 462.03 312.68 Z" fill="#c73500" stroke="#c73500" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 53, 0), rgb(255, 145, 100)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));"/></g></g><g data-cell-id="1DcpTbh7sDHWkL4HCO8W-21"><g><rect x="340" y="260" width="120" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 275px; margin-left: 400px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; ">8. üzenet (topic2)</div></div></div></foreignObject><text x="400" y="279" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">8. üzenet (topic2)</text></switch></g></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/src/images/pir-det.jpg b/src/images/pir-det.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea186beeb7fb089873a3e97f736900b4414ab600 Binary files /dev/null and b/src/images/pir-det.jpg differ diff --git a/src/images/pir.png b/src/images/pir.png new file mode 100644 index 0000000000000000000000000000000000000000..036cd09e9e2b6daedfcba6febd793a55d88b702f Binary files /dev/null and b/src/images/pir.png differ