Prečo?
Mám cca 15 ročný systém inteligentnej domácnosti INELS2 postavený na centrálnej jednotke CU2, ktorý je považovaný za uzavretý (vendor-lock-in) ekosystém. Teda nemá verejné dokumentované dátové rozhranie (API) a čítanie ľubovoľných informácií o senzoroch, relé atď nie je oficálne podporované. Aktuálne nechcem riešiť výmenu za nový systém nakoľko to nie je len o peniazoch, ale aj o prerobení komplet rozvádzača (množstvo relátok atď.). A tento starší systém, ktorý bol toho času jeden z prvých na trhu mi v podstate stačí a vyhovuje aj keď nie je dátovo otvorený.
Potreba čítania informácií zo systému INELS2 vznikla v momente, keď som chcel vidieť priebeh teploty v jednotlivých miestnostiach počas dňa, či a ako sa drží nakonfigurovaných pravidiel počas vykurovacej sezóny. Takisto ma to zaujímalo v lete, ako sa mi prehrieva dom.
Zadanie
Pôvodne som si myslel, že nakoľko na internete nie sú žiadne informácie o INELS2 API a nikto za 15 rokov túto oblasť neprebádal, že to asi nepôjde.
Nakoľko INELS2 nemá oficiálne API, zadal som môjmu 14 ročnému synovi (ôsmak) Samkovi úlohu: identifikuj možnosti komunikácie s centrálnou jednotkou INELS a urob novú aplikáciu, ktorá:
- loguje teplotu vo všetkých miestnostiach do JSON alebo databázy
- logovací interval nech sa dá nastaviť
- chcem responzívnu WEB aplikáciu pre PC/mobil/tablet
- v aplikácii chcem vidieť aktuálnu teplotu vo všetých miestnostiach
- v aplikácii chcem riadiť svetlá v jednotlivých miestnostiach (zapni/vypni)
- v aplikácii chcem riadiť žalúzie v jednotlivých miestnostiach
Nakoľko existujúce natívne aplikácie pre Android majú svoje muchy a obmedzenia, cieľom bolo urobiť vlastnú appku, ktorá ale bude plattformovo nezávislá. Preto zadanie „WEB aplikácia“. Zo začiatku som Samkovi pomáhal s nápadmi, ale veľmi rýchlo ma prerástol a začal tvoriť použiteľné riešenia behom pár minút.
Ako sme postupovali?
Na začiatku sme sa snažili sniffovať komunikáciu medzi CU2 a iMM Connection serverom(Raspberry PI s Linuxom) ako i medzi pôvodou INELS Android aplikciou a iMM Connection serverom. Avšak zisťovať typ protokolu a jeho štruktúru sa nám popravde moc nechcelo, aj keď sa to určite dá.
Vedeli sme, že aplikáciu pre komunikáciu s Connection serverom alebo priamo s CU2 budeme písať v Pythone a WEB aplikáciu pre vizualizáciu dát (pre užívateľa) budeme robiť v HTML+JS+CSS bez použitia externého JS/CSS frameworku.
Nakoniec sa nám podarilo zistiť , že iMM Connection Server síce nepodporuje REST-ové ani SOAP API, ale rozhranie pre základné operácie poskytuje. To sme využili na napísanie aplikácie.
Výsledná aplikácia
Bol som extrémne prekvapený ako rýchlo a v akej kvalite Samko urobil novú aplikáciu. Povedal by som, že lepšie ako INELS aplikácia, nakoľko je použiteľná v ľubovoľnom zariadení a loguje teplotu vo všetkých miestnostiach. Prikladám ukážku.



Záver
Aplikáciu Samko ďalej rozvíja. Ak by niekto potreboval niečo podobné, vieme s tým pomôcť. Aplikáciu je možné prepojiť aj s inými dátami, inými zariadeniami na mieru. Ako príklad uvádzam robotickú kosačku Segway Navimow, ktorej monitoring aj ovládanie sme si dorobili do aplikácie. Segway podobne nemá oficiálne API a podobným spôsobom sme hľadali spôsob datovej komunikácie s ňou. Avšak toto sa tiež z veľkej časti podarilo.
Aplikáciu nedávame von verejne, pretože je urobená pre nás na mieru. Ak by mal niekto záujem, Samko vie prerobiť behom pár hodín pre účely niekoho iného za veľmi symbolický poplatok (na Samkovo štúdium resp. drobné poplatky za vývojové nástroje, ktoré používa).