logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Podłączenie rekuperatora do Home Assistant poprzez RS485

krzbor 26 Lis 2024 19:56 2841 4

TL;DR

  • Podłączono rekuperator Thessla Green z ModbusRTU do Home Assistanta przez konwerter RS485-Ethernet Waveshare i pośrednik PHP publikujący dane do MQTT.
  • Pośrednik działa jako ModbusMQTT: wysyła binarne ramki ModbusRTU z CRC przez broker MQTT, a odpowiedzi zbiera kolejką z watchdogiem.
  • Rekuperator ma dwa wyjścia MODBUS z tym samym adresem, a tryb przeźroczysty Waveshare przenosi pełne dane ModbusRTU razem z CRC.
  • Rozwiązanie zapewnia automatyczne wykrycie w HA Discovery, zbieranie rejestrów do JSON i zapis sterowań, w tym załączenie, wyłączenie oraz funkcje rekuperatora.
  • Bypass nie jest sterowany bezpośrednio; można tylko zezwalać lub zabraniać, więc powstały osobne przełączniki bypass-chłodzenie i bypass-grzanie z logiką temperatur.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Konwerter Waveshare RS485 do Ethernetu z migającymi diodami sygnalizacyjnymi.
    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
    Zaloguj się, aby zobaczyć kod


    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:
    Zrzut ekranu panelu sterowania i odczytów rekuperatora w Home Assistant

    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
    O autorze
    krzbor
    Poziom 29  
    Offline 
    krzbor napisał 1735 postów o ocenie 1046, pomógł 40 razy. Jest z nami od 2004 roku.
  • REKLAMA
  • #2 21322576
    DJ MHz
    Poziom 26  
    Posty: 1139
    Pomógł: 36
    Ocena: 242
    Na forum Artura są fajne wizualizacje do thessli. Ja dodatkowo zamontowałem w skrzynkach rozdzielczych na wyciągu/nadmuchu dwa czujniki sht30 modbus.
  • REKLAMA
  • #3 21322592
    krzbor
    Poziom 29  
    Posty: 1735
    Pomógł: 40
    Ocena: 1046
    DJ MHz napisał:
    Na forum Artura są fajne wizualizacje do thessli.

    Widziałem je. Nawet chciałem skopiować, ale stwierdziłem, że jak to zwykle bywa - na początku fascynacja, a potem całość ma po prostu działać. Ostatecznie okaże się, że istotna będzie szybkość wentylacji i odczyty zużycia filtrów.
  • REKLAMA
  • #4 21322748
    __Maciek__
    Poziom 21  
    Posty: 366
    Pomógł: 25
    Ocena: 91
    W zasadzie ciekawa konfiguracja .. z naciskiem na ciekawa.

    Moim zdaniem im mniej elementów pośredniczących tym lepiej. Niemniej sam też używam DEVICE -> MQTT -> HA. Hula to właśnie z sieci remote po GSM za NAT-em - z zewnątrz się nie dostanę. Pomijam tu połączenia inicjowane z sieci remote po VPN np. Wireguard. Pozostają potworki takie jak Tuya, lub transfer po MQTT do zdalnego serwera. I z tego właśnie korzystam.

    Rozumiem że robisz w tym w czym umiesz / lubisz pisać i jeśli działa to OK, niemniej uważam że niepotrzebnie komplikujesz.

    Ja dla urządzeń MODBUS RTU ( licznik + falownik PV ) poszedłem w kierunku swobodnego wyboru - esphome / własna aplikacja - obie wersje spisują się nieźle. ESPhome szybciej, własna aplikacja ma zalety w postaci większej elastyczności ( takie moje zdanie ).
    Przez jakiś czas na pająku, jakieś 2m-ce temu popełniłem moduł esp01s w obudowie po przekaźniku wago 859 na szynę din ( ok. 6mm szerokości ) - akurat miałem 5V więc z tego napięcia całość zasilana - ale bez problemu zmieści się jeszcze DC/DC. Przy dedykowanej PCB skończyły się problemy ze stabilnością, które okresowo występowały na pająku.
    Wizualizacja projektu płytki PCB z elementami elektronicznymi.

    Aktualnie ćwiczę esp32c3, jako broker urządzeń BLE + zliczanie impulsów z licznika energii + interfejs PIR + sterowanie klimatyzatorem po IR.
    Rozdzielnica z modułami elektronicznymi i okablowaniem

    Dorwałem kiedyś gotowy konwerter, z uruchomieniem którego kolega miał problemy i nie przekonał mnie. Gotowe konwertery dla przemysłu odpuszczam bo dochodzi połączenie po kablu a mnie to nie jest niezbędne .. do tego jak widać dziś do usieciowania urządzeń modbus wystarczy ok 6mm w rozdzielnicy.

    Najważniejsze że w rozwiązaniach domowych są to systemy nie krytyczne - jak się zwiesi w większości przypadków nic się nie stanie, a ewentualne szkody są niewielkie. W tym kierunku uważam że trzeba iść.
  • #5 21322963
    krzbor
    Poziom 29  
    Posty: 1735
    Pomógł: 40
    Ocena: 1046
    __Maciek__ napisał:
    Rozumiem że robisz w tym w czym umiesz / lubisz pisać i jeśli działa to OK, niemniej uważam że niepotrzebnie komplikujesz.

    Tam gdzie to możliwe wolę komunikację po kablu. A stworzenie takiego hardware trochę czasu by mi zajęło. Rzeczywiście, decydując się na WiFi można dać ESP8266 i sprzętowo obsłużyć MODBUSa, a z drugiej strony od razu wystawiać sensowne MQTT z HA Discovery. Tylko nie do końca widzę sens robić coś takiego dla jednego urządzenia. To nie tylko problem z budową, ale i testowaniem oprogramowania oraz jego stabilnością. Dla mnie zrobił to Waveshare :) Może jeszcze dlaczego PHP - otóż jest to język interpretowany i międzyplatformowy. Poprawki nie wymagają żadnej kompilacji. Dla mnie dużą zaletą tego języka jest jego znaczna zgodność wsteczna. Niestety nie znam obecnie bardzo modnego Pythona.
📢 Słuchaj (AI):
REKLAMA