Nedávno sme vám predstavili . Tento článok bol pôvodne zamýšľaný ako ukážka jeho firmvéru a riadiaceho systému. Ale aby sme vysvetlili logiku fungovania termostatu a to, čo sme implementovali, je potrebné načrtnúť celú koncepciu ako celok.

O automatizácii
Podľa kategórií môžeme celú automatizáciu rozdeliť do troch hlavných skupín:
Kategória 1 — samostatné „inteligentné“ zariadenia. Získavate rôzne zariadenia od rôznych výrobcov, ako sú žiarovky, rýchlovarné kanvice a podobne. Výhody: každé zariadenie rozširuje možnosti a zvyšuje pohodlie. Nevýhody: pre každého nového výrobcu je potrebná vlastná aplikácia. Protokoly zariadení od rôznych výrobcov sú často nekompatibilné.
Kategória 2 — inštalácia jednodeskového PC alebo x86 kompatibilného zariadenia. To odstraňuje obmedzenia výpočtovej sily a na toto zariadenie sa inštaluje MajorDoMo alebo iná serverová distribúcia na správu inteligentnej domácnosti. Týmto spôsobom sú zariadenia väčšiny výrobcov prepojené v jednom informačnom priestore. T.j. vytvára sa vlastný server pre inteligentnú domácnosť. Výhody: kompatibilita pod jedným centrom, čo poskytuje rozšírené možnosti správy. Nevýhody: pri poruche servera sa celý systém vráti do fázy 1, t.j. stáva sa roztrhnutým alebo nepoužiteľným.
Kategória 3 — najnáročnejšia varianta. V štádiu renovácie sa zakladajú všetky komunikácie a duplikujú sa všetky systémy. Výhody: všetko je dotiahnuté do dokonalosti, a potom sa dom skutočne stáva inteligentným. Nevýhody: mimoriadne vysoké náklady v porovnaní s kategóriami 1 a 2, potreba premyslieť všetko dopredu a zohľadniť každý detail.
Väčšina používateľov si vyberá variantu jedna, a potom pomaly prechádzajú k variante dve. A v budúcnosti najodolnejší dospejú k variante 3.
Existuje však varianta, ktorú môžeme nazvať distribuovaným systémom: každé samostatné zariadenie bude zároveň serverom aj klientom. V podstate je to pokus spojiť variant 1 a variant 2. Zobrať všetky ich výhody a vylúčiť nevýhody, nájsť zlatú strednú cestu.
Možno niekto povie, že takáto alternatíva už bola vyvinutá. Ale takéto riešenia sú úzko zamerané; pre ľudí zdatných v programovaní. Naším cieľom je znížiť prah vstupu do takýchto distribuovaných systémov, či už v podobe koncových zariadení, alebo integrácie existujúcich zariadení do našej sústavy. V prípade termostatu používateľ jednoducho odstráni svoj starý termostat, nainštaluje smart termostat a pripojí k nemu existujúce senzory. Bez akýchkoľvek ďalších akcií.
Zvážme integráciu do našej sústavy na príklade.
Predstavme si, že v sieti máme 8 modulov Sonoff. Niektorým používateľom stačí ovládanie cez cloud Sonoff (kategória 1). Niektorí začnú používať externý firmware a plynule prejdú do kategórie 2. Väčšina externých firmvérov funguje na rovnakom princípe: prenos údajov na MQTT server. OpenHub, Majordomo alebo akýkoľvek iný slúži jednej najdôležitejšej úlohe – zjednotiť roztrhnuté zariadenia do jedného informačného priestoru, umiestneného buď na internete, alebo v lokálnej sieti. Teda prítomnosť Servera je nevyhnutná. Z toho vyplýva hlavný problém – pri zlyhaní Servera celý systém prestáva fungovať samostatne. Na prevenciu tohto zlyhania sa systémy komplikujú, pridávajú sa ručné spôsoby ovládania, ktoré duplikujú automatizáciu v prípade zlyhania Servera.
My sme sa vydali inou cestou, kde každé zariadenie je samostatné. Tým pádom Server nehrá rozhodujúcu rolu, ale iba rozširuje funkčnosť.
Vráťme sa k myšlienkovému experimentu. Znova vezmeme tých istých 8 modulov Sonoff a nainštalujeme do nich firmware Lytko. Vo všetkých firmvérov Lytko je implementovaná funkcia . SSDP je sieťový protokol založený na súbore internetových protokolov, ktorý slúži na oznamovanie a objavovanie sieťových služieb. Odpoveď na dotaz môže byť štandardná aj rozšírená. Do tejto odpovede sme zahrnuli okrem štandardných funkcií vytvorenie zoznamu zariadení v sieti. Týmto spôsobom sa zariadenia samy navigujú a každé z nich má takýto zoznam. Príklad SSDP zoznamu:
"ssdpList":
{
"id": 94967291,
"ip": "192.168.x.x",
"type": "thermostat"
},
{
"id": 94967282,
"ip": "192.168.x.x",
"type": "thermostat"
}Ako je vidieť z príkladu, zoznam obsahuje id zariadení, ip-adresu v sieti, typ bloku (v našom prípade – termostat na báze Sonoff). Tento zoznam sa aktualizuje raz za dve minúty (tento interval je dostatočný na reakciu na dynamickú zmenu počtu zariadení v sieti). Týmto spôsobom sledujeme pridávanie, zmeny a odpojenie zariadení bez akýchkoľvek akcií zo strany používateľa. Tento zoznam sa odosiela do prehliadača alebo mobilnej aplikácie, a skript automaticky vytvára stránku so stanoveným počtom blokov. Každý blok zodpovedá jednému zariadeniu/senzoru/kontroléru. Vizualne zoznam vyzerá takto:

