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.
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.
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!
Do następnego!
Wygląda na mega skomplikowane
OdpowiedzUsuńBardzo istotne informacje. Mnie od jakiegoś czasu interesuje taka kwestia, jak drukowanie płytek PCB. To w elektronice bardzo istotny temat, a o wszystkim przeczytacie na stronie https://tspcb.pl/ . Na pewno są to ważne informacje. Jeśli ktoś z Was potrzebuje płytek PCB, to warto skorzystać z podanej wcześniej firmy, bo ona zajmuje się ich wykonywaniem na zamówienie.
OdpowiedzUsuń