Wyślij zapytanie Dołącz do Sii

Jak zapewne pamiętasz z poprzedniego artykułu, zmieniłam u siebie w mieszkaniu, używając narzędzi open-source i minimalnym kosztem finansowym, zwykłe oświetlenie w SMART oświetlenie. Gdy zobaczyłam, ile mam z tego korzyści, postanowiłam, że to nie będzie ostatnia rzecz, jaką zrobię.

W tym tekście skupię się na zmianie jeszcze-nie-smart urządzenia na takie smart! Zajmę się urządzeniem, które od kilku miesięcy jest włączone u mnie non stop i nie wyobrażam sobie, bym go nie miała. Sterylizator 4w1! Jeśli jesteś rodzicem, wiesz o czym piszę 😀

Z artykułu dowiesz się m.in.:

  • dlaczego chciałam zmienić sterylizator w urządzenie smart,
  • czego potrzebuję, by mieć smart urządzenie,
  • jaki element zmienia zwykłe urządzenia w smart,
  • jak przebiega integracja z aplikacjami,
  • jaki jest pobór mocy w czasie,
  • o algorytmie działania sterylizacji oraz wysyłania powiadomienia na telefon.

Zanim przejdę dalej, zdradzę Ci, co zmieniłam od ostatniego wpisu w domu, by był bardziej inteligentny. Ano wiatrak w łazience włącza/wyłącza się w zależności od wilgotności (tu oparłam się na odchyleniu i delcie z ostatnich pomiarów), steruję nawilżaczem przez telefon (robiłam reverse engineering), a pralka informuje mnie o zakończeniu prania.

Każda wymieniona modyfikacja śmiało może być opisana jako osobny artykuł. Z każdą miałam sporo problemów: od napisania poprawnego algorytmu po odczyty i pomijanie zakłóceń z urządzeń Wszystkie wiązały się z wieloma emocjami: od frustracji po ekscytację. Jeśli chcesz, bym podzieliła się moimi przygodami – zostaw komentarz i napisz, co Cię interesuje 🙂

Dlaczego chciałam zmienić sterylizator w urządzenie smart?

Przy niemowlęciu człowiek działa zadaniowo. Jak wykona wszystkie zadania, chce mieć spokój i odpowiednią ilość snu. A jak o czymś zapomina – ta harmonia jest zaburzona. Dlatego, jeśli mogę, wykorzystuję automatyzację, by ułatwić sobie życie i wykorzystać urządzenia, które mam. Posiadam sterylizator Neno 4w1.

Głównie korzystam z 3 funkcji:

  • podgrzewania mleka/jedzenia,
  • odmrażania jedzenia,
  • sterylizacji.

I jak nie zapominam o podgrzewaniu, tak o końcu sterylizacji ZAWSZE, a następnie muszę ponownie sterylizować te same rzeczy, co skutkuje położeniem się spać o 23.30 lub później, a nie o 22.00 😉

Pomyślałam, że telefon mam zawsze przy sobie, więc warto by było, gdyby na komórkę docierały powiadomienia dotyczące końca sterylizacji. Ile czasu mogłabym zaoszczędzić dzięki temu!

I to był mój pierwszy cel – wysłanie powiadomienia z urządzenia na telefon.
Spoiler alert: na dzień pisania artykułu mogę już sterować sterylizatorem przez telefon (zarówno jako osobnym modułem jak i z powiadomień), co wymagało zmiany w hardware’rze. Jednak tu skupię się na jednej funkcjonalności.

Czego potrzebuję, by mieć smart urządzenie?

By stworzyć z takiego urządzenia urządzenie smart, należy albo zmienić w nim hardware albo dodać fizyczny element, który będzie monitorował pracę urządzenia i wysyłał informacje. W związku z tym, że chciałam to zrobić dobrze, szybko i tanio, wybrałam drugie rozwiązanie.

Zmiany, które musiały się wydarzyć:

  • zakup urządzenia, które będzie potrafiło monitorować moc pobieraną przez docelowe urządzenie i będzie wysyłało dane,
  • odpowiednia integracja urządzenia i aplikacji, abym miała dostęp do danych,
  • zrozumienie logów, żeby zobaczyć, co jest wysyłane z urządzenia monitorującego,
  • stworzenie algorytmu odpowiedzialnego za wysyłanie powiadomień na telefon.