Ale čo ak sú k esp8266/esp32 pripojené iné rádio-senzory cez cc2530 (ZigBee) alebo nrf24 (MySensors)?
O projektoch
Na trhu existujú rôzne distribuované systémy. Náš systém umožňuje integráciu s najpopulárnejšími.
Nižšie sú uvedené projekty, ktoré sa nejakým spôsobom snažia zmeniť situáciu s nekompatibilitou rôznych výrobcov medzi sebou. To sú napríklad: , alebo . sú viazané na MQTT-serveri, takže nie sú vhodné pre tento príklad.
Jednou z možností realizácie MySensors je brána založená na ESP8266. Ostatné príklady sú na ESP32. A do nich môžeme implementovať náš princíp práce na objavovanie a vytváranie zoznamu zariadení.
Urobme ešte jeden myšlienkový experiment. Máme bránu ZESP32 alebo SLS Gateway, alebo MySensors. Ako ich môžeme spojiť do jedného informačného priestoru? K štandardným funkciám týchto brán pridáme knižnicu protokolu SSDP. Pri prístupe k tomuto kontroléru prostredníctvom SSDP, k štandardnej odpovedi pridá zoznam zariadení, ktoré sú k nemu pripojené. Na základe týchto informácií prehliadač vytvorí stránku. V celkovom zmysle to bude vyzerať takto:

Webové rozhranie

PWA-aplikácia
"ssdpList":
{
"id": 94967291, // unikátny identifikátor zariadenia
"ip": "192.168.x.x", // ip adresa v sieti
"type": "thermostat" // typ zariadenia
},
{
"id": 94967292,
"ip": "192.168.x.x",
"type": "thermostat"
},
{
"id": 94967293,
"ip": "192.168.x.x",
"type": "thermostat"
},
{
"id": 13587532,
"type": "switch"
},
{
"id": 98412557,
"type": "smoke"
},
{
"id": 57995113,
"type": "contact_sensor"
},
{
"id": 74123668,
"type": "temperature_humidity_pressure_sensor"
},
{
"id": 74621883,
"type": "temperature_humidity_sensor"
}
Z príkladu vidíme, že zariadenia sa pridávajú nezávisle od seba. Pripojené sú 3 termostaty s vlastnými IP adresami a 5 rôznych senzorov s unikátnymi ID. Ak je senzor pripojený k Wi-Fi sieti, bude mať svoju IP adresu, ak je pripojený k bráne, potom IP adresa zariadenia bude IP adresa brány.
Na komunikáciu so zariadeniami používame WebSocket. To umožňuje minimalizovať náklady na zdroje v porovnaní s GET požiadavkami a získať informácie dynamicky pri pripojení alebo zmene.
Údaje sa berú priamo z toho zariadenia, ktorému patrí blok, mimo server. Takže pri poruche ktoréhokoľvek zariadenia systém naďalej funguje. Na webovom rozhraní sa len nezobrazí chýbajúce zariadenie zo zoznamu. Ale signál o strate, ak je to potrebné, príde vo forme oznámenia do aplikácie používateľa.
Prvá pokus o realizáciu takého prístupu bola PWA aplikácia. To umožňuje uchovávať databázu blokov na zariadení používateľa a žiadať len potrebné údaje. Avšak z dôvodu špecifík štruktúry je tento variant neúplný. A východisko je jedno — natívne aplikácie pre Android a IOS, ktoré sú teraz v aktívnom vývoji. Aplikácia bude predvolene fungovať iba vo vnútornej sieti. V prípade potreby je možné prepnúť všetko na externé riadenie. Tak, keď používateľ opustí lokálnu sieť, aplikácia sa automaticky prepne na cloud.
Externé riadenie — úplné duplikovanie stránky. Po aktivácii stránky sa používateľ môže prihlásiť na serveri a riadiť zariadenia cez osobný účet. Takto server rozširuje funkcie, čo umožňuje riadiť zariadenia mimo domu a nie byť viazaný na preposielanie portov alebo dedikovanú IP.
Takto uvedený variant nemá nevýhody serverového prístupu a má niekoľko výhod, ako je flexibilita pri pripájaní nových zariadení.
O termostate
Zvážme systém riadenia na príklade nášho termostatu.
Predpokladá:
- Reguláciu teploty každého termostatu (zobrazuje sa vo forme samostatného bloku);
- Nastavenie rozvrhu práce termostatu (ráno, deň, večer, noc);
- Výber Wi-Fi siete a pripojenie zariadenia k nej;
- Aktualizáciu zariadenia „vzduchom“;
- Nastavenie MQTT;
- Nastavenie siete, ku ktorej je zariadenie pripojené.

