Postanowiłem podłączyć rekuperator Thessla Green do Home Assistanta. Rekuperator posiada dosyć dobrze udokumentowane wyjście ModbusRTU. Do połączenia postanowiłem użyć konwertera RS485 na Ethernet dosyć popularnej firmy Waveshare. HA posiada wsparcie dla Modbus-TCP, ale chcę zachować pewien porządek w inteligentnym domu – wszystko ma być obsługiwane przez MQTT, a HA ma się zająć automatyką i interfejsem graficznym obsługi inteligentnego domu. Widziałem już opisy, że użytkownicy narzekali na niedziałanie implementacji Modbus w HA. U mnie miało to wyglądać tak:
Rekuperator <-> MQTT <-> HA
Ponieważ jednak rekuperator nie posiada obsługi MQTT będzie to wyglądało następująco:
Rekuperator <-> Pośrednik <-> MQTT <-> HA
Przedmiotem niniejszego artykułu jest właśnie ten „pośrednik”. Został on napisany w PHP. Dokładny opis mojego rozwiązania do obsługi MQTT w PHP znajduje się tutaj:
Link
Nie będę tego teraz powtarzał – proszę zapoznać się z tym rozwiązaniem. Moduł obsługi MQTT w PHP może służyć zarówno do realizacji pełnej automatyzacji, jak i do komunikacji różnych źródeł danych z MQTT. Właśnie ta druga funkcjonalność została tu użyta.
Konwerter Waveshare to dosyć ciekawe urządzenie. Oprócz konwersji do Modbus TCP ma też konwersję do MQTT. Takie MQTT posiada dwie wersje – przeźroczystą i JSON. W przypadku JSON trzeba jednak sporo podefiniować w konwerterze, a i tak są ograniczenia. Bardzo mnie zaciekawił tryb przeźroczysty, który niestety jest źle udokumentowany. Na podstawie jednego filmu domyśliłem się działania – poprzez brokera MQTT przesyłane są pełne binarne dane ModbusRTU łącznie z sumą kontrolną CRC. Waveshare nie ingeruje w przesyłane dane, czyli wysyłając coś do urządzenia sami musimy obliczyć CRC i dodać je na końcu. Taki tryb zapewnia nam pełne panowanie nad Modbus w tym możliwość odczytu i zapisu kilku rejestrów równocześnie. Zapis kilku rejestrów równocześnie jest wymagane przez niektóre funkcje w Thessla Green np. wymuszenie chwilowej intensywności nawiewu. Ponieważ mój „pośrednik” i tak ma implementację MQTT potrzebną do współpracy z HA postanowiłem użyć „ModbusMQTT”. W miejscu realizacji wszystko pracuje w sieci lokalnej, ale użycie MQTT może być bardzo ciekawe w przypadku urządzeń za zaporą lub bez możliwości połączenia z zewnątrz (np. połączone przez LTE). Wystarczy, że każde urządzenie zobaczy brokera MQTT.
Obsługa Modbus w Waveshare poprzez MQTT ma wiele zalet, ale też jedną wadę – komunikaty MQTT są asynchroniczne – coś publikujemy i coś subskrybujemy. Dla MODBUS musimy wysłać zapytanie do rekuperatora i poczekać na odpowiedź. Zrealizowałem to w postaci kolejki. Zadania są wkładane do kolejki, a po każdej wysyłce jest oczekiwanie na odbiór. Takie rozwiązanie ma jeden mankament – jeśli nie otrzymamy odpowiedzi to możemy czekać w nieskończoność. Problem rozwiązałem poprzez dodanie watchdoga, który gdy stwierdzi, że odpowiedź nie nadeszła w czasie kilku sekund zeruje całą kolejkę i umożliwia ponowną transmisję.
Poniżej lista funkcjonalności modułu pośrednika:
- Rejestracja HA Discovery – nasz rekuperator zostanie automatycznie rozpoznany i dodany do listy urządzeń w HA
- Kolekcjonowanie danych – odpytujemy się o określone rejestry rekuperatora i gromadzimy odpowiedzi w tablicy. Gdy przychodzi odpowiedź na jedno z zapytań, które wybrałem jako kończące, cała zawartość zamieniana jest na JSON i wysyłana do brokera MQTT.
- Zapis danych do rekuperatora (załączenie/wyłączenie, ustawianie funkcji itp.)
Poniżej kod PHP:
Kod: PHP
Tryb bypass
W rekuperatorze Thessla Green jest dostępny bypass. Niestety nie można nim sterować bezpośrednio. Możemy tylko zezwolić na jego użycie lub tego zabronić. Gdy jest zgoda, reku na podstawie ustawionych temperatur załączy bypass w trybie chłodzenia lub grzania. Może się jednak okazać, że gdy w lato obniżymy temperaturę w domu przy użyciu klimatyzacji (np. spodziewając się większej liczby gości) reku załączy bypass w trybie grzania, a jesienią, gdy dogrzejemy dom kominkiem stwierdzi, że warto go schłodzić. Postanowiłem to zatem usprawnić poprzez wprowadzenie dwóch niezależnych trybów (przełączników): bypass-chłodzenie i bypass-grzanie. Jeśli oba są wyłączone zgoda na bypass nie jest udzielana, jeśli oba są załączone – działa automat producenta. Jeśli jednak załączony jest tylko jeden rodzaj bypassu automatyka kontroluje temperatury nawiewu i wywiewu i zmienia flagę zezwolenia na użycie bypassu. Oba przełączniki są wirtualne – ich stan zapisywany i odczytywany jest z pliku. Oczywiście przy każdym odczycie program wykonuje odpowiednie kontrole i ewentualne zmiany stanu.
Home Assistant
Choć HA dodaje urządzenie automatycznie, warto jednak poukładać je na własnym dashboardzie.
Oto przykład:
Rekuperator podaje bardzo dużą ilość informacji. Ja wykorzystałem tylko niewielką, ale istotną z mojego punktu widzenia część. Reku ma dwa wyjścia MODBUS. Oba mają ten sam adres. Kontroler Air++ podłączony do niewłaściwego gniazda działa dokładnie tak samo, jak do dedykowanego. Stąd wniosek, że poprzez MODBUS może w pełni sterować REKU i to nawet takimi funkcjami jak kalibracja. Niestety, opisu tych funkcji nie znajdziemy w dokumentacji.
Jeśli artykuł uznacie za przydatny to dajcie plusa.
Fajne? Ranking DIY