Jak już wiesz z wcześniejszego artykułu, głównie interesuje mnie protokół Zigbee, a do sterowania Inteligentnym domem używam 4 aplikacji:

  • HomeAssistant,
  • Node-RED,
  • Zigbee2MQTT,
  • Mosquito.

Element zmieniający zwykłe urządzenia w smart

Zacznijmy od pierwszego punktu. Na rynku istnieją różne rozwiązania, jednak najprostszym jest zakup gniazdka-wtyczki. U mnie wybór padł na: wtyczkę ZigBee 16A z firmy RTX.

Wtyczka ZigBee 16A
Ryc. 1 Wtyczka ZigBee 16A

Na rynku istnieją wtyczki, które mają zarówno połączenie po WiFi, jak i ZigBee, jednak mnie interesuje wyłącznie protokół ZigBee. Dodatkowo, w momencie zakupu cena wynosiła 49 PLN.

Integracja z aplikacjami

Integracja ze sterylizatorem jest prosta – zwyczajnie między kontakt a urządzenie wpinasz wtyczkę. By dane były widoczne w aplikacji, należy skonfigurować odpowiednio Zigbee2MQTT wraz z gniazdkiem.

Konfiguracja Zigbee2MQTT
Ryc. 2 Konfiguracja Zigbee2MQTT

Patrząc na logi w Zigbee2MQTT, mogłam sprawdzić, jakie informacje są przesyłane i które z nich mogę wykorzystać, by osiągnąć swój cel.

Ryc. 3 Logi w Zigbee2MQTT
Ryc. 3 Logi w Zigbee2MQTT

Najważniejsza dla mnie informacja znajduje się pod parametrem power. Jest to ilości energii elektrycznej użytej w danym momencie [wyrażonej w watach]. Po konfiguracji wtyczka podpięta do sterylizatora powinna być widoczna zarówno w aplikacji HomeAssistant, jak i Node-RED.

Zatem czas na sprawdzenie jak sterylizator zachowuje się w dwóch trybach:

  • podgrzewania jedzenia,
  • sterylizacji.

Analiza poboru mocy przez urządzenie w czasie, czyli ile urządzenie bierze prądu

Zużycie prądu możesz sprawdzić albo w pojedynczych logach w Zigbee2MQTT albo w historii aplikacji HomeAssistant, gdzie znajdziesz wykres. Ja wybrałam wykres. Wchodząc w historię urządzenia oraz wybierając konkretny przedział czasowy, sprawdziłam charakterystykę działania sterylizatora. Oś pionowa wskazuje ilość energii elektrycznej [W], oś pozioma godzinę.

Zużycie energii elektrycznej w czasie
Ryc. 4 Zużycie energii elektrycznej w czasie

Co działo się w tych przedziałach czasowych? Urządzenie włączyłam dopiero ok. godziny 18:20, zatem woda w nim była w temperaturze pokojowej. Następnie włączyłam funkcję podgrzewania jedzenia. Nie wyłączyłam sterylizatora po wyjęciu butelki, a ok. godziny 20:40 zaczęłam sterylizację butelek.

Podsumowując: między 18:20 a 2:00 były użyte 2 funkcje:

  • podgrzanie/utrzymanie wody w temperaturze 40 stopni C,
  • sterylizacja, gdzie następuje podgrzanie wody do 100 stopni C, a następnie utrzymanie tej temperatury przez 10 minut.

Czy domyślasz się, które słupki za co odpowiadają? Przyjrzyjmy się im bliżej.

Podgrzewanie

Zużycie energii podczas podgrzewania
Ryc. 5 Zużycie energii podczas podgrzewania

Na wykresie między 18:20 a 18:40 można zauważyć, że przy włączeniu urządzenia, w którym woda ma mniejszą temperaturę niż 40 stopni C, następuje podgrzanie wody do tejże temperatury. Pobór mocy wynosi ok. 238 W. By utrzymać temperaturę, między 19:00 a 20:30 urządzenie co 10 minut grzeje wodę z mocą 118 W przez okres 2,5 minuty. Dodatkowo widać niestabilność stanu w trakcie przełączania (coś podobnego do szumu elektrycznego) w okolicach 19:20, 19:30 oraz 19:55.

Sterylizacja

W zależności od tego, jaka temperatura wody była w urządzeniu, długość cyklu może się różnić. Najlepiej widać to w przybliżeniu:

Zużycie energii podczas sterylizacji
Ryc. 6 Zużycie energii podczas sterylizacji

