Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Hewalex sterownik G-422-P07 Modem Eko-Lan Geco G927.01 Protokół 485

elakota 14 Sep 2018 01:21 5349 11
  • #1
    elakota
    Level 13  
    Witam,
    Mam sterownik pompy solarów G-422-P07. Chciałbym aktualne statusy pobrać do swojego systemu po RS485. Chwilowo mam dostęp do modemu Eco-Lan , który pobiera dane z pompy i wysyła poprzez internet do serwisu i tam poprzez www można podglądać pracę solarów. Ten sposób nie jest dla mnie optymalny dlatego podsłuchiwałem komunikację.
    W instrukcji pisze żeby prędkość ustawić na 38400 adresy sterownika pompy fizyczny i logiczny na 2. Nie jest podana długość ramki dlatego ustawiłem 8N1

    Na początek podsłuchiwałem zapytanie z Eko-Lana bez podpiętego sterownika pompy.
    Przy ustawieniu opóźnienia pomiędzy kolejnymi ramkami 4ms wychodzi na to że modem wysyła ramkę zawsze rozpoczynającą się od hex 00 0B.
    Modem wysyła 33 podwójne ramki

    Tutaj nagranie podsłuchu gdy nie jest podpięty sterownik do modemu i bez połączenia do internetu.






    Gdy sterownik jest podpięty ale nadal bez internetu to po po pierwszej parze zapytania odpowiada:
    hex FC F3 01 33 dziesietnie 252 243 1 51
    Hewalex sterownik G-422-P07 Modem Eko-Lan Geco G927.01 Protokół 485

    Gdy modem jest podpięty do sterownika i do internetu to komunikacja wygląda następująco:




    Filmik został nagrany 2018.09.11 7:48
    W tym czasie na panelu sterownika były wyświetlane następujące dane:
    Hewalex sterownik G-422-P07 Modem Eko-Lan Geco G927.01 Protokół 485


    Czy komuś w tym chaosie danych udało się zobaczyć w którym miejscu sterownik wysyła dane?
  • #2
    elakota
    Level 13  
    Witam,

    Czy jest tu ktoś ze Śląska, okolic Żor, Pszczyny, Jastrzębia kto ma dostęp do pompy solarów ze sterownikiem G-422-P07?
  • #3
    tgruse
    Level 2  
    Już niedługo będę posiadaczem pompy ciepła PCWU 3kW i będę rozgryzać ramki. Takie zabawy w matrixie mam za sobą, więc pewnie mi się uda rozgryźć. Będę informował.

    Dodano po 13 [minuty]:

    Na pierwszy rzut oka nie podoba mi się ilość "jedynek" w bajtach. Spróbuj podglądnąć transmisję na 8E1.

    Dodano po 3 [godziny] 58 [minuty]:

    Dużo wskazuje, że transmisja jest 7-bitowa. Nie widzę sensownych odpowiedzi ze sterownika. Może coś zakłóca transmisję. Dziwne jest powtarzanie ramek przez modem. Czy nie wchodzi gdzieś echo?
  • #4
    elakota
    Level 13  
    Cześć,

    Udało mi się odczytać temperatury ze sterownika solarów i z pompy ciepła.

    Ze sterownika solarów jest znacznie łatwiej bo na konkretną ramkę zapytania otrzymujesz odpowiedź ze statusami.

    Przy pompie ciepła komunikacja lokalny panel <> pompa ciepła chodzi non stop i trzeba podsłuchiwać.

    Jest też różnica: temperatura w pompie ciepła jest wyświetlana z dokładnościa do 1 miejsca po przecinku.

    IF RX_Index>=60 THEN
    FOR Loop := 0 TO RX_Index DO (*Check protocol*)
    IF RX_Input[Loop]=16#69 AND RX_Input[Loop+1]=16#1 AND RX_Input[Loop+2]=16#2 THEN

    Solar_YY := RX_Input[Loop+38];
    Solar_MM := RX_Input[Loop+39];
    Solar_DD := RX_Input[Loop+40];
    Solar_HH := RX_Input[Loop+42];
    Solar_MIN := RX_Input[Loop+43];
    Solar_SS := RX_Input[Loop+44];
    Solar_T1 := RX_Input[Loop+46];
    Solar_T2 := RX_Input[Loop+48];
    Solar_T3 := RX_Input[Loop+50];
    Solar_T4 := RX_Input[Loop+52];
    RX_Index :=0;
  • #5
    tgruse
    Level 2  
    Super dane! A jakie parametry komunikacji okazały się poprawne?
  • #6
    aelias_eu
    Level 1  
    Hi!
    i have been working on this device (based on elakota's work - thank you) and have published simple script, that can read data from the G422 controller and will push it to MQTT.
    If you are interested, I have published my current results on github - just search for hewalex-geco-protocol (I cannot post links here :)

    I don't have the modem for Ekontrol connection, so I will not be able to sniff data for parameter change. Currently we can only read data from controller... At least that...
  • #7
    krzysztof1111111111
    Level 10  
    Witam forumowiczów. Z tego co widzę to mało udało się wam osiągnąć w tym temacie, albo nikt się jeszcze nie pochwalił, dlatego postanowiłem ja to zrobić. Przede wszystkim odpowiedź na pytanie kolegi tgruse: wszystko wskazuje na to, że jest to 8N1, ale możliwe że różne wersje urządzenia mają różne parametry.
    Z tego co widzę to wszyscy ignorujecie sumę CRC w tym protokole, a są one tam 2: CRC-8/DVB-S2 oraz CRC-16/XMODEM, nie są to standardowe funkcje, dlatego w Pythonie napisałem bardzo szybką implementację, przydało by się to przerobić na tabelę lookup lub na jakąś bibliotekę (docelowo planuję pisać to w C, tak więc kod w Pythonie jest tylko do testów). CRC pozwala sprawdzić czy na pewno wszystko się dobrze przesłało, bez tego możecie śmieci wczytywać.
    Udało mi się podłączyć do 2giego portu w pompie ciepła (nie pod wyświetlacz) i otrzymać te same dane, a nawet więcej (mam nawet całą konfugurację). Potrafię również zmieniać konfigurację. Nie udało mi się tylko zmienić czasu, jeżeli ktoś wpadnie na pomysł jak to zrobić, to prosiłbym o podzielenie się tą wiedzą.
    Załączyłem plik tester.py (python3) służący do testowania, przed odpaleniem go należy zmodyfikować go sobie pod swoje potrzeby.
    Jednocześnie zauważyłem że pompa ciepła od kolegi elakota wysyła wyświetlaczowi 92 rejestry (to w nich są temperatury), natomiast moja wysyła 104 rejestry - przypuszczam że różnica ta jest spowodowana minimalną różnicą modeli pompy. Mój skrypt zakłada 104 rejestry, tak więc jeżeli w waszym jest inna ilość, radzę zmodyfikować sobie funkcje parseX60Message, printStandardX60Message oraz wszystkie liczby 104 pozamieniać na coś innego.
    W załącznikach plik Word z opisem protokołu (w którym znajduje się plik excela z opisem rejestrów).

    Domyślnie tester.py jest skonfigurowany na pracę z wyświetlaczem (należy zmienić tylko ścieżkę do portu serial), domyślnie wykonywany jest odczyt z linii, próba zparsowania danych i wyświetlenie ich.
    Można również odkomentować timingTest(ser), w tym trybie wyświetlane są statystyki czasowe.

    Jest tam również fragment #loop, służy on do ciągłego nasłuch lini, ale przed przejściem do tego trybu dobrze jest upewnić się, że skrypt nam nie wypisuje wiadomości typu: NoStandardNotification, NoStandardMessage. Wszystko co jest NonStandard nie pasuje do standardowego trybu komunikacji opisanego przeze mnie i będzie wypisywało wiele nadmiarowych komunikatów ( a jest tam jakieś 8 komunikatów na sekundę)

    Na samym końcu są testy w sekcji #send, z tym że tutaj trzeba przełączyć port na EkoLan oraz ustawić odpowiednie adresy, przykładowo:
    SlaveHardId = 5
    SlaveSoftId = 6

    metoda createReadMessage3 - czyta 100 adresów 300
    metoda createReadMessage4 - czyta 100 adresów 400
    metoda createReadMessage5 - czyta resztę (38) adresów 500
    createReadMessageReg - czyta konkretny rejestr (2 bajty), parametr to numer rejestru
    createReadMessageReg32 - czyta 4 bajtowy rejestr
    createWriteMessage16 - zapisuje 2 bajtowy rejestr
    createWriteMessageArray - zapisuje wielobajtowy rejestr

    Jeżeli ktoś znalazłby czas i ma podłączone urządzenie pod wyświetlacz to prosiłbym to dane które są wyświetlane w sekcji #loop podczas zmiany czasu w menu wyświetlacza, może to pomóc w rozszyfrowaniu jak zmienić czas. Niestety nie przeprowadziłem tego testu podczas gdy miałem urządzenie podłączoną do wyświetlacza.
  • #8
    mvdklip
    Level 2  
    Thanks krzysztof1111111111! I have read your posts through automatic translation. I can't read or write Polish so I am responding in English. Based on your work I have published some bits to github. I cannot post links, so please search for 'hewalex' on github if you're interested. I have made a fork of 'hewalex-geco-protocol' which adds your information about heat pumps and I have created a first version f a 'Domoticz-Hewalex' plugin.

    I have given 'krzysztof1111111111' and this forum post credits where needed. Please let me know if you want the credits in your real name or want something else changed. Best to send a pull request in that case.
  • #9
    krzysztof1111111111
    Level 10  
    Do not worry about credits, my nick name is enough. It's better to be anonymous when you are doing reverse engineering.
    Really is this possible to bay this Heat Pump in your country? I've try to find this product on English and German website of hewalex without success.
  • #10
    mvdklip
    Level 2  
    Yes, they sell kits for DIY installation. This is one of the shops in my country:

    https://zonneboilermagazijn.nl/

    I have now succesfully integrated T1, T2 and T3 temperatures in my domotics solution so I can monitor the temperature of the water. The next step is direct communication with the PCWU so that I can modify parameters.

    I also own a ZPS solar pump so I ordered a second RS485 to Wi-Fi adapter from China to be able to connect to that as well.

    In the end the idea is to look at the sun forecast for tomorrow and based on that decide whether to enable the heat pump or not. If the sun forecast for tomorrow is good it's acceptable to switch off the heat pump, let the water temperature go down a bit and wait for the solar pump to heat it back up.
  • #11
    msnatm
    Level 1  
    Thanks for the work on this forum and the code on github, I have ekontrol modem, solar controller and heatpumps of hewalex.

    The ekontrol solution of hewalex is quite dissapointing, where the website solution is not handy to use but resonably extensive in functionality and the ekontrol app is one of the worst ever seen.. I had some contact with Hewalex some months ago and there is no public API available from the ekontrol solution to extract data from the website.

    In the coming period I will try to use the work on github to connect my devices to home assistant. I have ordered a EW11 to make my life a little easier in achieving this task. Hopefully this will result some moment in time into a standard home assistant integration.
  • #12
    mvdklip
    Level 2  
    I have access to G422, G426 and G927 (EKO-LAN) controllers now, so in the next few weeks I plan to use those and an EW11 setup in eavesdropping mode to decipher a couple of things which aren't working correctly in my home automation yet:

    1) When writing the value of '1' to register 304 of PCWU to enable the heatpump this sometimes has the reverse effect when the heatpump is already running: the heatpump then gets disabled. After a lot of trial and error I found out that writing a value of '255' does work reliably to enable the heatpump but I don't understand why so I'm going to eavesdrop on communication between G426 and PCWU. When reading register 304 it is always 0 when disabled and 1 when enabled and writing a value of '0' also works correctly to disable the heatpump.

    2) When writing the value of the desired tap water temperature to register 308 of PCWU I have a similar problem. Values between 52 and 57 are accepted but all other values reset the temperature to 50. The G426 display is able to set a much wider range so I'm going to eavesdrop again and see how it writes those values exactly. When reading register 308 I always get the values as expected.

    3) It is still unknown to me how to set the date and time on PCWU and ZPS so I'm going to eavesdrop on G422, G426 and G927 communication to see what kind of messages these controllers send when they want to change the date and time in PCWU or ZPS.

    And possibly I will discover the meaning of some unknown registers ofcourse which I will all add to my hewalex_geco Python library. This library is part of my Domoticz-Hewalex plugin on GitHub but can easily be used standalone in other projects.