Okrem správy prostredníctvom webového rozhrania, sme zahrnuli aj klasické ovládanie — stlačeniami na displeji. Na palube sa nachádza monitor Nextion NX3224T024 s veľkosťou 2,4 palca. Na tento model sme sa rozhodli kvôli jednoduchosti práce so zariadením. Avšak, momentálne vyvíjame vlastný monitor založený na STM32. Jeho funkčnosť nie je ničím horšia ako pri Nextion, avšak bude lacnejší, čo pozitívne ovplyvní konečnú cenu zariadenia.

Rovnako ako každý rešpektovaný termostatový displej, aj náš Nextion dokáže:
- nastaviť požadovanú teplotu užívateľa (tlačidlami napravo);
- zapínať a vypínať režim práce podľa rozvrhu (tlačidlo N);
- zobrazovať prácu relé (šípka vľavo);
- má ochranu pred deťmi (fyzické stlačenia sú zablokované, kým nie je zámok odstránený);
- zobrazuje úroveň signálu WiFi.
Okrem toho, pomocou monitora je možné:
- vybrať typ nainštalovaného snímača u užívateľa;
- riadiť funkciu ochrany pred deťmi;
- aktualizovať firmvér.

Kliknutím na pruh WiFi sa užívateľ dozvie informácie o pripojenej sieti. QR kód sa používa na spárovanie zariadenia vo firmvéri HomeKit.

Demonštrácia práce s displejom:

Vyvinuli sme s troma pripojenými termostatmi.
Opýtate sa: “Čím je váš termostat výnimočný?” V súčasnosti je na trhu množstvo termostatov s funkciou Wi-Fi, časovým riadením a dotykovým ovládaním. A nadšenci vytvorili moduly na interakciu s väčšinou populárnych systémov inteligentného domu (Majordomo, HomeAssistant a pod.).
Náš termostat je kompatibilný s takýmito systémami a disponuje všetkým uvedeným. Jeho výnimočnosť spočíva v tom, že termostat sa neustále vylepšuje, vďaka flexibilite systému. S každou aktualizáciou sa bude funkčnosť rozširovať. K štandardnému spôsobu ovládania systému (podľa rozvrhu) pridáme adaptívny. Aplikácia umožňuje získať geolokáciu užívateľa. Vďaka tomu bude systém dynamicky meniť režimy práce v závislosti od jeho polohy. A modul počasia umožní prispôsobiť sa poveternostným podmienkam.
A rozširovateľnosť. Každý, kto chce, môže nahradiť svoj bežný termostat naším. S minimálnym úsilím. Vybrali sme 5 najpopulárnejších senzorov dostupných na trhu a pridali ich podporu. Ale aj v prípade exkluzívnych charakteristík senzora, používateľ bude môcť pripojiť ho k nášmu termostatu. Na to bude potrebné vykonať kalibráciu termostatu na prácu s konkrétnym senzorom. Pokyny poskytneme.
Pri pripojení termostatu alebo akéhokoľvek iného zariadenia sa okamžite objaví všade: a vo webovom rozhraní, a v PWA aplikácii. Pridanie zariadenia prebieha automaticky: stačí ho pripojiť k Wi-Fi sieti.
Náš systém nepotrebuje server a v prípade jeho zlyhania sa neprevedie do nefunkčného stavu. Dokonca aj pri zlyhaní jednej z komponentov systém nezačne pracovať na havarijnom scenári. Ovládače, senzory, zariadenia — každý prvok je zároveň serverom aj klientom, preto je úplne autonómny.
Pre záujemcov — naše sociálne siete: , , , , .
Email: shop@lytko.com
P. S. nepodnecujeme zrieknutie sa servera. Podporujeme aj MQTT server a máme vlastné cloudové riešenie. Naším cieľom je zvýšiť stabilitu a spoľahlivosť systému na kvalitne novú úroveň. Aby server nebol slabým článkom, ale dopĺňal funkčnosť a robil systém pohodlnejším.
Zdroj: habr.com