Można zauważyć, że woda ok. 22:00 była na tyle zimna, że sterylizator potrzebował więcej czasu, aby zakończyć cykl sterylizacji. O 22:28 (czyli ok. 7 minut po ostatniej akcji) urządzenie potrzebowało mniej czasu do wykonania swojej funkcji. Dodatkowo, by urządzenie zadziałało w funkcji sterylizacji, potrzebuje ok. 473 W przez dłuższy czas.

Dzięki powyższej analizie można zauważyć pewien wzorzec, który przyda nam się w stworzeniu algorytmu do wysłania powiadomień o zakończeniu sterylizacji.

Algorytm działania sterylizacji oraz wysłania powiadomień na telefon

Już wiemy, ile mocy pobiera urządzenie przy konkretnych akcjach i przez jaki czas. Zatem rozplanujmy, co będzie nam dodatkowo potrzebne, by stwierdzić, że sterylizacja została zakończona.

Mój plan był taki, aby zbierać informacje z ostatnich 4 minut i sprawdzić, czy wartość mocy była przez dłuższy czas powyżej 400 W, po czym zmieniła się na 0. I to by był dobry plan! Gdybym tylko miała pewność, że urządzenie wysyła co X sekund taką informację. Jednak po przeanalizowaniu logów z Zigbee2MQTT okazało się, że wtyczka wysyła informację raz co 2 sekundy, a innym razem co 2 minuty. Niezależnie od tego, czy urządzenie jest włączone, czy sterylizuje, czy podgrzewa.

Zatem zamiast opierać się na buforze czasowym, wybrałam opcję: ostatnie 10 wyników. Jak wiesz, lubię automatyzację w Node-RED i tu również wykorzystałam tę aplikację do stworzenia takiego algorytmu. Gotowy algorytm:

Algorytm w Node-RED
Ryc. 7 Algorytm w Node-RED

Wiedząc już, jakie są główne założenia, czas na zastanowienie się, co może pójść nie tak.

Dobry tester od razu patrzy na wartości brzegowe, zanim przejdzie do implementacji, gdyż mogą wystąpić szumy elektryczne (polecam z zapoznaniem się ze zjawiskiem debouncing). Na szczęście jest to znane zjawisko i w aplikacji do automatyzacji można łatwo je zredukować. Następnie, na podstawie jakiejś wartości powinniśmy wykrywać zmianę stanu. Jeśli przez 40 minut pobór mocy wynosi 473 W albo jeśli będą wahania poboru mocy, to już można stwierdzić, że nie jest to odpowiedni parametr. Jednak jednostka czasu już jak najbardziej tak.

Ostatnią kwestię stanowi sposób, w jaki wyliczymy, czy zmiana stanu była chwilowa (np. chwilowy spadek mocy), czy jednak akcja została zakończona. To zostanie oprogramowane w funkcji obliczenia stanu.

Wiemy, co należy zrobić, jesteśmy świadomi, co może pójść nie tak, zatem przejdźmy do konkretów!

Działania krok po kroku

Informacje z gniazdka są przesyłane do Zigbee2MQTT, więc Node-Red powinien zostać tak skonfigurowany, by móc je wykorzystać. W aplikacji mam kilka operacji dostosowanych do Zigbee2MQTT.

Konfiguracja urządzeń
Ryc. 8 Konfiguracja urządzeń (więcej informacji na ten temat znajdziesz tutaj)

W momencie konfiguracji interesuje mnie operacja IN, która odpowiada za odbieranie wiadomości z kolejki. Poniższy rysunek przedstawia konfigurację aktywności.

Najważniejsze aspekty to: serwer (u mnie nazwany Mosquito), urządzenie (Sterylizator(TS011F_plug_1)), a następnie określenie, co interesującego wyciągniemy z logów. W tym przypadku wybrałam parametr power.

Konfiguracja aktywności
Ryc. 9 Konfiguracja aktywności

W związku z tym, że w dalszych krokach chciałam się opierać na parametrze czasowym, konieczna była modyfikacji dalej przesyłanej wiadomości. Używając operacji function i JavaScript, podmieniam wiadomość.

prepare payload
Podmiana wiadomości
Ryc. 10 Podmiana wiadomości

Rozszyfrowując powyższy kod:

  • tworzę nową wiadomość z konkretnym ciałem,
  • tworzę 3 parametry:
    • power,
    • timestamp,
    • timechanges.

