Integracja systemów w Home Assistant

Czołem czytelniku,

W ostatnim wpisie podzieliłem się z Tobą opisem projektu (framework IoT) przyspieszającego rozwój urządzeń IoT, który tworzę na własny użytek, przy okazji poznając elektronikę i funkcjonalności języka C++, które nie zawsze mam okazję zobaczyć podczas pracy zawodowej.

Temat mocno rozwinął się ostatnimi czasy, zwłaszcza dzięki konieczności przesiadki z aplikacji Blynk na Home Assistant. Dlaczego nie zrobiłem tego wcześniej?

Panel kontrolny systemu - sekcja "Kotłownia"

Jak to działa?

Znane jest Wam chyba powiedzenie - jak sobie pościelisz, tak się wyśpisz. Dokładnie tak samo jest z architekturą oprogramowania czy sprzętu. Przyznam szczerze, że decyzja by nie pakować się w BlynkLibrary ani inne biblioteki podczas pisania pierwszego firmware do płytek PCB, które uwiążą całkowicie implementację na smycz danej usługi, była strzałem w dziesiątkę.

O MQTT, czyli warstwie komunikacyjnej urządzenia z serwerem wspominałem już w poprzednim wpisie. Dzięki wykorzystaniu protokołu MQTT w oprogramowaniu układowym zyskałem pełną separację logiki pracy urządzenia od interfejsu użytkownika.

Wszystkie urządzenia wykonawcze systemu łączą się do zdalnego brokera MQTT. Podłącza się tam również instancja Home Assistant. Urządzenia wykonawcze w zasadzie "nie widzą" procesów zachodzących w Home Assistant - one finalnie wykonują tylko komendy oraz komunikują swój stan do brokera MQTT. Nie ma znaczenia z perspektywy urządzeń, co działa obok.

Jeden z modułów wykonawczych - urządzenie 433MHz bridge.

Na ten moment do brokera podłączają się:
  • Urządzenie "Energy Monitor" czyli płytka PCB z sensorem odbiciowym, która zlicza obroty tarczy licznika mechanicznego, który z kolei mierzy zużycie energii elektrycznej. Dzięki zliczaniu "impulsów" (obrotów tarczy) urządzenie jest w stanie obliczyć i przesłać do brokera aktualne zużycie energii elektrycznej a także zużycie całkowite (inkrementacyjne).
  • Urządzenie "Boiler Monitor" czyli moduł kontrolujący pracę kotła grzewczego. Tutaj dzięki magistrali CAN jest możliwość zdalnego sterowania kotłem a także odczytywania jego parametrów.
  • Urządzenie "433MHz Bridge" czyli moduł "pilot RC" sterowany przez WiFi. Moduł na ten moment służy do sterowania gniazdami elektrycznymi RC 433MHz.
  • Instancja Home Assistant, która zbiera dane ale może też wysyłać komendy. To jest w zasadzie pulpit oraz procesy automatyki.
Poza MQTT do Home Assistanta łączą się:
  • telefony przez aplikację (lokalizacja strefowa "w domu/poza domem", poziomy baterii etc).
  • komputery (aplikacja Chrome lub via WWW).

Schemat przedstawiający aktualną instalację systemu.

Ale komu to potrzebne, a dlaczego?

Zaczęło się od tego, że byłem leniwy i zamiast się schylać i wyjmować wtyczkę z gniazdka elektrycznego stwierdziłem, że lepiej to robić zdalnie. Najlepiej już w ogóle z telefonu czy komputera. No wariactwo, marnotrawienie czasu i głupota? Prawda? Nie. Też użyj lenistwa do rozwiązania problemu!

Gdybym poprzestał tylko na wyłączaniu choinki, to byłoby to faktycznie bezcelowe. Szybko jednak do zdalnej kontroli doszło więcej elementów, które w końcu zaczęły tworzyć jeden, integralny system.

Pierwszy kamień milowy...

Jednym z największych motywatorów a zarazem jednym z najbardziej rozbudowanych pod kątem oprogramowania modułów okazał się kontroler kotła grzewczego. To był mój trzeci hardware'owy projekt. Iteracji płytek nie ma sensu liczyć, bo już trochę tego było. W każdym razie jednocześnie walczyłem z rozgryzieniem samego protokołu komunikacyjnego jak i ze stabilnością samego oprogramowania.

Podczas rozwoju oprogramowania zmuszony byłem do podjęcia pewnych kluczowych decyzji:
  • Jeden protokół dla wszystkich urządzeń. Tutaj wahałem się między skorzystaniem z popularnego wtedy systemu Blynk a MQTT. Nie podobał mi się kod biblioteki Blynk (ze względu na wszechobecne singletony), więc stwierdziłem, że jakoś zmostkuję aplikację Blynk z tym protokołem. Efekt był taki, że napisałem w C# swego rodzaju proxy, które sklejało MQTT z serwerem Blynk, więc finalnie miałem możliwość kontroli systemu z aplikacji Blynk na Androida.
  • Biblioteka kodów współdzielonych. W pewnym momencie zauważyłem, że w każdym urządzeniu potrzebuję podobnego rodzaju funkcjonalności. Myślę, że tego nie trzeba tłumaczyć. Dzisiaj wygląda to świetnie, bo jednym kliknięciem mogę uaktualnić tą część wspólną we wszystkich projektach.

Automatyzacje, oszczędności i drugi kamień milowy...

Podczas kolejnego sezonu grzewczego udało się, dzięki analizie wykresów w aplikacji Blynk ustawić kocioł grzewczy w taki sposób, że zmniejszyliśmy zużycie paliwa o kilkadziesiąt procent.

Automatyzacje pozwoliły nam latem korzystać w optymalny sposób z elektrycznego podgrzewania ciepłej wody użytkowej.

Widok zużycia energii elektrycznej pozwala również na optymalizację zużycia energii i wykrycie potencjalnych prądożernych urządzeń.

Największy postęp nastąpił, gdy podjąłem dwie kluczowe decyzje - przesiadka na PlatformIO, co znacząco przyspieszyło rozwój oprogramowania układowego oraz przejście z Blynk na Home Assistant.

Panel Energia wypełniony danymi z systemu IoT.

Trzeci kamień milowy - work in progress...

Zanim przypieczętuję osiągnięcie kamienia milowego, wiem, że głównym motywem przewodnim będzie integracja. Niedawno udało się zintegrować z systemem kamerę IP, dzięki wgraniu OpenWrt na router a także wyeksponowaniu tunelu IP, by umożliwić podgląd w czesie rzeczywistym z pomocą Home Assistant. Kwestia OpenWrt może być dobrym tematem na kolejny wpis.

Tymczasem, do usłyszenia! 
Na wszelkie pytania, jak zawsze, odpowiem chętnie w komentarzach.
Do następnego!

Komentarze

Prześlij komentarz