{"id":55356,"date":"2020-01-18T00:00:00","date_gmt":"2020-01-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/lytko-obedinyaet"},"modified":"2020-02-18T14:03:28","modified_gmt":"2020-02-18T11:03:28","slug":"lytko-obedinyaet","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/lytko-obedinyaet","title":{"rendered":"Lytko \u0142\u0105czy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jaki\u015b czas temu przedstawili\u015bmy Ci <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/474420\/\">inteligentny termostat<\/a><\/noindex>. Dzisiejszy artyku\u0142 pocz\u0105tkowo mia\u0142 by\u0107 demonstracj\u0105 jego oprogramowania i systemu zarz\u0105dzania. Aby jednak wyja\u015bni\u0107 logik\u0119 dzia\u0142ania termostatu oraz to, co wdro\u017cyli\u015bmy, konieczne jest przedstawienie ca\u0142ej koncepcji w ca\u0142o\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/2cb26fc59fd6708614e52873f2b5fd22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>O automatyzacji<\/h3>\n<p>\nZasadniczo, ca\u0142\u0105 automatyzacj\u0119 mo\u017cna podzieli\u0107 na trzy kategorie:<br \/>\n<u>Kategoria 1<\/u> \u2014 oddzielne \u201einteligentne\u201d urz\u0105dzenia. Kupujesz od r\u00f3\u017cnych producent\u00f3w \u017car\u00f3wki, czajniki itp. Plusy: ka\u017cde urz\u0105dzenie zwi\u0119ksza mo\u017cliwo\u015bci i podnosi komfort. Minusy: dla ka\u017cdego nowego producenta potrzebna jest swoj\u0105 aplikacja. Protoko\u0142y urz\u0105dze\u0144 r\u00f3\u017cnych producent\u00f3w cz\u0119sto s\u0105 ze sob\u0105 niekompatybilne.<\/p>\n<p><u>Kategoria 2<\/u> \u2014 instalacja komputera jednop\u0142ytkowego lub zgodnego z x86. To usuwa ograniczenia dotycz\u0105ce mocy obliczeniowej, a na takim urz\u0105dzeniu zainstalowany jest MajorDoMo lub inna dystrybucja serwerowa do zarz\u0105dzania inteligentnym domem. W ten spos\u00f3b urz\u0105dzenia wi\u0119kszo\u015bci producent\u00f3w \u0142\u0105cz\u0105 si\u0119 w jednolit\u0105 przestrze\u0144 informacyjn\u0105. Tzn. powstaje w\u0142asny serwer dla inteligentnego domu. Plusy: kompatybilno\u015b\u0107 w ramach jednego centrum, co daje rozszerzone mo\u017cliwo\u015bci zarz\u0105dzania. Minusy: w przypadku awarii serwera ca\u0142y system wraca do etapu 1, tzn. staje si\u0119 rozdrobniony lub staje si\u0119 bezu\u017cyteczny.<\/p>\n<p><u>Kategoria 3<\/u> \u2014 najbardziej hardcore'owa opcja. Na etapie remontu zak\u0142adane s\u0105 wszystkie komunikacje i duplikowane s\u0105 wszystkie systemy. Plusy: wszystko doprowadzone do idea\u0142u i wtedy dom staje si\u0119 naprawd\u0119 inteligentny. Minusy: skrajna drogo\u015b\u0107 w por\u00f3wnaniu z kategoriami 1 i 2, potrzeba przemy\u015blenia wszystkiego z wyprzedzeniem i uwzgl\u0119dnienia ka\u017cdego szczeg\u00f3\u0142u.<\/p>\n<p>Wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w wybiera opcj\u0119 pierwsz\u0105, a nast\u0119pnie stopniowo przechodzi do opcji drugiej. A w dalszym etapie najtrwalsi dochodz\u0105 do opcji trzeciej. <\/p>\n<p>Istnieje jednak mo\u017cliwo\u015b\u0107, kt\u00f3r\u0105 mo\u017cna nazwa\u0107 systemem rozproszonym: ka\u017cde oddzielne urz\u0105dzenie b\u0119dzie jednocze\u015bnie serwerem i klientem. W istocie jest to pr\u00f3ba po\u0142\u0105czenia opcji 1 i opcji 2. Wzi\u0105\u0107 wszystkie ich plusy i wyeliminowa\u0107 minusy, znale\u017a\u0107 z\u0142oty \u015brodek. <\/p>\n<p>Mo\u017cliwe, \u017ce kto\u015b powie, \u017ce taka opcja ju\u017c zosta\u0142a opracowana. Jednak takie rozwi\u0105zania s\u0105 w\u0105sko ukierunkowane; s\u0105 przeznaczone dla os\u00f3b dobrze zaznajomionych z programowaniem. Naszym celem jest obni\u017cenie progu dost\u0119pu do takich rozproszonych system\u00f3w zar\u00f3wno w postaci urz\u0105dze\u0144 ko\u0144cowych, jak i integracji istniej\u0105cych urz\u0105dze\u0144 w nasz system. W przypadku termostatu u\u017cytkownik po prostu demontuje sw\u00f3j stary termostat, instaluje inteligentny i pod\u0142\u0105cza do niego posiadane czujniki. Bez \u017cadnych dodatkowych dzia\u0142a\u0144.<\/p>\n<p>Rozwa\u017cmy integracj\u0119 w naszym systemie na przyk\u0142adzie. <\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce w naszej sieci znajduje si\u0119 8 modu\u0142\u00f3w Sonoff. Niekt\u00f3rzy u\u017cytkownicy b\u0119d\u0105 zadowoleni z zarz\u0105dzania przez chmur\u0119 Sonoff (kategoria 1). Niekt\u00f3rzy z nich zaczn\u0105 korzysta\u0107 z oprogramowania innych firm i przejd\u0105 w p\u0142ynny spos\u00f3b do kategorii 2. Wi\u0119kszo\u015b\u0107 zewn\u0119trznych oprogramowa\u0144 dzia\u0142a na tej samej zasadzie: przesy\u0142anie danych na serwer MQTT. OpenHub, Majordomo lub jakikolwiek inny s\u0142u\u017cy jednemu celowi \u2013 po\u0142\u0105czeniu rozproszonych urz\u0105dze\u0144 w jedn\u0105 przestrze\u0144 informacyjn\u0105, znajduj\u0105c\u0105 si\u0119 albo w Internecie, albo w sieci lokalnej. W zwi\u0105zku z tym obecno\u015b\u0107 serwera jest obowi\u0105zkowa. St\u0105d wynika g\u0142\u00f3wny problem \u2013 w przypadku awarii serwera ca\u0142y system przestaje dzia\u0142a\u0107 autonomicznie. Aby temu zapobiec, systemy si\u0119 komplikuj\u0105, dodawane s\u0105 r\u0119czne metody zarz\u0105dzania, kt\u00f3re zdubluj\u0105 automatyk\u0119 w przypadku awarii serwera. <\/p>\n<p>My wybrali\u015bmy inn\u0105 drog\u0119, w kt\u00f3rej ka\u017cde urz\u0105dzenie jest samowystarczalne. W ten spos\u00f3b rola serwera nie jest decyduj\u0105ca, a jedynie rozszerza funkcjonalno\u015b\u0107.<\/p>\n<p>Wr\u00f3\u0107my do naszego eksperymentu my\u015blowego. Ponownie we\u017amy te same 8 modu\u0142\u00f3w Sonoff i zainstalujmy w nich oprogramowanie Lytko. W ca\u0142ym oprogramowaniu Lytko zaimplementowano funkcj\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Simple_Service_Discovery_Protocol\">SSDP<\/a><\/noindex>. SSDP to protok\u00f3\u0142 sieciowy oparty na zestawie protoko\u0142\u00f3w Internetu, s\u0142u\u017c\u0105cy do og\u0142aszania i odkrywania us\u0142ug sieciowych. Odpowied\u017a na zapytanie mo\u017ce mie\u0107 form\u0119 standardow\u0105 lub rozszerzon\u0105. Wprowadzili\u015bmy w tej odpowiedzi opr\u00f3cz standardowych funkcji tworzenie listy urz\u0105dze\u0144 w sieci. W ten spos\u00f3b urz\u0105dzenia same siebie znajduj\u0105, a ka\u017cde z nich b\u0119dzie mia\u0142o tak\u0105 list\u0119. Przyk\u0142ad listy SSDP:<\/p>\n<pre><code class=\"json\">\"ssdpList\": \n\t{\n\t\t\"id\": 94967291,  \n\t\t\"ip\": \"192.168.x.x\",\n                \"type\": \"termostat\"\n\t}, \n\t{\n\t\t\"id\": 94967282,\n\t\t\"ip\": \"192.168.x.x\",\n                \"type\": \"termostat\"\n\t}<\/code><\/pre>\n<p>\nJak wida\u0107 z przyk\u0142adu, lista obejmuje identyfikatory urz\u0105dze\u0144, adresy IP w sieci, typ bloku (w naszym przypadku \u2013 termostat oparty na Sonoff). Ta lista jest aktualizowana co dwie minuty (ten czas jest wystarczaj\u0105cy do reagowania na dynamiczne zmiany liczby urz\u0105dze\u0144 w sieci). W ten spos\u00f3b monitorujemy dodawanie, zmian\u0119 i wy\u0142\u0105czanie urz\u0105dze\u0144 bez jakichkolwiek dzia\u0142a\u0144 ze strony u\u017cytkownika. Lista ta jest przesy\u0142ana do przegl\u0105darki lub aplikacji mobilnej, a skrypt samodzielnie generuje stron\u0119 z okre\u015blon\u0105 liczb\u0105 blok\u00f3w. Ka\u017cdy blok odpowiada jednemu urz\u0105dzeniu\/sensorowi\/kontrolerowi. Wizualnie lista wygl\u0105da tak:<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/743abfe57e451aac901db58ed5d81a00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAle co, je\u015bli do esp8266\/esp32 s\u0105 pod\u0142\u0105czone inne czujniki radiowe poprzez cc2530 (ZigBee) lub nrf24 (MySensors)? <\/p>\n<h3>O projektach<\/h3>\n<p>\nNa rynku istnieje wiele r\u00f3\u017cnych system\u00f3w rozproszonych. Nasz system pozwala na integracj\u0119 z najpopularniejszymi rozwi\u0105zaniami. <\/p>\n<p>Poni\u017cej przedstawione s\u0105 projekty, kt\u00f3re w r\u00f3\u017cny spos\u00f3b staraj\u0105 si\u0119 zmieni\u0107 sytuacj\u0119 z niesp\u00f3jno\u015bci\u0105 r\u00f3\u017cnych producent\u00f3w. Na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/slsys\">SLS Gateway<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/mysensors\">MySensors <\/a><\/noindex> lub <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/zesp32\">ZESP32<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.zigbee2mqtt.io\/\">ZigBee2MQTT <\/a><\/noindex> jest oparty na serwerze MQTT, dlatego nie nadaje si\u0119 do tego przyk\u0142adu. <\/p>\n<p>Jednym z wariant\u00f3w realizacji MySensors jest brama oparta na ESP8266. Pozosta\u0142e przyk\u0142ady dotycz\u0105 ESP32. Mo\u017cna w nich wdro\u017cy\u0107 nasz\u0105 zasad\u0119 dzia\u0142ania w zakresie wykrywania i tworzenia listy urz\u0105dze\u0144. <\/p>\n<p>Przeprowadzimy jeszcze jeden my\u015blowy eksperyment. Mamy bram\u0119 ZESP32, SLS Gateway lub MySensors. Jak mo\u017cna je zintegrowa\u0107 w jednolitej przestrzeni informacyjnej? Do standardowych funkcji tych bram dodamy bibliotek\u0119 protoko\u0142u SSDP. Po zwr\u00f3ceniu si\u0119 do tego kontrolera przez SSDP, doda on do standardowej odpowiedzi list\u0119 urz\u0105dze\u0144, kt\u00f3re s\u0105 do niego pod\u0142\u0105czone. Na podstawie tych informacji przegl\u0105darka wygeneruje stron\u0119. W og\u00f3lnym zarysie b\u0119dzie to wygl\u0105da\u0107 tak:<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/8fba0ebb6be1ee35db010a819e87425c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interfejs webowy<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/627baaf58524b92261c55408479606d1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Aplikacja PWA<\/i><\/p>\n<pre><code class=\"json\">\"ssdpList\": \n{\n   \"id\": 94967291, \/\/ unikalny identyfikator urz\u0105dzenia\n   \"ip\": \"192.168.x.x\", \/\/ adres ip w sieci\n   \"type\": \"termostat\" \/\/ typ urz\u0105dzenia\n},\n{\n   \"id\": 94967292,\n   \"ip\": \"192.168.x.x\",\n   \"type\": \"termostat\"\n},\n{\n   \"id\": 94967293,\n   \"ip\": \"192.168.x.x\",\n   \"type\": \"termostat\"\n},\n{  \n   \"id\": 13587532, \n   \"type\": \"prze\u0142\u0105cznik\"  \n},\n{  \n   \"id\": 98412557, \n   \"type\": \"czujnik dymu\"\n},\n{  \n   \"id\": 57995113, \n   \"type\": \"czujnik_kontaktowy\"\n},\n{  \n   \"id\": 74123668,\n   \"type\": \"czujnik_temperatury_wilgotno\u015bci_ci\u015bnienia\"\n},\n{\n    \"id\": 74621883, \n    \"type\": \"czujnik_temperatury_wilgotno\u015bci\"\n}\n<\/code><\/pre>\n<p>\nZ przyk\u0142adu wida\u0107, \u017ce urz\u0105dzenia s\u0105 dodawane niezale\u017cnie jedno od drugiego. Pod\u0142\u0105czone s\u0105 3 termostaty z w\u0142asnymi adresami IP oraz 5 r\u00f3\u017cnych czujnik\u00f3w z unikalnymi identyfikatorami. Je\u015bli czujnik jest pod\u0142\u0105czony do sieci Wi-Fi, b\u0119dzie mia\u0142 sw\u00f3j adres IP, a je\u015bli jest pod\u0142\u0105czony do bramy, adres IP urz\u0105dzenia b\u0119dzie adresem IP bramy.<\/p>\n<p>Do komunikacji z urz\u0105dzeniami stosujemy WebSocket. Pozwala to na minimalizacj\u0119 zu\u017cycia zasob\u00f3w w por\u00f3wnaniu do zapyta\u0144 GET i na uzyskiwanie informacji dynamicznie przy po\u0142\u0105czeniu lub zmianie. <\/p>\n<p>Dane s\u0105 pobierane bezpo\u015brednio z urz\u0105dzenia, do kt\u00f3rego nale\u017cy blok, omijaj\u0105c serwer. W ten spos\u00f3b, w przypadku awarii dowolnego z urz\u0105dze\u0144, system nadal dzia\u0142a. Na interfejsie webowym jedynie nie b\u0119dzie wy\u015bwietlane znikni\u0119te urz\u0105dzenie z listy. Jednak informacja o jego znikni\u0119ciu, w razie potrzeby, przyjdzie w postaci powiadomienia w aplikacji u\u017cytkownika. <\/p>\n<p>Pierwsz\u0105 pr\u00f3b\u0105 realizacji takiego podej\u015bcia by\u0142a aplikacja PWA. Pozwala to na przechowywanie bazy blok\u00f3w na urz\u0105dzeniu u\u017cytkownika i \u017c\u0105danie tylko niezb\u0119dnych danych. Jednak ze wzgl\u0119du na szczeg\u00f3lno\u015bci struktury taka opcja jest niepe\u0142na. Wyj\u015bciem jest aplikacja natywna na Androida i iOS, kt\u00f3ra jest obecnie w fazie aktywnego rozwoju. Domy\u015blnie, aplikacja b\u0119dzie dzia\u0142a\u0107 tylko w wewn\u0119trznej sieci. W razie potrzeby, mo\u017cna wszystko przenie\u015b\u0107 na zdalne sterowanie. Tak wi\u0119c, gdy u\u017cytkownik opuszcza lokaln\u0105 sie\u0107, aplikacja automatycznie prze\u0142\u0105cza si\u0119 na chmur\u0119. <\/p>\n<p>Zdalne sterowanie \u2014 pe\u0142ne duplikowanie strony. Po aktywacji strony u\u017cytkownik mo\u017ce zalogowa\u0107 si\u0119 na serwerze i zarz\u0105dza\u0107 urz\u0105dzeniami przez swoje konto. Dzi\u0119ki temu, serwer rozszerza funkcjonalno\u015b\u0107, pozwalaj\u0105c na zarz\u0105dzanie urz\u0105dzeniami b\u0119d\u0105c poza domem, bez konieczno\u015bci korzystania z przekierowania port\u00f3w lub dedykowanego adresu IP.<\/p>\n<p>W ten spos\u00f3b powy\u017csza opcja pozbawiona jest wad podej\u015bcia serwerowego, a tak\u017ce ma szereg zalet w postaci elastyczno\u015bci pod\u0142\u0105czania nowych urz\u0105dze\u0144.<\/p>\n<h3>O termostacie<\/h3>\n<p>\nRozwa\u017cmy system zarz\u0105dzania na przyk\u0142adzie naszego termostatu.<\/p>\n<p>Przewidziano:<\/p>\n<ol>\n<li>Regulacj\u0119 temperatury ka\u017cdego termostatu (wy\u015bwietlan\u0105 jako oddzielny blok);<\/li>\n<li>Ustawianie harmonogramu pracy termostatu (rano, w ci\u0105gu dnia, wieczorem, w nocy);<\/li>\n<li>Wyb\u00f3r sieci Wi-Fi i pod\u0142\u0105czenie urz\u0105dzenia do niej;<\/li>\n<li>Aktualizacja urz\u0105dzenia \"przez powietrze\";<\/li>\n<li>Konfiguracja MQTT;<\/li>\n<li>Konfiguracja sieci, do kt\u00f3rej pod\u0142\u0105czone jest urz\u0105dzenie.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/a25f2a8daeabdeba36aa11557eacab0e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOpr\u00f3cz zarz\u0105dzania za pomoc\u0105 interfejsu webowego, przewidziano klasyczne - przyciski na wy\u015bwietlaczu. Na pok\u0142adzie znajduje si\u0119 monitor Nextion NX3224T024 o przek\u0105tnej 2.4 cala. Zdecydowano si\u0119 na niego ze wzgl\u0119du na \u0142atwo\u015b\u0107 obs\u0142ugi urz\u0105dzenia. Jednak w przygotowaniu jest w\u0142asny monitor oparty na STM32. Jego funkcjonalno\u015b\u0107 nie ust\u0119puje Nextionowi, ale b\u0119dzie ta\u0144szy, co pozytywnie wp\u0142ynie na ostateczn\u0105 cen\u0119 urz\u0105dzenia.<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/ad98f51863dce7cbee1f1ea88891599f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak ka\u017cdy szanowany ekran termostatu, nasz Nextion potrafi:<\/p>\n<ul>\n<li>ustawia\u0107 wymagan\u0105 przez u\u017cytkownika temperatur\u0119 (przyciskami po prawej);<\/li>\n<li>w\u0142\u0105cza\u0107 i wy\u0142\u0105cza\u0107 tryb pracy zgodnie z harmonogramem (przycisk H);<\/li>\n<li>wy\u015bwietla\u0107 prac\u0119 przeka\u017anika (strza\u0142ka po lewej);<\/li>\n<li>posiada zabezpieczenie przed dzie\u0107mi (zablokowanie fizycznego nacisku, gdy zamek jest w\u0142\u0105czony);<\/li>\n<li>wy\u015bwietla poziom sygna\u0142u WiFi.<\/li>\n<\/ul>\n<p>\nPonadto, za pomoc\u0105 monitora mo\u017cna:<\/p>\n<ul>\n<li>wybra\u0107 typ zainstalowanego przez u\u017cytkownika czujnika;<\/li>\n<li>zarz\u0105dza\u0107 funkcj\u0105 zabezpieczenia przed dzie\u0107mi;<\/li>\n<li>aktualizowa\u0107 oprogramowanie.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/efe3a84ba7e8c95212323ad1370550e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo klikni\u0119ciu na pasek WiFi u\u017cytkownik uzyskuje informacje o pod\u0142\u0105czonej sieci. Kod QR jest u\u017cywany do parowania urz\u0105dzenia w oprogramowaniu HomeKit.<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/79f55d4872f73a7c03a9f855be8089dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDemonstrowanie pracy z wy\u015bwietlaczem:<\/p>\n<p><img decoding=\"async\" alt=\"Lytko \u0142\u0105czy\" src=\"\/wp-content\/uploads\/2020\/01\/bf8ed3d7ae06b0364b393fc442e3556b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOpracowali\u015bmy <noindex><a rel=\"nofollow\" href=\"http:\/\/demo.lytko.com\">stron\u0119 demonstracyjn\u0105<\/a><\/noindex> z trzema pod\u0142\u0105czonymi termostatami.<\/p>\n<p>Zapytasz: \u201eCzym wyr\u00f3\u017cnia si\u0119 Wasz termostat?\u201d Obecnie na rynku istnieje wiele termostat\u00f3w z funkcj\u0105 Wi-Fi, dzia\u0142aj\u0105cych zgodnie z harmonogramem, z obs\u0142ug\u0105 dotykow\u0105. A entuzja\u015bci stworzyli modu\u0142y do interakcji z wi\u0119kszo\u015bci\u0105 popularnych system\u00f3w inteligentnego domu (Majordomo, HomeAssistant itd.). <\/p>\n<p>Nasz termostat jest zgodny z tymi systemami i posiada wszystkie wymienione wcze\u015bniej funkcje. Jednak jego wyr\u00f3\u017cniaj\u0105c\u0105 cech\u0105 jest to, \u017ce termostat jest nieustannie rozwijany dzi\u0119ki elastyczno\u015bci systemu. Z ka\u017cd\u0105 aktualizacj\u0105 funkcjonalno\u015b\u0107 b\u0119dzie si\u0119 rozszerza\u0107. Do standardowego sposobu zarz\u0105dzania systemem (wed\u0142ug harmonogramu) dodamy tryb adaptacyjny. Aplikacja umo\u017cliwia uzyskanie geolokalizacji u\u017cytkownika. Dzi\u0119ki temu system dynamicznie zmienia tryby pracy w zale\u017cno\u015bci od jego lokalizacji. A modu\u0142 pogodowy pozwoli dostosowa\u0107 si\u0119 do warunk\u00f3w atmosferycznych. <\/p>\n<p>I rozszerzalno\u015b\u0107. Ka\u017cdy ch\u0119tny b\u0119dzie m\u00f3g\u0142 wymieni\u0107 zainstalowany standardowy termostat na nasz. Z minimalnym wysi\u0142kiem. Wybrali\u015bmy 5 najpopularniejszych czujnik\u00f3w dost\u0119pnych na rynku i dodali\u015bmy ich wsparcie. Jednak nawet w przypadku unikalnych w\u0142a\u015bciwo\u015bci czujnika u\u017cytkownik b\u0119dzie m\u00f3g\u0142 pod\u0142\u0105czy\u0107 go do naszego termostatu. W tym celu b\u0119dzie trzeba skalibrowa\u0107 termostat do wsp\u00f3\u0142pracy z konkretnym sensorem. Instrukcje dostarczymy.<\/p>\n<p>Pod\u0142\u0105czaj\u0105c termostat lub jakiekolwiek inne urz\u0105dzenie, pojawia si\u0119 ono wsz\u0119dzie: zar\u00f3wno w interfejsie webowym, jak i w aplikacji PWA. Dodawanie urz\u0105dzenia odbywa si\u0119 automatycznie: wystarczy tylko pod\u0142\u0105czy\u0107 je do sieci Wi-Fi. <\/p>\n<p>Nasz system nie potrzebuje serwera, a w przypadku jego awarii nie zamienia si\u0119 w dyni\u0119. Nawet w przypadku awarii jednego z komponent\u00f3w system nie zaczyna dzia\u0142a\u0107 w trybie awaryjnym. Kontrolery, czujniki i urz\u0105dzenia \u2014 ka\u017cdy element jest zar\u00f3wno serwerem, jak i klientem, dlatego jest ca\u0142kowicie autonomiczny. <\/p>\n<p>Dla zainteresowanych \u2014 nasze media spo\u0142eczno\u015bciowe: <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/LytkoG\">Telegram<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.instagram.com\/lytko_shop\">Instagram<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/lytko_news\">Telegram News<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/lytko_shop\">VK<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/groups\/2055755264635934\">Facebook<\/a><\/noindex>.<\/p>\n<p>E-mail: shop@lytko.com<\/p>\n<p><b>P. S.<\/b> Nie namawiamy do rezygnacji z serwera. Oferujemy r\u00f3wnie\u017c wsparcie dla serwera MQTT oraz mamy w\u0142asn\u0105 chmur\u0119. Naszym celem jest podniesienie stabilno\u015bci i niezawodno\u015bci systemu na wy\u017cszy poziom. Aby serwer nie by\u0142 s\u0142abym punktem, a uzupe\u0142nia\u0142 funkcjonalno\u015b\u0107 i sprawia\u0142, \u017ce system jest bardziej komfortowy.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/484296\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0412\u0430\u043c \u0443\u043c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442. \u041d\u044b\u043d\u0435\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430 \u0438 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u0432 \u0446\u0435\u043b\u043e\u043c. \u041f\u0440\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0423\u0441\u043b\u043e\u0432\u043d\u043e, \u0432\u0441\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0442\u0440\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: \u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f 1 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u201c\u0443\u043c\u043d\u044b\u0435\u201d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0412\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-55356","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0412\u0430\u043c \u0443\u043c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/lytko-obedinyaet\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Lytko \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0412\u0430\u043c \u0443\u043c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/lytko-obedinyaet\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Lytko \u0142\u0105czy | ProHoster","description":"Jaki\u015b czas temu zaprezentowali\u015bmy Pa\u0144stwu inteligentny termostat.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/lytko-obedinyaet","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Lytko \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0412\u0430\u043c \u0443\u043c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/lytko-obedinyaet","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-17T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55356","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:45:29","updated":"2022-10-02 15:29:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=55356"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55356\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=55356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=55356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=55356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}