{"id":20131,"date":"2023-03-16T05:00:00","date_gmt":"2023-03-16T04:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=20131"},"modified":"2023-03-14T13:33:58","modified_gmt":"2023-03-14T12:33:58","slug":"jak-zmienic-zwykle-urzadzenie-w-smart","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/jak-zmienic-zwykle-urzadzenie-w-smart\/","title":{"rendered":"Jak zmieni\u0107 zwyk\u0142e urz\u0105dzenie w SMART?"},"content":{"rendered":"\n<p>Jak zapewne pami\u0119tasz <a href=\"https:\/\/sii.pl\/blog\/smart-home-w-wersji-open-source-jak-zbudowalam-inteligentny-dom\/?category=development-na-miekko&amp;tag=inteligentny-dom,iot,poradnik,smart-home\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">z poprzedniego artyku\u0142u<\/a>, zmieni\u0142am u siebie w mieszkaniu, u\u017cywaj\u0105c narz\u0119dzi open-source i minimalnym kosztem finansowym, zwyk\u0142e o\u015bwietlenie w SMART o\u015bwietlenie. Gdy zobaczy\u0142am, ile mam z tego korzy\u015bci, postanowi\u0142am, \u017ce to nie b\u0119dzie ostatnia rzecz, jak\u0105 zrobi\u0119.<\/p>\n\n\n\n<p>W tym tek\u015bcie skupi\u0119 si\u0119 na zmianie jeszcze-nie-smart urz\u0105dzenia na takie smart! Zajm\u0119 si\u0119 urz\u0105dzeniem, kt\u00f3re od kilku miesi\u0119cy jest w\u0142\u0105czone u mnie non stop i nie wyobra\u017cam sobie, bym go nie mia\u0142a. Sterylizator 4w1! Je\u015bli jeste\u015b rodzicem, wiesz o czym pisz\u0119 \ud83d\ude00<\/p>\n\n\n\n<p>Z artyku\u0142u dowiesz si\u0119 m.in.:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>dlaczego chcia\u0142am zmieni\u0107 sterylizator w urz\u0105dzenie smart,<\/li><li>czego potrzebuj\u0119, by mie\u0107 smart urz\u0105dzenie,<\/li><li>jaki element zmienia zwyk\u0142e urz\u0105dzenia w smart,<\/li><li>jak przebiega integracja z aplikacjami,<\/li><li>jaki jest pob\u00f3r mocy w czasie,<\/li><li>o algorytmie dzia\u0142ania sterylizacji oraz wysy\u0142ania powiadomienia na telefon.<\/li><\/ul>\n\n\n\n<p>Zanim przejd\u0119 dalej, zdradz\u0119 Ci, <a href=\"https:\/\/sii.pl\/blog\/smart-home-w-wersji-open-source-jak-zbudowalam-inteligentny-dom\/?category=development-na-miekko&amp;tag=inteligentny-dom,iot,poradnik,smart-home\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">co zmieni\u0142am od ostatniego wpisu w domu<\/a>, by by\u0142 bardziej inteligentny. Ano wiatrak w \u0142azience w\u0142\u0105cza\/wy\u0142\u0105cza si\u0119 w zale\u017cno\u015bci od wilgotno\u015bci (tu opar\u0142am si\u0119 na odchyleniu i delcie z ostatnich pomiar\u00f3w), steruj\u0119 nawil\u017caczem przez telefon (robi\u0142am reverse engineering), a pralka informuje mnie o zako\u0144czeniu prania.<\/p>\n\n\n\n<p>Ka\u017cda wymieniona modyfikacja \u015bmia\u0142o mo\u017ce by\u0107 opisana jako osobny artyku\u0142. Z ka\u017cd\u0105 mia\u0142am sporo problem\u00f3w: od napisania poprawnego algorytmu po odczyty i pomijanie zak\u0142\u00f3ce\u0144 z urz\u0105dze\u0144 Wszystkie wi\u0105za\u0142y si\u0119 z wieloma emocjami: od frustracji po ekscytacj\u0119. Je\u015bli chcesz, bym podzieli\u0142a si\u0119 moimi przygodami \u2013 zostaw komentarz i napisz, co Ci\u0119 interesuje \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Dlaczego chcia\u0142am zmieni\u0107 sterylizator w urz\u0105dzenie smart?<\/strong><\/h2>\n\n\n\n<p>Przy niemowl\u0119ciu cz\u0142owiek dzia\u0142a zadaniowo. Jak wykona wszystkie zadania, chce mie\u0107 spok\u00f3j i odpowiedni\u0105 ilo\u015b\u0107 snu. A jak o czym\u015b zapomina \u2013 ta harmonia jest zaburzona. Dlatego, je\u015bli mog\u0119, wykorzystuj\u0119 automatyzacj\u0119, by u\u0142atwi\u0107 sobie \u017cycie i wykorzysta\u0107 urz\u0105dzenia, kt\u00f3re mam. Posiadam sterylizator Neno 4w1.<\/p>\n\n\n\n<p>G\u0142\u00f3wnie korzystam z 3 funkcji:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>podgrzewania mleka\/jedzenia,<\/li><li>odmra\u017cania jedzenia,<\/li><li>sterylizacji.<\/li><\/ul>\n\n\n\n<p>I jak nie zapominam o podgrzewaniu, tak o ko\u0144cu sterylizacji ZAWSZE, a nast\u0119pnie musz\u0119 ponownie sterylizowa\u0107 te same rzeczy, co skutkuje po\u0142o\u017ceniem si\u0119 spa\u0107 o 23.30 lub p\u00f3\u017aniej, a nie o 22.00 \ud83d\ude09<\/p>\n\n\n\n<p>Pomy\u015bla\u0142am, \u017ce telefon mam zawsze przy sobie, wi\u0119c warto by by\u0142o, gdyby na kom\u00f3rk\u0119 dociera\u0142y powiadomienia dotycz\u0105ce ko\u0144ca sterylizacji. Ile czasu mog\u0142abym zaoszcz\u0119dzi\u0107 dzi\u0119ki temu!<\/p>\n\n\n\n<p>I to by\u0142 m\u00f3j pierwszy cel \u2013 wys\u0142anie powiadomienia z urz\u0105dzenia na telefon.<br><strong>Spoiler alert<\/strong>: na dzie\u0144 pisania artyku\u0142u mog\u0119 ju\u017c sterowa\u0107 sterylizatorem przez telefon (zar\u00f3wno jako osobnym modu\u0142em jak i z powiadomie\u0144), co wymaga\u0142o zmiany w hardware\u2019rze. Jednak tu skupi\u0119 si\u0119 na jednej funkcjonalno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Czego potrzebuj\u0119, by mie\u0107 smart urz\u0105dzenie?<\/strong><\/h2>\n\n\n\n<p>By stworzy\u0107 z takiego urz\u0105dzenia urz\u0105dzenie smart, nale\u017cy albo zmieni\u0107 w nim hardware albo doda\u0107 fizyczny element, kt\u00f3ry b\u0119dzie monitorowa\u0142 prac\u0119 urz\u0105dzenia i wysy\u0142a\u0142 informacje. W zwi\u0105zku z tym, \u017ce chcia\u0142am to zrobi\u0107 <strong>dobrze, szybko i tanio<\/strong>, wybra\u0142am drugie rozwi\u0105zanie.<\/p>\n\n\n\n<p>Zmiany, kt\u00f3re musia\u0142y si\u0119 wydarzy\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>zakup urz\u0105dzenia, kt\u00f3re b\u0119dzie potrafi\u0142o monitorowa\u0107 moc pobieran\u0105 przez docelowe urz\u0105dzenie i b\u0119dzie wysy\u0142a\u0142o dane,<\/li><li>odpowiednia integracja urz\u0105dzenia i aplikacji, abym mia\u0142a dost\u0119p do danych,<\/li><li>zrozumienie log\u00f3w, \u017ceby zobaczy\u0107, co jest wysy\u0142ane z urz\u0105dzenia monitoruj\u0105cego,<\/li><li>stworzenie algorytmu odpowiedzialnego za wysy\u0142anie powiadomie\u0144 na telefon.<\/li><\/ul>\n\n\n\n<p>Jak ju\u017c wiesz <a href=\"https:\/\/sii.pl\/blog\/smart-home-w-wersji-open-source-jak-zbudowalam-inteligentny-dom\/?category=development-na-miekko&amp;tag=inteligentny-dom,iot,poradnik,smart-home\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">z wcze\u015bniejszego artyku\u0142u<\/a>, g\u0142\u00f3wnie interesuje mnie protok\u00f3\u0142 Zigbee, a do sterowania Inteligentnym domem u\u017cywam 4 aplikacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>HomeAssistant,<\/li><li>Node-RED,<\/li><li>Zigbee2MQTT,<\/li><li>Mosquito.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Element zmieniaj\u0105cy zwyk\u0142e urz\u0105dzenia w smart<\/strong><\/h2>\n\n\n\n<p>Zacznijmy od pierwszego punktu. Na rynku istniej\u0105 r\u00f3\u017cne rozwi\u0105zania, jednak najprostszym jest zakup gniazdka-wtyczki. U mnie wyb\u00f3r pad\u0142 na: wtyczk\u0119 ZigBee 16A z firmy RTX.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/1-2.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/1-2.png\" alt=\"Wtyczka ZigBee 16A\" class=\"wp-image-20132\" width=\"413\" height=\"346\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/1-2.png 649w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/1-2-300x251.png 300w\" sizes=\"(max-width: 413px) 100vw, 413px\" \/><\/a><figcaption>Ryc. 1 Wtyczka ZigBee 16A<\/figcaption><\/figure><\/div>\n\n\n\n<p>Na rynku istniej\u0105 wtyczki, kt\u00f3re maj\u0105 zar\u00f3wno po\u0142\u0105czenie po WiFi, jak i ZigBee, jednak mnie interesuje wy\u0142\u0105cznie protok\u00f3\u0142 ZigBee. Dodatkowo, w momencie zakupu cena wynosi\u0142a 49 PLN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Integracja z aplikacjami<\/strong><\/h2>\n\n\n\n<p>Integracja ze sterylizatorem jest prosta \u2013 zwyczajnie mi\u0119dzy kontakt a urz\u0105dzenie wpinasz wtyczk\u0119. By dane by\u0142y widoczne w aplikacji, nale\u017cy skonfigurowa\u0107 odpowiednio Zigbee2MQTT wraz z gniazdkiem.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2.png\"><img decoding=\"async\" width=\"1024\" height=\"64\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2-1024x64.png\" alt=\"Konfiguracja Zigbee2MQTT\" class=\"wp-image-20134\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2-1024x64.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2-300x19.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2-768x48.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2-1536x96.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2-2.png 1762w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 2 Konfiguracja Zigbee2MQTT<\/figcaption><\/figure><\/div>\n\n\n\n<p>Patrz\u0105c na logi w Zigbee2MQTT, mog\u0142am sprawdzi\u0107, jakie informacje s\u0105 przesy\u0142ane i kt\u00f3re z nich mog\u0119 wykorzysta\u0107, by osi\u0105gn\u0105\u0107 sw\u00f3j cel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2.png\"><img decoding=\"async\" width=\"1024\" height=\"82\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2-1024x82.png\" alt=\"\" class=\"wp-image-20136\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2-1024x82.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2-300x24.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2-768x61.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/3-2.png 1224w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 3 Logi w Zigbee2MQTT<\/figcaption><\/figure>\n\n\n\n<p>Najwa\u017cniejsza dla mnie informacja znajduje si\u0119 pod parametrem <em>power<\/em>. Jest to ilo\u015bci energii elektrycznej u\u017cytej w danym momencie [wyra\u017conej w watach]. Po konfiguracji wtyczka podpi\u0119ta do sterylizatora powinna by\u0107 widoczna zar\u00f3wno w aplikacji HomeAssistant, jak i Node-RED.<\/p>\n\n\n\n<p>Zatem czas na sprawdzenie jak sterylizator zachowuje si\u0119 w dw\u00f3ch trybach:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>podgrzewania jedzenia,<\/li><li>sterylizacji.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Analiza poboru mocy przez urz\u0105dzenie w czasie, czyli ile urz\u0105dzenie bierze pr\u0105du<\/strong><\/h2>\n\n\n\n<p>Zu\u017cycie pr\u0105du mo\u017cesz sprawdzi\u0107 albo w pojedynczych logach w Zigbee2MQTT albo w historii aplikacji HomeAssistant, gdzie znajdziesz wykres. Ja wybra\u0142am wykres. Wchodz\u0105c w histori\u0119 urz\u0105dzenia oraz wybieraj\u0105c konkretny przedzia\u0142 czasowy, sprawdzi\u0142am charakterystyk\u0119 dzia\u0142ania sterylizatora. O\u015b pionowa wskazuje ilo\u015b\u0107 energii elektrycznej [W], o\u015b pozioma godzin\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1.png\"><img decoding=\"async\" width=\"1024\" height=\"322\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1-1024x322.png\" alt=\"Zu\u017cycie energii elektrycznej w czasie\" class=\"wp-image-20138\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1-1024x322.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1-300x94.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1-768x241.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1-1536x483.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/4-1.png 1565w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 4 Zu\u017cycie energii elektrycznej w czasie<\/figcaption><\/figure>\n\n\n\n<p>Co dzia\u0142o si\u0119 w tych przedzia\u0142ach czasowych? Urz\u0105dzenie w\u0142\u0105czy\u0142am dopiero ok. godziny 18:20, zatem woda w nim by\u0142a w temperaturze pokojowej. Nast\u0119pnie w\u0142\u0105czy\u0142am funkcj\u0119 podgrzewania jedzenia. Nie wy\u0142\u0105czy\u0142am sterylizatora po wyj\u0119ciu butelki, a ok. godziny 20:40 zacz\u0119\u0142am sterylizacj\u0119 butelek.<\/p>\n\n\n\n<p>Podsumowuj\u0105c: mi\u0119dzy 18:20 a 2:00 by\u0142y u\u017cyte 2 funkcje:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>podgrzanie\/utrzymanie wody w temperaturze 40 stopni C,<\/li><li>sterylizacja, gdzie nast\u0119puje podgrzanie wody do 100 stopni C, a nast\u0119pnie utrzymanie tej temperatury przez 10 minut.<\/li><\/ul>\n\n\n\n<p>Czy domy\u015blasz si\u0119, kt\u00f3re s\u0142upki za co odpowiadaj\u0105? Przyjrzyjmy si\u0119 im bli\u017cej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Podgrzewanie<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/5-1.png\"><img decoding=\"async\" width=\"870\" height=\"476\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/5-1.png\" alt=\"Zu\u017cycie energii podczas podgrzewania\" class=\"wp-image-20141\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/5-1.png 870w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/5-1-300x164.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/5-1-768x420.png 768w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><\/a><figcaption>Ryc. 5 Zu\u017cycie energii podczas podgrzewania<\/figcaption><\/figure><\/div>\n\n\n\n<p>Na wykresie mi\u0119dzy 18:20 a 18:40 mo\u017cna zauwa\u017cy\u0107, \u017ce przy w\u0142\u0105czeniu urz\u0105dzenia, w kt\u00f3rym woda ma mniejsz\u0105 temperatur\u0119 ni\u017c 40 stopni C, nast\u0119puje podgrzanie wody do tej\u017ce temperatury. Pob\u00f3r mocy wynosi ok. 238 W. By utrzyma\u0107 temperatur\u0119, mi\u0119dzy 19:00 a 20:30 urz\u0105dzenie co 10 minut grzeje wod\u0119 z moc\u0105 118 W przez okres 2,5 minuty. Dodatkowo wida\u0107 niestabilno\u015b\u0107 stanu w trakcie prze\u0142\u0105czania (co\u015b podobnego do szumu elektrycznego) w okolicach 19:20, 19:30 oraz 19:55.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sterylizacja<\/strong><\/h3>\n\n\n\n<p>W zale\u017cno\u015bci od tego, jaka temperatura wody by\u0142a w urz\u0105dzeniu, d\u0142ugo\u015b\u0107 cyklu mo\u017ce si\u0119 r\u00f3\u017cni\u0107. Najlepiej wida\u0107 to w przybli\u017ceniu:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6-1.png\"><img decoding=\"async\" width=\"871\" height=\"481\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6-1.png\" alt=\"Zu\u017cycie energii podczas sterylizacji\" class=\"wp-image-20143\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6-1.png 871w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6-1-300x166.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6-1-768x424.png 768w\" sizes=\"(max-width: 871px) 100vw, 871px\" \/><\/a><figcaption>Ryc. 6 Zu\u017cycie energii podczas sterylizacji<\/figcaption><\/figure>\n\n\n\n<p>Mo\u017cna zauwa\u017cy\u0107, \u017ce woda ok. 22:00 by\u0142a na tyle zimna, \u017ce sterylizator potrzebowa\u0142 wi\u0119cej czasu, aby zako\u0144czy\u0107 cykl sterylizacji. O 22:28 (czyli ok. 7 minut po ostatniej akcji) urz\u0105dzenie potrzebowa\u0142o mniej czasu do wykonania swojej funkcji. Dodatkowo, by urz\u0105dzenie zadzia\u0142a\u0142o w funkcji sterylizacji, potrzebuje ok. 473 W przez d\u0142u\u017cszy czas.<\/p>\n\n\n\n<p>Dzi\u0119ki powy\u017cszej analizie mo\u017cna zauwa\u017cy\u0107 pewien wzorzec, kt\u00f3ry przyda nam si\u0119 w stworzeniu algorytmu do wys\u0142ania powiadomie\u0144 o zako\u0144czeniu sterylizacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Algorytm dzia\u0142ania sterylizacji oraz wys\u0142ania powiadomie\u0144 na telefon<\/strong><\/h2>\n\n\n\n<p>Ju\u017c wiemy, ile mocy pobiera urz\u0105dzenie przy konkretnych akcjach i przez jaki czas. Zatem rozplanujmy, co b\u0119dzie nam dodatkowo potrzebne, by stwierdzi\u0107, \u017ce sterylizacja zosta\u0142a zako\u0144czona.<\/p>\n\n\n\n<p>M\u00f3j plan by\u0142 taki, aby zbiera\u0107 informacje z ostatnich 4 minut i sprawdzi\u0107, czy warto\u015b\u0107 mocy by\u0142a przez d\u0142u\u017cszy czas powy\u017cej 400 W, po czym zmieni\u0142a si\u0119 na 0. I to by by\u0142 dobry plan! Gdybym tylko mia\u0142a pewno\u015b\u0107, \u017ce urz\u0105dzenie wysy\u0142a co X sekund tak\u0105 informacj\u0119. Jednak po przeanalizowaniu log\u00f3w z Zigbee2MQTT okaza\u0142o si\u0119, \u017ce wtyczka wysy\u0142a informacj\u0119 raz co 2 sekundy, a innym razem co 2 minuty. Niezale\u017cnie od tego, czy urz\u0105dzenie jest w\u0142\u0105czone, czy sterylizuje, czy podgrzewa.<\/p>\n\n\n\n<p>Zatem zamiast opiera\u0107 si\u0119 na buforze czasowym, wybra\u0142am opcj\u0119: ostatnie 10 wynik\u00f3w. Jak wiesz, lubi\u0119 automatyzacj\u0119 w Node-RED i tu r\u00f3wnie\u017c wykorzysta\u0142am t\u0119 aplikacj\u0119 do stworzenia takiego algorytmu. Gotowy algorytm:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a-1024x175.png\" alt=\"Algorytm w Node-RED\" class=\"wp-image-20145\" width=\"840\" height=\"143\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a-1024x175.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a-300x51.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a-768x131.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/6a.png 1221w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><figcaption>Ryc. 7 Algorytm w Node-RED<\/figcaption><\/figure>\n\n\n\n<p>Wiedz\u0105c ju\u017c, jakie s\u0105 g\u0142\u00f3wne za\u0142o\u017cenia, czas na zastanowienie si\u0119<strong>, co mo\u017ce p\u00f3j\u015b\u0107 nie tak.<\/strong><\/p>\n\n\n\n<p>Dobry tester od razu patrzy na warto\u015bci brzegowe, zanim przejdzie do implementacji, gdy\u017c mog\u0105 wyst\u0105pi\u0107 szumy elektryczne (polecam z zapoznaniem si\u0119 ze zjawiskiem debouncing). Na szcz\u0119\u015bcie jest to znane zjawisko i w aplikacji do automatyzacji mo\u017cna \u0142atwo je zredukowa\u0107. Nast\u0119pnie, na podstawie jakiej\u015b warto\u015bci powinni\u015bmy wykrywa\u0107 zmian\u0119 stanu. Je\u015bli przez 40 minut pob\u00f3r mocy wynosi 473 W albo je\u015bli b\u0119d\u0105 wahania poboru mocy, to ju\u017c mo\u017cna stwierdzi\u0107, \u017ce nie jest to odpowiedni parametr. Jednak jednostka czasu ju\u017c jak najbardziej tak.<\/p>\n\n\n\n<p>Ostatni\u0105 kwesti\u0119 stanowi spos\u00f3b, w jaki wyliczymy, czy zmiana stanu by\u0142a chwilowa (np. chwilowy spadek mocy), czy jednak akcja zosta\u0142a zako\u0144czona. To zostanie oprogramowane w funkcji obliczenia stanu.<\/p>\n\n\n\n<p>Wiemy, co nale\u017cy zrobi\u0107, jeste\u015bmy \u015bwiadomi, co mo\u017ce p\u00f3j\u015b\u0107 nie tak,<strong> zatem przejd\u017amy do konkret\u00f3w!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Dzia\u0142ania krok po kroku<\/strong><\/h2>\n\n\n\n<p>Informacje z gniazdka s\u0105 przesy\u0142ane do Zigbee2MQTT, wi\u0119c Node-Red powinien zosta\u0107 tak skonfigurowany, by m\u00f3c je wykorzysta\u0107. W aplikacji mam kilka operacji dostosowanych do Zigbee2MQTT.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/7-1.png\"><img decoding=\"async\" width=\"157\" height=\"227\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/7-1.png\" alt=\"Konfiguracja urz\u0105dze\u0144 \" class=\"wp-image-20147\"\/><\/a><figcaption>Ryc. 8 Konfiguracja urz\u0105dze\u0144 (<a aria-label=\" (opens in a new tab)\" href=\"https:\/\/flows.nodered.org\/node\/node-red-contrib-zigbee2mqtt%20%5d\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >wi\u0119cej informacji na ten temat znajdziesz tutaj<\/a>)<\/figcaption><\/figure><\/div>\n\n\n\n<p>W momencie konfiguracji interesuje mnie operacja IN, kt\u00f3ra odpowiada za odbieranie wiadomo\u015bci z kolejki. Poni\u017cszy rysunek przedstawia konfiguracj\u0119 aktywno\u015bci.<\/p>\n\n\n\n<p>Najwa\u017cniejsze aspekty to: serwer (u mnie nazwany Mosquito), urz\u0105dzenie (Sterylizator(TS011F_plug_1)), a nast\u0119pnie okre\u015blenie, co interesuj\u0105cego wyci\u0105gniemy z log\u00f3w. W tym przypadku wybra\u0142am parametr power.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/8-1.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/8-1.png\" alt=\"Konfiguracja aktywno\u015bci\" class=\"wp-image-20149\" width=\"575\" height=\"539\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/8-1.png 575w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/8-1-300x281.png 300w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><\/a><figcaption>Ryc. 9 Konfiguracja aktywno\u015bci<\/figcaption><\/figure><\/div>\n\n\n\n<p>W zwi\u0105zku z tym, \u017ce w dalszych krokach chcia\u0142am si\u0119 opiera\u0107 na parametrze czasowym, konieczna by\u0142a modyfikacji dalej przesy\u0142anej wiadomo\u015bci. U\u017cywaj\u0105c operacji function i JavaScript, podmieniam wiadomo\u015b\u0107.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/9-1.png\"><img decoding=\"async\" width=\"209\" height=\"53\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/9-1.png\" alt=\"prepare payload\" class=\"wp-image-20151\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/10-1.png\"><img decoding=\"async\" width=\"774\" height=\"317\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/10-1.png\" alt=\"Podmiana wiadomo\u015bci\" class=\"wp-image-20153\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/10-1.png 774w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/10-1-300x123.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/10-1-768x315.png 768w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/a><figcaption>Ryc. 10 Podmiana wiadomo\u015bci<\/figcaption><\/figure><\/div>\n\n\n\n<p>Rozszyfrowuj\u0105c powy\u017cszy kod:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>tworz\u0119 now\u0105 wiadomo\u015b\u0107 z konkretnym cia\u0142em,<\/li><li>tworz\u0119 3 parametry:<ul><li>power,<\/li><\/ul><ul><li>timestamp,<\/li><\/ul><ul><li>timechanges.<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>Najciekawszym z nich mo\u017ce by\u0107 timechanges. Jest to parametr, kt\u00f3ry zostanie u\u017cyty w nast\u0119pnym kroku i odpowiada za eliminacj\u0119 nadmiaru zdarze\u0144.<\/p>\n\n\n\n<p>Nast\u0119pnym krokiem jest debounce, czyli zmniejszenie szumu elektrycznego. W nim b\u0119d\u0119 opiera\u0107 si\u0119 na stworzonym parametrze timechanges.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/11-1.png\"><img decoding=\"async\" width=\"199\" height=\"68\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/11-1.png\" alt=\"Debounce\" class=\"wp-image-20155\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/12-1.png\"><img decoding=\"async\" width=\"495\" height=\"252\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/12-1.png\" alt=\"Zmniejszenie szumu elektrycznego i parametr timechanges\" class=\"wp-image-20157\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/12-1.png 495w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/12-1-300x153.png 300w\" sizes=\"(max-width: 495px) 100vw, 495px\" \/><\/a><figcaption>Ryc. 11 Zmniejszenie szumu elektrycznego i parametr timechanges<\/figcaption><\/figure><\/div>\n\n\n\n<p>Dzi\u0119ki temu bior\u0119 pod uwag\u0119 wiadomo\u015b\u0107 ze sterylizatora nie m\u0142odsz\u0105 ni\u017c 10 sekund od ostatniej. Maj\u0105c ju\u017c ustalone, kt\u00f3re warto\u015bci s\u0105 dla mnie wa\u017cne i jaka ma by\u0107 ich cz\u0119stotliwo\u015b\u0107, przechodz\u0119 do tematu ich zapami\u0119tywania w tymczasowej pami\u0119ci. Wybieram 10 ostatnich.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/13-1.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/13-1.png\" alt=\"\" class=\"wp-image-20159\" width=\"141\" height=\"55\"\/><\/a><\/figure><\/div>\n\n\n\n<p>W zwi\u0105zku z powy\u017csz\u0105 konfiguracj\u0105 s\u0105 to wyniki po co najmniej 100 sekundach. Zatem czas wystarczaj\u0105cy, by stwierdzi\u0107, czy sterylizacja zosta\u0142a zako\u0144czona, czy nie.<\/p>\n\n\n\n<p>Maj\u0105c ju\u017c dane, na kt\u00f3rych da si\u0119 wykonywa\u0107 operacje obliczeniowe, mog\u0119 u\u017cy\u0107 ponownie operacji function i napisa\u0107 funkcj\u0119 w JavaScript, kt\u00f3ra sprawdzi, czy ostatnia wiadomo\u015b\u0107 zawiera warto\u015b\u0107 dla parametru power r\u00f3wn\u0105 0. Jak pami\u0119tasz z wykresu, taka warto\u015b\u0107 jest wysy\u0142ana w momencie, gdy urz\u0105dzenie przesta\u0142o pracowa\u0107.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/14.png\"><img decoding=\"async\" width=\"768\" height=\"401\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/14.png\" alt=\"Sprawdzanie parametru power\" class=\"wp-image-20161\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/14.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/14-300x157.png 300w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Ryc. 12 Sprawdzanie parametru power<\/figcaption><\/figure><\/div>\n\n\n\n<p>Opisuj\u0105c powy\u017cszy kod:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>zapisuj\u0119 ostatni wynik z pami\u0119ci podr\u0119cznej,<\/li><li>je\u015bli r\u00f3wny jest 0, sprawdzam, dla ilu element\u00f3w moc by\u0142a wy\u017csza ni\u017c 400W,<\/li><li>je\u015bli moc by\u0142a wy\u017csza, dodaj\u0119 +1 do tymczasowego parametru,<\/li><li>zliczam, ile wynik\u00f3w spe\u0142nia powy\u017csze kryterium,<\/li><li>je\u015bli przynajmniej 6 log\u00f3w je spe\u0142nia, ustawiam now\u0105 wiadomo\u015b\u0107 do przekazania dalej,<\/li><li>w innym przypadku nie zwraca mi nic. Dzi\u0119ki temu \u017cadne powiadomienie nie przejdzie dalej.<\/li><\/ul>\n\n\n\n<p>Ostatnim krokiem jest <strong>przes\u0142anie wiadomo\u015bci na telefon<\/strong>. Za pomoc\u0105 wtyczki HomeAssistant do aplikacji Node-RED mam operacj\u0119 nazwan\u0105 call service, kt\u00f3ra pozwala na wys\u0142anie powiadomienia do HomeAssistant. Dzi\u0119ki temu i zainstalowaniu aplikacji HomeAssistant na telefonie spe\u0142ni\u0119 sw\u00f3j cel!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/15.png\"><img decoding=\"async\" width=\"255\" height=\"68\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/15.png\" alt=\"sterilization state\" class=\"wp-image-20164\"\/><\/a><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16.png\"><img decoding=\"async\" width=\"1024\" height=\"425\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16-1024x425.png\" alt=\"Konfiguracja aktywno\u015bci\" class=\"wp-image-20166\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16-1024x425.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16-300x125.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16-768x319.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/16.png 1083w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 13 Konfiguracja aktywno\u015bci<\/figcaption><\/figure>\n\n\n\n<p>Dzi\u0119ki danym zawartym w parametrze Data steruj\u0119 tym, co zostanie wy\u015bwietlone na telefonie.<\/p>\n\n\n\n<p>A teraz czas na ostatni krok! <strong>Zrzut z ekranu po zako\u0144czonej sterylizacji<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17.jpg\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17-1024x1004.jpg\" alt=\"Zako\u0144czenie sterylizacji\" class=\"wp-image-20168\" width=\"499\" height=\"489\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17-1024x1004.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17-300x294.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17-768x753.jpg 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/17.jpg 1080w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/><\/a><figcaption>Ryc. 14 Zako\u0144czenie sterylizacji<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Cel zosta\u0142 osi\u0105gni\u0119ty. Powy\u017cszy artyku\u0142 opisa\u0142 instrukcj\u0119 konfiguracji urz\u0105dze\u0144, aplikacji oraz proces decyzyjny, by m\u00f3c wys\u0142a\u0107 powiadomienie po zako\u0144czeniu sterylizacji. Teraz ju\u017c \u015bmia\u0142o mog\u0119 napisa\u0107, \u017ce mam kolejne smart urz\u0105dzenie. Dodatkowo, dzi\u0119ki informacjom przes\u0142anym w logach, dok\u0142adnie wiem, ile urz\u0105dzenie zu\u017cywa pr\u0105du. I tyle! \ud83d\ude42<\/p>\n\n\n\n<p>Jednak, by mie\u0107 jeszcze bardziej smart urz\u0105dzenie umo\u017cliwiaj\u0105ce sterowanie w\u0142\u0105czeniem konkretnych program\u00f3w, musia\u0142am zhackowa\u0107 hardware. Do tego mog\u0142am u\u017cy\u0107 modu\u0142u NodeMCU lub znanego z poprzedniego artyku\u0142u, udanego, jednorazowego zakupu CC2531.<\/p>\n\n\n\n<p>Kto to wie, kto to wie \ud83d\ude00<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18.jpg\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18-1024x768.jpg\" alt=\"Tajemnica na koniec \ud83d\ude09\" class=\"wp-image-20170\" width=\"591\" height=\"443\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18-1024x768.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18-300x225.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18-768x576.jpg 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18-1536x1152.jpg 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/18.jpg 2048w\" sizes=\"(max-width: 591px) 100vw, 591px\" \/><\/a><figcaption>Ryc. 15 Tajemnica na koniec \ud83d\ude09<\/figcaption><\/figure><\/div>\n\n\n\n<p>Czy artyku\u0142 o zmianie hardware\u2019u i stworzeniu kolejnych algorytm\u00f3w by\u0142by dla Ciebie ciekawy? Daj zna\u0107 w komentarzu! \ud83d\ude42<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;20131&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;10&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 10)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Jak zmieni\u0107 zwyk\u0142e urz\u0105dzenie w SMART?&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 10)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jak zapewne pami\u0119tasz z poprzedniego artyku\u0142u, zmieni\u0142am u siebie w mieszkaniu, u\u017cywaj\u0105c narz\u0119dzi open-source i minimalnym kosztem finansowym, zwyk\u0142e o\u015bwietlenie &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/jak-zmienic-zwykle-urzadzenie-w-smart\/\">Continued<\/a><\/p>\n","protected":false},"author":274,"featured_media":20181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":8,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1316],"tags":[1551,1550,1512,435],"class_list":["post-20131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-miekko","tag-smart-home","tag-inteligentny-dom","tag-poradnik","tag-iot"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/Jak-zmienic-zwykle-urzadzenie-w-SMART.jpg","category_names":["Development na mi\u0119kko"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20131"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/274"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=20131"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20131\/revisions"}],"predecessor-version":[{"id":20184,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20131\/revisions\/20184"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/20181"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=20131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=20131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=20131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}