Najciekawszym z nich może być timechanges. Jest to parametr, który zostanie użyty w następnym kroku i odpowiada za eliminację nadmiaru zdarzeń.

Następnym krokiem jest debounce, czyli zmniejszenie szumu elektrycznego. W nim będę opierać się na stworzonym parametrze timechanges.

Debounce
Zmniejszenie szumu elektrycznego i parametr timechanges
Ryc. 11 Zmniejszenie szumu elektrycznego i parametr timechanges

Dzięki temu biorę pod uwagę wiadomość ze sterylizatora nie młodszą niż 10 sekund od ostatniej. Mając już ustalone, które wartości są dla mnie ważne i jaka ma być ich częstotliwość, przechodzę do tematu ich zapamiętywania w tymczasowej pamięci. Wybieram 10 ostatnich.

13 1 - Jak zmienić zwykłe urządzenie w SMART?

W związku z powyższą konfiguracją są to wyniki po co najmniej 100 sekundach. Zatem czas wystarczający, by stwierdzić, czy sterylizacja została zakończona, czy nie.

Mając już dane, na których da się wykonywać operacje obliczeniowe, mogę użyć ponownie operacji function i napisać funkcję w JavaScript, która sprawdzi, czy ostatnia wiadomość zawiera wartość dla parametru power równą 0. Jak pamiętasz z wykresu, taka wartość jest wysyłana w momencie, gdy urządzenie przestało pracować.

Sprawdzanie parametru power
Ryc. 12 Sprawdzanie parametru power

Opisując powyższy kod:

  • zapisuję ostatni wynik z pamięci podręcznej,
  • jeśli równy jest 0, sprawdzam, dla ilu elementów moc była wyższa niż 400W,
  • jeśli moc była wyższa, dodaję +1 do tymczasowego parametru,
  • zliczam, ile wyników spełnia powyższe kryterium,
  • jeśli przynajmniej 6 logów je spełnia, ustawiam nową wiadomość do przekazania dalej,
  • w innym przypadku nie zwraca mi nic. Dzięki temu żadne powiadomienie nie przejdzie dalej.

Ostatnim krokiem jest przesłanie wiadomości na telefon. Za pomocą wtyczki HomeAssistant do aplikacji Node-RED mam operację nazwaną call service, która pozwala na wysłanie powiadomienia do HomeAssistant. Dzięki temu i zainstalowaniu aplikacji HomeAssistant na telefonie spełnię swój cel!

sterilization state
Konfiguracja aktywności
Ryc. 13 Konfiguracja aktywności

Dzięki danym zawartym w parametrze Data steruję tym, co zostanie wyświetlone na telefonie.

A teraz czas na ostatni krok! Zrzut z ekranu po zakończonej sterylizacji.

Zakończenie sterylizacji
Ryc. 14 Zakończenie sterylizacji

Podsumowanie

Cel został osiągnięty. Powyższy artykuł opisał instrukcję konfiguracji urządzeń, aplikacji oraz proces decyzyjny, by móc wysłać powiadomienie po zakończeniu sterylizacji. Teraz już śmiało mogę napisać, że mam kolejne smart urządzenie. Dodatkowo, dzięki informacjom przesłanym w logach, dokładnie wiem, ile urządzenie zużywa prądu. I tyle! 🙂

Jednak, by mieć jeszcze bardziej smart urządzenie umożliwiające sterowanie włączeniem konkretnych programów, musiałam zhackować hardware. Do tego mogłam użyć modułu NodeMCU lub znanego z poprzedniego artykułu, udanego, jednorazowego zakupu CC2531.

Kto to wie, kto to wie 😀

Tajemnica na koniec 😉
Ryc. 15 Tajemnica na koniec 😉

Czy artykuł o zmianie hardware’u i stworzeniu kolejnych algorytmów byłby dla Ciebie ciekawy? Daj znać w komentarzu! 🙂

5/5 ( głosy: 9)
Ocena:
5/5 ( głosy: 9)
Autor
Avatar
Emilia Lendzion-Barszcz

Tester w Sii oraz szkoleniowiec. Na co dzień zajmuje się testowaniem backendu – szeroko rozumianą automatyzacją, wydajnością oraz testami jednostkowymi, zaś po godzinach chwyta adrenalinę za sprawą m.in. enduro. Znajdziesz ją tutaj: https://www.facebook.com/JavaGirlPL

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?