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

Wnętrze i inżynieria wsteczna elektrycznego podgrzewacza wody Ariston Velis 80 Wi-Fi na ESP32 (cz1)

p.kaczmarek2 12 Paź 2025 11:11 5748 78

TL;DR

  • Rozebrano i zbadano elektryczny podgrzewacz wody Ariston Velis 80 Wi‑Fi z modułem ESP32 oraz aplikacją Ariston NET, pod kątem inżynierii wstecznej sterowania.
  • W środku znaleziono panel z dwucyfrowym wyświetlaczem 7‑segmentowym, ESP32‑WATG‑32D, dodatkowy mikrokontroler, zasilacz na LNK623DG i pamięć Flash FM25Q64A13 64 M‑BIT.
  • Urządzenie kosztowało 322€, a dokumentacja podaje dla wersji 80 masę 27 kg, pojemność 65 litrów, hałas 15 dB oraz 27 kWh tygodniowo w trybie smart.
  • Przechwycono komunikację UART 115200 i 9600 baud, zbudowano dekoder PulseView do weryfikacji długości i CRC, a w logach rozpoznano ramki 0x23 i 0x25.
  • Dekodowanie nie jest jeszcze kompletne; protokół wymaga dalszej analizy, zanim da się wgrać własny firmware i sterować bojlerem z Home Assistant.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Podgrzewacz wody Ariston Velis 80 zapakowany w pionowym kartonie
    Co takiego oferuje bojler z modułem Wi-Fi w środku? Jak wygląda jego budowa, co oferuje aplikacja? Czy można mu zmienić firmware? Zapraszam na pierwszą część przygody z Ariston Velis 80 i aplikacją Ariston NET - dziś zaczniemy od zakupu, wypakowania, testu aplikacji oraz zaprezentujemy płytki ze środka. Potem rozpoczniemy prace nad analizą protokołu komunikacji, przechwycimy dane analizatorem logicznym.. zobaczymy, ile uda się zrobić.
    Podgrzewacz wody Ariston Velis Tech Wi-Fi na stronie producenta
    Zacznijmy od zakupu. Sprzęt kupował do domu nasz kolega z forum @DeDaMrAz , który równocześnie rozwija ze mną nasz elektrody firmware open source dla urządzeń IoT. Wszystkie zdjęcia dostałem od kolegi, a temat opracowaliśmy wspólnie.
    Urządzenie kosztowało 322€, ale było kupowane w miejscu zamieszkania kolegi, czyli w Serbii - cena w Polsce może się różnić.
    Bojler Ariston Velis Pro WiFi 80L na stronie sklepu internetowego z ceną i zdjęciem
    Paczka dotarła dość szybko, kurier przyniósł takie pudło:
    Pudełko bojlera Ariston Velis Wi-Fi 80 stojące pionowo przy ścianie.
    Całość jest dobrze zapakowana na czas transportu. W zestawie mamy pełną instrukcję obrazkową i szczegółowy, wielojęzykowy manual. Znajdziemy tam również ulotkę deklarującą klasę energetyczną B produktu.
    Zestaw dokumentów Ariston Velis 80 z instrukcją i etykietą energetyczną
    Manual też jest dostępny w sieci. Określa on parametry takie, jak (dla wersji 80) waga 27 kg, pojemność 65 litrów, poziom hałasu 15 dB oraz deklarowane zużycie energii w tygodniu około 27 kWh w trybie smart i 35 kWh w trybie standardowym.
    Tabela danych technicznych bojlerów Ariston o pojemnościach 30–100 litrów

    Aplikacja Ariston NET
    Na opakowaniu znajdziemy kod QR prowadzący nas do wybranego sklepu - Google Play lub Apple Appstore:
    Opakowanie Ariston NET z kodem QR i wizualizacją aplikacji mobilnej
    Parowanie jest bardzo proste, po prostu po rejestracji w apce wprowadzamy urządzenie w tryb łączenia zgodnie z instrukcją.
    Instrukcja konfiguracji funkcji Wi-Fi i rejestracji aplikacji Ariston NET
    Otrzymujemy wtedy dostęp do panelu bojlera, gdzie możemy edytować jego program i harmonogram, tworzyć automatyzację, podejrzeć bieżącą i docelową temperaturę, sprawdzić czas pozostały do nagrzania oraz szacunkową ilość "pryszniców" na które pozwoli jego stan:
    Widok aplikacji Ariston NET z temperaturą wody 27°C i aktywnym trybem ECO Menu aplikacji Ariston NET z wybraną opcją BOJLER i powitaniem Hi, Dragan! Interfejs aplikacji Ariston NET z temperaturą wody ustawioną na 27°C i wyłączonym bojlerem
    Ciekawą funkcją jest opcja ECO - opiera się ona na analizie dotychczasowych zwyczajów użytkownika. Najpierw przez tydzień czasu ta funkcja "uczy się" tego, jak korzystamy z bojlera, a potem dopasowuje ogrzewanie do naszych zwyczajów. Ma to na celu redukcję zużycia energii i ograniczenie grzania, wtedy gdy nie jest ono potrzebne.
    Opis funkcji ECO EVO w instrukcji obsługi bojlera Ariston
    Proces nauki jest dalej kontynuowany i uzyskuje największą sprawność po kilku tygodniach. Algorytm jednocześnie pilnuje, by nawet w nieoczekiwanej sytuacji bojler posiadał minimum ciepłej wody zdatnej do użytku.
    Opis funkcji przeciwzamrożeniowej i dezynfekcji termicznej w bojlerze Ariston
    Bojler posiada również funkcje takie jak antifreeze, czyli automatyczną ochronę przed zamarzaniem wody wewnątrz urządzenia poprzez uruchomienie grzałki, gdy temperatura spadnie poniżej 5 °C, oraz anti-legionella, czyli cykl termicznej dezynfekcji podgrzewający wodę do 60 °C na godzinę w celu eliminacji bakterii Legionella.

    Wnętrze urządzenia
    Pora zacząć demontaż. Co takie kontroluje to urządzenie?
    Podgrzewacz wody Ariston Velis 80 rozpakowany w pionowym kartonie
    Panel sterowania bojlera Ariston Velis z ikonami Wi-Fi, ECO i wyświetlaczem LED
    Elektronika na stole w trakcie testów:
    Płytka elektroniki bojlera Ariston z wyświetlaczem i modułem ESP32 na stole warsztatowym
    Główny panel ma wyświetlacz 7-segmentowy dwucyfrowy, moduł Wi-Fi z ESP32, oraz dodatkowy mikrokontroler.
    Panel elektroniki bojlera Ariston z modułem Wi-Fi, wyświetlaczem i sprężynowymi stykami
    Osobno mamy zasilacz z przekaźnikiem. Zasilacz opiera się na LNK623DG. Oznaczenie to 740190023201 TFE-RL. Ciekawe, że w środku są już nawet filtry przeciwko zakłóceniom i warystor. To nie jest jednak najtańszy produkt z Chin.
    Moduł zasilania bojlera Ariston z przekaźnikami, złączami i elementami pasywnymi
    Skupmy się na module Wi-Fi. Mamy tu ESP32-WATG-32D:
    Moduł ESP32-WATG-32D na płytce drukowanej z cewką po prawej stronie
    Wyprowadzenia:
    NameNo.TypeFunction
    RESET1IModule enable signal (Internal pull-up by default). Active high.
    I362IGPIO36, ADC1_CH0, RTC_GPIO0
    I373IGPIO37, ADC1_CH1, RTC_GPIO1
    I384IGPIO38, ADC1_CH2, RTC_GPIO2
    I395IGPIO39, ADC1_CH3, RTC_GPIO3
    I346IGPIO34, ADC1_CH6, RTC_GPIO4
    I357IGPIO35, ADC1_CH7, RTC_GPIO5
    IO328I/OGPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9
    IO339I/OGPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8
    IO2510I/OGPIO25, DAC_1, ADC2_CH8, RTC_GPIO6
    I2C_SDA11I/OGPIO26, I2C_SDA
    I2C_SCL12IGPIO27, I2C_SCL
    TMS13I/OGPIO14, MTMS
    TDI14I/OGPIO12, MTDI
    +5V15PI5 V power supply input
    GND16,17PIGround
    VIN18I/O12 V / 24 V power supply input
    TCK19I/OGPIO13, MTCK
    TDO20I/OGPIO15, MTDO
    EBUS221,35I/OGPIO19/GPIO22, EBUS2
    IO222I/OGPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0
    IO0_FLASH23I/ODownload Boot: 0 SPI Boot: 1 (Default).
    IO424I/OGPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1
    IO1625I/OGPIO16, HS1_DATA4
    5V_UART1_TXD26OGPIO23, 5V UART Data Transmit
    5V_UART1_RXD27IGPIO18, 5V UART Data Receive
    IO1728-GPIO17, HS1_DATA5
    IO529I/OGPIO5, VSPICS0, HS1_DATA6
    U0TXD30I/OGPIO1, U0TXD
    U0RXD31I/OGPIO3, U0RXD
    IO2132I/OGPIO21, VSPIHD
    GND33PIEPAD, Ground
    +3.3V34PO3.3V Power supply output

    Rysunek przedstawia rozkład pinów modułu ESP32-WATG-32D z anteną PCB
    Wylutowaliśmy go za pomocą topnika i gorącego powietrza.
    Moduł ESP32-WATG-32D i płytka PCB z cewkami w bojlerze Ariston.
    Zajrzeliśmy też pod ekran, by dostać się do pamięci Flash:
    Moduł ESP32-WATG-32D marki Espressif z widocznymi układami elektronicznymi
    Obok ESP jest pamięć Flash z interfejsem SPI - FM25Q64A13, czyli 64M-BIT. Dzielone na 8 daje nam 8Mb.
    Moduł ESP32 z pamięcią SPI Flash FM25Q64A13 na płytce drukowanej
    Kopia wsadu (sprzed parowania) wykonana za pomocą esptool.py: https://github.com/openshwprojects/FlashDumps/commit/5e772e8573257f2cd69224823297cade7d9a13ba

    Analiza protokołu komunikacji
    Do testów użyliśmy konwertera USB na UART oraz analizatora stanów logicznych. Prezentowałem go już wcześniej:
    Inżynieria wsteczna nieznanego protokołu I2C z analizatorem Sigrok na przykładzie kontrolera LED
    Płytka podłączona do testów:
    Płytka PCB bojlera z modułem ESP32 i wyświetlaczem 7-segmentowym
    Boot log z ESP32:
    
      @0V@Ђ ets Jun  8 2016 00:22:57
    
    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:2
    load:0x3fff00b8,len:2704
    load:0x40078000,len:22680
    load:0x40080400,len:4
    ho 8 tail 4 room 4
    load:0x40080404,len:2676
    entry 0x4008055c
      ARES_MODULE_VERSION            02.09.10 
    
    RELOC Platform v0.0.22 (31d8388b-dirty)
    flash chip id 10567703 
    flash size 8388608 
    =======================================================
    [ ATG_REM4A_EWH - EARTH ]
    Build timestamp: Jul  8 2024 11:14:50
    FW Version     : 14.115.22"a"
    HW Version     : 0.0
    Author         : ATG - RELOC
    Branch         : trunk
    Notes          : 
    =======================================================
    > [nvs] online
    Key partition found
    nvs_flash_read_security_cfg retcode(bis): 0
    Reserved build encrypted OK
    [reserved] online
    	 flash_crypt_cnt: 7
    vee encryption disabled
    getting echo area!
    Bus ready!
    

    Nie ma tu zbyt wiele informacji, choć można tym namierzyć użyte SDK i wyczytać czas kompilacji.
    Log z parowania:
    
     A 1 
    ----------HEAP-------------
    Total DRAM free heap 8 NOW: 56924
    Total IRAM free heap 32 NOW: 97376
    ---------BLOCK MEM---------
    Maximum largest free block DRAM: 45056
    Maximum largest free block IRAM: 45056
    Malloc of appConfigHtml_Prototype_buf: 2166free heap pre xml: 56120
    free heap post xml build: 51884
    free heap: 50308
    free heap: 56120
    free heap post free appConfigXml_buf: 56120
    free heap pre xml: 56120
    free heap post xml build: 53380
    free heap: 50228
    free heap: 54544
    free heap post free appConfigXml_buf: 54544
    free heap pre xml: 54584
    free heap post xml build: 49824
    free heap: 46840
    free heap: 51600
    free heap post free appConfigXml_buf: 51600
    [certs] online
    inbuf tls len: 16717
    largest free block DRAM: 27648
    outbuf tls len: 16717
    largest free block DRAM: 27648
    ATGGetIdentTable!
    inbuf tls len: 16717
    largest free block DRAM: 19456
    outbuf tls len: 16717
    largest free block DRAM: 19456
    Removed an element from log cfg
     $I Removed an element from log cfg
      r Removed an element from log cfg
       Removed an element from log cfg
       Removed an element from log cfg
       Removed an element from log cfg
       Removed an element from log cfg
        Removed an element from log cfg
        Removed an element from log cfg
        Removed an element from log cfg
        Removed an element from log cfg
      A Removed an element from log cfg
      B Removed an element from log cfg
    

    Ten log został odebrany na pinie OTXD 31 przy baud 115200. Dodatkowo mamy też UART do rozmowy z MCU, 5V_UART przy 9600 baud.
    Zielona płytka PCB z oznaczonymi pinami 9 i 10 MCU w module Wi-Fi ESP32
    To pewnie ten główny MCU kontroluje grzanie, a moduł z ESP32 tylko się z nim komunikuje. Jakby poznać ten protokół, to dałoby się tylko zmienić wsad ESP32 i tak kontrolować całość.
    Zebraliśmy też tam próbki:
    
    00 3C 3C 3C 3C 3C 3C 3C 3C C3 14 24 01 00 FC 3C 
    C3 14 52 04 1D FE 00 13 5B 3C C3 14 25 04 01 00 
    01 00 02 3C C3 14 25 04 01 01 FF 01 02 3C C3 14 
    25 04 01 00 01 01 03 3C C3 14 25 04 00 00 01 00 
    01 3C C3 14 25 04 00 00 01 00 01 3C C3 14 25 04 
    01 00 01 01 03 3C C3 14 25 04 01 00 01 01 03 3C 
    C3 14 25 08 00 00 00 00 FF FF 00 00 02 3C C3 14 
    25 08 00 00 00 00 FF FF 00 00 02 3C C3 14 25 04 
    00 00 FF 00 FF 3C C3 14 25 08 00 00 00 00 FF FF 
    00 00 02 3C C3 14 25 08 00 00 00 00 FF FF 00 00 
    02 3C C3 14 25 08 20 03 8A 02 20 03 20 03 F9 3C 
    C3 14 25 08 BC 02 5E 01 20 03 BC 02 02 3C C3 14 
    25 08 32 00 00 00 C8 00 32 00 30 3C C3 14 25 08 
    00 00 00 80 FF 7F 00 00 02 3C C3 14 25 08 00 00 
    00 80 FF 7F 00 00 02 3C C3 14 25 04 00 00 FF 00 
    FF 3C C3 14 25 04 00 00 FF 00 FF 3C C3 14 25 04 
    40 05 96 2C 07 3C C3 14 25 04 01 00 FF FF FF 3C 
    C3 14 25 08 00 00 00 80 FF 7F 00 00 02 3C C3 14 
    25 04 00 00 01 00 01 3C C3 14 25 04 00 00 01 00 
    

    To samo można podejrzeć w Pulse View. Podłączmy nasz analizator:
    Analizator logiczny USB 24MHz 8-kanałowy z kablami i przewodami sygnałowymi
    Najpierw przechwytujemy sygnały:
    Widok interfejsu PulseView z dwoma kanałami transmisji UART D0 i D1
    Widać tu grupy transakcji, powiększmy:
    Zrzut ekranu PulseView z sygnałami UART na kanałach D0 i D1
    Widać też poszczególne bity:
    Zrzut ekranu PulseView przedstawiający przebieg sygnału UART przy analizie protokołu
    Potem dodajemy dekoder UART:
    Konfiguracja dekodera UART w PulseView z ustawioną prędkością 9600 baud
    Dekoder UART pozwala łatwo nanieść bajty na przebiegi. Wtedy też widzimy, jak odbywają się transakcje.
    Zrzut ekranu z PulseView przedstawiający dane UART między mikrokontrolerami
    Ale w zasadzie to nawet bez Saleae można szybko wyróżnić ramki. Widać to po powtarzających się nagłówkach pakietów:
    
    C3 41 23 0C 45 DC 4A DC 4B DC 4C DC 4D DC C0 F2 A4 
    C3 41 23 0C C2 F9 C3 F9 C4 F9 C5 F9 41 FA D1 40 71
    C3 41 23 0C DE 40 DF 40 DD 40 DC 40 DB 40 DA 40 DE
    C3 41 23 0C C7 9C C8 9C 18 45 D1 3D CF 3D C0 F9 2A 
    C3 41 23 0C 7F FE B0 42 C3 F0 DD 9A D4 3D D9 3E F4 
    C3 41 23 06 D0 3D D2 3D C4 3E 4B
    C3 41 25 02 11 23 5F
    C3 41 25 02 44 24 93
    C3 41 25 02 45 24 94
    C3 41 25 02 46 24 95
    C3 41 25 02 47 24 96 
    
    C3 41 23 0C 60 10 68 13 69 13 6A 13 6B 13 43 51 29
    C3 41 23 0C D3 4B C4 4B D9 46 5E 47 CB 4B CC 4B 51
    C3 41 23 0C 4F 9D 50 9D 4C 9E 4D 9E 57 D1 4A D8 2B
    C3 41 23 0C 4B D8 5E D9 5F D9 6E 9E 71 9E 44 DC 00
    C3 41 23 0C 45 DC 4A DC 4B DC 4C DC 4D DC C0 F2 A4
    C3 41 23 0C C2 F9 C3 F9 C4 F9 C5 F9 41 FA D1 40 71
    C3 41 23 0C DE 40 DF 40 DD 40 DC 40 DB 40 DA 40 DE
    C3 41 23 0C C7 9C C8 9C 18 45 D1 3D CF 3D C0 F9 2A
    C3 41 23 0C 7F FE B0 42 C3 F0 DD 9A D4 3D D9 3E F4
    C3 41 23 06 D0 3D D2 3D C4 3E 4B
    C3 41 25 02 11 23 5F
    C3 41 25 02 44 24 93
    C3 41 25 02 45 24 94
    C3 41 25 02 46 24 95
    C3 41 25 02 47 24 96
    

    Tak spisane ramki od razu nam też pozwalają wyszukać długość pakietu - to czwarty bajt. Nie jest to w żaden sposób ukryte (przykładowo - nie ma XOR ze stałą lub ID pakietu). Policzcie sami - pasuje. Przykładowo, pakiet z 0x02 argumentem ma jeszcze po 0x02 dwa bajty, a na końcu pewnie... CRC. Suma kontrolna z reguły jest na końcu.
    Ta sytuacja jest też ciekawa:
    
    C3 41 25 02 11 23 5F
    C3 41 25 02 44 24 93
    C3 41 25 02 45 24 94
    C3 41 25 02 46 24 95
    C3 41 25 02 47 24 96
    

    Tu widać, że coś rośnie, a suma kontrolna wraz z nim. Można spróbować wyprowadzić tę sumę. 0x45 zwiększyło się o 1 i suma kontrola też urosła o jeden... więc to pewnie suma modulo 256. Szybkie sprawdzenie potwierdza:
    Wynik sumowania szesnastkowego w wyszukiwarce Google: 0x193
    Teraz można to zweryfikować. PulseView pozwala pisać wtyczki, a wtyczki mogą bazować na innych wtyczkach - tak np. Modbus opiera się na UART. Dokumentacja:
    http://sigrok.org/wiki/Protocol_decoder_HOWTO
    Przygotowałem zatem plugin sprawdzający CRC:
    Kod: Python
    Zaloguj się, aby zobaczyć kod

    Po sprawdzeniu wynik umieszczam pod zdekodowanym pakietem. Pozwala to szybko sprawdzić całą komunikację. Te pluginy są naprawdę bardzo wygodne.
    Kod: Python
    Zaloguj się, aby zobaczyć kod

    Jednak coś poszło nie tak. Wygląda na to że połowa pakietów ma jeden bajt z przodu, który jest pomijany w CRC.
    Zrzut z PulseView z błędną sumą kontrolną oznaczoną jako CHK BAD
    Poprawione:
    Kod: Python
    Zaloguj się, aby zobaczyć kod

    O wiele lepiej:
    Zrzut ekranu z PulseView z dekodowanymi pakietami UART oraz sumą kontrolną
    Można iść o krok dalej i weryfikować też długość. Pozwali nam to szybko sprawdzić, czy poprawnie zrozumiałem znaczenie tego pola w ramce. Porównuję długość z pola ramki z rzeczywistością długością ramki (zmniejszoną o nagłówek i CRC):
    Zrzut ekranu z PulseView z analizą transmisji UART między ESP32 a MCU
    Analogicznie można wystawić informacje o typie pakietu:
    Zrzut ekranu PulseView z analizą UART i dekodowanymi ramkami pakietów typu 0x23
    Dodałem też wyświetlanie danych przenoszonych przez pakiet:
    Zrzut ekranu z PulseView przedstawiający dekodowaną komunikację UART
    Teraz można przejść do następnego etapu. Rozważmy ten fragment:
    Zrzut analizy UART z dekodowanymi pakietami i oznaczeniami CRC i danych
    Wygląda na to, że pakiet 0x25 może być swego rodzaju odczytem wartości.
    Mamy tu:
    - zapytanie co jest na adresie 11 23
    - odpowiedź, że 00 00 01 00
    - zapytanie o adres 44 24
    - odpowiedź, DC 05 C8 00 B8 0B DC 05
    - zapytanie o adres 45 24
    - odpowiedź DC 05 00 00 B8 0B E8 03
    - zapytanie o adres 46 24
    - odpowiedź 64 00 32 00 B8 0B 64 00
    - zapytanie o adres 47 24
    - odpowiedź 0A 00 01 00 64 00 0A 00
    Potem kończą się pakiety 0x25 i zaczynają 0x23:
    Zrzut ekranu z PulseView przedstawia analizę protokołu UART bojlera Ariston Velis 80
    Wróćmy do 0x23. Wygląda na to, że adresy są kolejno po sobie - 0x4424, 0x4524, 0x4624. W takim razie można by obstawić, że pierwszy jest mniej znaczący bajt, i w praktyce mamy tu 0x2444, 0x2445, itd.
    Ten fragment też to potwierdza - 00 00 01 00 - to jest po prostu 1.
    W takim razie co mamy tutaj?
    DC 05 C8 00 B8 0B DC 05
    DC 05 -> 05DC -> 1500
    C8 00 -> 00C8 -> 200
    B8 0B -> 0BB8 -> 3000
    DC 05 -> 05DC -> 1500
    Ciekawe co to za wartości - godziny? Ale to może później.

    To teraz jeszcze pakiet 0x23:
    Zrzut z PulseView przedstawiający pakiety UART i zdekodowane dane bojlera Ariston
    Z - zapytanie, O - odpowiedź.
    Z: 60 10 68 13 69 13 6A 13 6B 13 43 51
    O: 24 01 23 01 26 01 23 01 25 01 FF FF
    Z: D3 4B C4 4B D9 46 5E 47 CB 4B CC 4B
    O: 00 00 00 00 00 1B 00
    Z: 4F 9D 50 9D 4C 9E 4D 9E 57 D1 4A D8
    O: C9 00 00 00 00 00 00 00 00 00 00 00
    Dalej:
    Z: D0 3D D2 3D C4 3E
    O: 00 00 00
    Na ten moment dziwi mnie zmiana długości odpowiedzi przy tej samej długości zapytania. Myślałem, że to są zapisy ustawień, ale trudno powiedzieć na ten moment.

    Pełny kod pluginu PulseView do wglądu
    Należy go umieścić w C:\Program Files (x86)\sigrok\PulseView\share\libsigrokdecode\decoders\uart_exporter jako pd.py wraz z odpowiednim wywołaniem z init. W razie wątpliwości wystarczy podejrzeć inne dekodery, np. Modbus.
    Kod: Python
    Zaloguj się, aby zobaczyć kod


    Dalsze plany
    Do drugiej części tematu:
    - zebrać więcej danych
    - zacząć porównywać dane z pakietów z tymi z aplikacji
    - spróbować zebrać dane przy włączaniu i wyłączeniu bojlera, porównać, znaleźć co go włącza/wyłącza
    - analogicznie - dla różnych temperatur
    - wgrać na ESP własny wsad i spróbować coś wysłać
    - albo wgrać wsad z ESP na nasz ESP i spróbować udawać bojler własnym programem

    Podsumowanie
    Dekodowanie protokołu nie jest kompletne, ale temat zrobił się dość długi, więc podzielę go na dwie części.
    Czy ktoś wie coś więcej, co to za protokół może być?
    Docelowo chcielibyśmy uruchomić ten bojler z własnym firmware i kontrolować go z poziomu Home Assistant. Ilość pakietów jest dość duża, ale może nie trzeba obsługiwać wszystkich, by zyskać kontrolę nad temperaturą.
    Załączam przechwycone dane. Można pobrać PulseView, dodać tam mój plugin i przejrzeć ramki. Pomysły?
    Załączniki:
    • ariston MCU uart capture.rar (48.74 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • ESP32-WATG-32D.pdf (701.41 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Ariston Velis 80 manual.pdf (1.69 MB) Musisz być zalogowany, aby pobrać ten załącznik.
    • uart_exporter-20251011.rar (5.9 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • on-off capture.zip (41.71 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14548 postów o ocenie 12548, pomógł 654 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • #3 21717956
    DeDaMrAz
    Poziom 22  
    Posty: 600
    Pomógł: 34
    Ocena: 128
    Aby zwizualizować niektóre dane, przeanalizowałem je w tabeli, aby uzyskać pewien sens i spróbować zrozumieć protokół.

    Arkusz kalkulacyjny z danymi heksadecymalnymi i kolumnami technicznymi

    Ponadto, jeśli ktoś jest chętny do zabawy, oto kilka zrzutów i aplikacja Python GUI do przeglądania danych. Surowe dane są eksportowane z Pulseview dzięki dodatkowi @p.kaczmarek2 o nazwie uart exporter. Aby to zrobić zainstaluj pulseview, znajdź folder instalacyjny, w windows powinien być w
    C:\Program Files\sigrok\PulseView\share\libsigrokdecode\decoders\
    wypakuj archiwum i skopiuj/wklej do tego katalogu. Uruchom/restartuj Pulseview, otwórz dowolny przechwyt i z listy dekoderów:

    Zrzut ekranu z programu Pulseview z dekodowanymi sygnałami UART .

    wyszukaj i wybierz uart

    Okno wyboru dekodera PulseView z wyszukiwaniem „uart” i wynikami UART oraz UART Exporter

    Kliknij UART po lewej stronie, ustaw piny Rx i Tx oraz szybkość transmisji na 9600.

    Okno ustawień dekodera UART w programie PulseView z parametrami transmisji

    w tej samej zakładce przewiń na dół i kliknij dekoder stosu, uart exporter powinien być na liście.

    Zrzut ekranu z PulseView przedstawiający ustawienia dekodera UART z rozwiniętą listą dekoderów stosu.

    Po zdekodowaniu danych kliknij prawym przyciskiem myszy dolny wiersz i wybierz Eksportuj wszystkie adnotacje z tego wiersza

    Zrzut ekranu z PulseView z otwartym menu eksportu adnotacji dekodera UART

    Zapisz plik i użyj dostarczonej aplikacji Python, aby przeanalizować i dowiedzieć się więcej - aplikacja będzie również wkrótce dostępna na Githubie, z większą liczbą dekodowanych punktów danych w miarę rozgryzania ruchu.
    Załączniki:
    • button presses.rar (197.81 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • ariston_uart_viewer.rar (2.83 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • parsed_onoff_frames.csv (63.33 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 21717988
    władziowek
    Poziom 25  
    Posty: 684
    Pomógł: 61
    Ocena: 101
    Już niedługo nie da się uruchomić spłuczki w kiblu bez smartfona i wi-fi.
    Przerost formy nad treścią.
  • #5 21717990
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14548
    Pomógł: 654
    Ocena: 12548
    @władziowek a dokładniej bez chmury - no i tu wkraczamy my. Właśnie po to rozpracowujemy takie urządzenia, by dało się je uruchomić 100% lokalnie, bez chmury i bez serwerów producenta. Bo potem taki serwer zostanie zamknięty, no i co? Sprzęt do kosza?
    Pomogłem? Kup mi kawę.
  • #6 21718131
    władziowek
    Poziom 25  
    Posty: 684
    Pomógł: 61
    Ocena: 101
    p.kaczmarek2 napisał:
    by dało się je uruchomić 100% lokalnie

    Dla mnie 100% lokalnie to po prostu ręcznie włączyć i ustawić dany parametr. Bez wodotrysków i innych udziwnień.
  • #7 21718132
    DeDaMrAz
    Poziom 22  
    Posty: 600
    Pomógł: 34
    Ocena: 128
    @władziowek

    Naszym celem jest posiadanie tego, co kupujemy, a nie poleganie na "chmurze" producentów lub aplikacji - pamiętaj, że nie ma "chmury", to tylko czyjś komputer 😉
  • REKLAMA
  • #8 21718194
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14548
    Pomógł: 654
    Ocena: 12548
    @władziowek w tej zabawie jednak nam chodzi o to, by ten moduł WiFi jakoś uruchomić, ale z otwartym oprogramowaniem, bez raportowania do serwerów producenta. Jeśli chcesz mieć urządzenie w ogóle bez WiFi, to też takie można kupić, aczkolwiek zdania są różne - niektórzy lubią mieć kontrolę, chociażby mieć w tym przykładowym bojlerze program dostosowany do grzania dużej ilości wody "na wieczór/czas użytkowania" i minimalnej za dnia, itd.
    Pomogłem? Kup mi kawę.
  • #9 21718243
    władziowek
    Poziom 25  
    Posty: 684
    Pomógł: 61
    Ocena: 101
    I tu masz całkowitą rację, każdemu wolno wybierać co lepiej odpowiada potrzebom. Ja jednak starej daty, wole to co napisałem :). I nikomu niczego nie narzucam.
  • #10 21718265
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14548
    Pomógł: 654
    Ocena: 12548
    A z dzisiejszym sprzętem IoT jest właśnie taki problem, że producenci jednak troszkę narzucają nam swoje zamkniętoźródłowe aplikacje i standardy. Z tego powodu właśnie tworzymy na Elektrodzie otwarty firmware na różne moduły WiFi - tutaj jest repozytorium projektu. Idea jest taka, że to jest rozwiązanie dla osób, które chcą mieć te sterowanie przez WiFi, ale jednocześnie nie chcą przymusowego połączenia z serwerami producenta. Firmware o otwartym kodzie źródłowym łatwiej jest też połączyć z innymi ekosystemami i dostosować do swoich potrzeb.

    A to dlatego, że większość tych urządzeń z WiFi co jest w sprzedaży, to są mniej lub bardziej zamknięty ekosystemy. Nie wszystkie, ale dużo.
    Pomogłem? Kup mi kawę.
  • #11 21718354
    krzbor
    Poziom 29  
    Posty: 1752
    Pomógł: 40
    Ocena: 1060
    "flash_crypt_cnt: 7" - oznacza, że flash jest zaszyfrowany i prawdopodobnie moduł ma zablokowany ponowny flash poprzez UART. Będziecie musieli kupić nowy moduł aby eksperymentować z własnym kodem.
  • #12 21718404
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14548
    Pomógł: 654
    Ocena: 12548
    Słuszna uwaga. Ciekawe, czy można dostać łatwo ESP32-WATG-32D. A jak nie to się po prostu przelutuje QFN - to nie jest problem dla nas. Sam już lutowałem QFN by przeprogramować T34 (taki moduł WiFi - BK7231N SoC).
    Pomogłem? Kup mi kawę.
  • #13 21718455
    krzbor
    Poziom 29  
    Posty: 1752
    Pomógł: 40
    Ocena: 1060
    Problemem jest to, że Wasza praca będzie ciekawostką (choć kibicuję!) - mało kto skorzysta, bo nie jest prosto przelutować ESP32, a tych modułów jakoś nie widzę w ofercie. Jak na układ komunikacyjny to ma podłączonych sporo pinów. Być może obsługa dotyku? Gdyby był używany tylko do komunikacji można go zastąpić czymś prostszym np. ESP8266. Można pomyśleć o układzie, który tylko czyta - można zdublować układy - wystarczy zasilanie i jedna linia do podsłuchu. Niestety nadawanie równoległe na UART nie jest możliwe. Można to jednak ominąć tworząc swoiste proxy - wystarczy przeciąć linię TX ESP32 i "przepuścić" przez swój moduł (np. ESP8266). Normalnie byłoby przepuszczanie, ale ESP8266 może zablokować transmisję i nadawać swoje.
  • #14 21718479
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2904
    Pomógł: 94
    Ocena: 3337
    krzbor napisał:
    nie jest prosto przelutować ESP32, a tych modułów jakoś nie widzę w ofercie.

    Jeżeli moduł jest wystarczająco duży, to można zrobić adapter na inny.
  • #15 21718484
    DeDaMrAz
    Poziom 22  
    Posty: 600
    Pomógł: 34
    Ocena: 128
    Moduł jest używany wyłącznie do komunikacji, żaden z pinów nie jest poprowadzony nigdzie indziej niż do punktów testowych z tyłu płytki. Jedynym problemem jest to, że ten konkretny moduł ma UART 5V i używa go do komunikacji z MCU, więc w przypadku każdego innego modułu należy zastosować w tym celu jakiś przesuwnik poziomu (na przykład ADUM1201).

    Całkowita wymiana modułu jest opcją, ponieważ nie mogę znaleźć dokładnie tego modułu w sprzedaży, ale to wszystko jest trywialne w porównaniu do faktycznego dekodowania protokołu, który można następnie powielić i zaimplementować na przykład w OBK.
  • #16 21718536
    divadiow
    Poziom 38  
    Posty: 4975
    Pomógł: 436
    Ocena: 887
    krzbor napisał:
    "flash_crypt_cnt: 7" - oznacza, że flash jest zaszyfrowany i prawdopodobnie moduł ma zablokowany re-flash przez UART. Będziesz musiał kupić nowy moduł, aby eksperymentować z własnym kodem.


    jaki był odczyt esptool get-security-info względem ESP32?
  • REKLAMA
  • #17 21718681
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    Mam podobny tylko bez WiFi - ciekawe, czy udałoby się zamontowac taki moduł na ESP32.

    Nargo napisał:
    Jeśli dobrze pamiętam schematy serwisowe to ten zbiornik posiada dwie grzałki i dwa czujniki temperatury.
    Mam nadzieję, że to coś pomoże.


    A gdzie można takowe serwisówki znaleźć? Musze zajrzeć do środka ocenić stan grzałek i elektrody, a nie chciałby ze ściany zdejmować.
    Woda chyba uda się ze środ do instalacji wypuścić, pozostaje zdjąć obudowe i wykręcić grzałki.
  • #18 21718820
    krzbor
    Poziom 29  
    Posty: 1752
    Pomógł: 40
    Ocena: 1060
    sq3evp napisał:
    Mam podobny tylko bez WiFi - ciekawe, czy udałoby się zamontowac taki moduł na ESP32.

    Masz miejsce na ten moduł ESP, czy jednak zupełnie inna płytka?
  • #19 21718908
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    krzbor napisał:

    Masz miejsce na ten moduł ESP, czy jednak zupełnie inna płytka?

    Sprawdzę. I tak muszę tam zajrzeć, żeby dostać się grzałek i obejrzeć w jakim stanie są.
    Jak się dostanę to zdjęcia zrobię - może uda się coś unowocześnić dodając WiFi i dokładny pomiar temperatury
  • #20 21719084
    Nargo
    Poziom 23  
    Posty: 495
    Pomógł: 45
    Ocena: 205
  • #21 21719126
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    >>21719084
    Dzięki za linki. Mam drukowaną instrukcję, ale ne tych jakby więcej widać.

    Z instrukcji wynika odwrotna kolejność opróżninia niż myślałem. U mnie w pionie wisi i chyba nie da się opróżnić obydwu zbiorników bez zdejmowania bojlera.

    Model z Wifi i bez Wifi ma inny panel - w środku wynika, że płytka może być identyczna.
  • #22 21719982
    bumble
    Poziom 40  
    Posty: 7189
    Pomógł: 608
    Ocena: 1185
    Bojler to przede wszystkim grzałki. Ale jakoś nie ma o nich zbyt wiele. Ile ich jest jak skonfigurowane jak sterowane czy mogą pracować bez sterowania z modułu WiFi?

    Dodano po 59 [sekundy]:

    Układ zbiorników czy jeden czy dwa czy możliwa praca w poziomie.?
  • #23 21720021
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    bumble napisał:
    Układ zbiorników czy jeden czy dwa czy możliwa praca w poziomie.?

    Jeżeli mnie pytasz to możliwa praca w poziomie, ale jest w pionie użytkowany i będzie trzeba przeprowadzić serwis. Hydraulik się nie podejmie bo nie czuje się na siłach. Co zrobić...
    Teoretycznie to wypuszczenia wody, odkręcenie śrub i weryfikacja tego co jest w środku - instrukcja wymaga wymiany elektrod magezowych i sprawdzenia stanu grzałek (ewentualne czyszczenie z kamienia).
  • #24 21720041
    DeDaMrAz
    Poziom 22  
    Posty: 600
    Pomógł: 34
    Ocena: 128
    divadiow napisał:
    jaki był odczyt esptool get-security-info przeciwko ESP32?
    .

    @divadiow ta część będzie musiała poczekać, aż dowiemy się, co dzieje się na tym UART, zbliżamy się do tego, ale proces jest czasochłonny.

    Zrzut ekranu narzędzia Ariston UART Log Viewer z danymi komunikacji MCU i WiFi
  • REKLAMA
  • #25 21720092
    bumble
    Poziom 40  
    Posty: 7189
    Pomógł: 608
    Ocena: 1185
    sq3evp napisał:
    bumble napisał:
    Układ zbiorników czy jeden czy dwa czy możliwa praca w poziomie.?

    Jeżeli mnie pytasz to możliwa praca w poziomie, ale jest w pionie użytkowany i będzie trzeba przeprowadzić serwis. Hydraulik się nie podejmie bo nie czuje się na siłach. Co zrobić...
    Teoretycznie to wypuszczenia wody, odkręcenie śrub i weryfikacja tego co jest w środku - instrukcja wymaga wymiany elektrod magezowych i sprawdzenia stanu grzałek (ewentualne czyszczenie z kamienia).

    A po co. Takie coś wieszasz na ścianie i używasz jak padnie grzałka wymieniasz grzałkę albo całość. Elektroda to chyba raz na 15 lat. Pierwsze słyszę żeby jakieś serwisy robić takich urządzeń. Chyba że gotujesz w nim wodę to co innego.
  • #27 21720126
    bumble
    Poziom 40  
    Posty: 7189
    Pomógł: 608
    Ocena: 1185
    Koszt serwisu jaki? A czajnik też serwisujesz? Toster? Wpakowali WiFi do bojlera i serwisy od razu.
  • #28 21720823
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    Nie mam WiFi - pisałem, czytać wystarczy.
    Instrukcja pisze o serwisie czyli maintenance - obejrzeć grzałki, ewentulanie je wyczyścić i wymienić elektrodę magezową co 2 lata. Nie zaglądałe, prądu zużywa jak do tej pory, czyli najprawdopodobniej nie jest źle.
    Moje pytanie było tylko czy można wylać wodę bez zdejmowania ze ściany.

    A wody nie gotuję - 50°C na stałe, raz na 30 dni ustawia się "antylegionella" czyli 60°C do odkażenie zbiornika. W ciągu roku kilka razy brak używania na kilka dni i raz na min 2 tygodnie to warto to robić bo zapach wody bywa zastawiający po odkręceniu kranu po dłuższej przerwie. Niestety jak sie nei ma co się lubi to się ma co sięnie lubi i trzeba dbać o sprzęt jaki się używa.

    Strona 14 instrukcji (w polskiej jest dokładnie to samo):
    https://library.ariston.co.uk/velis-evo-uk-manual/65441707

    Fragment instrukcji serwisowej podgrzewacza wody dotyczący konserwacji okresowej.
  • #29 21720996
    Przemcio
    VIP Zasłużony dla elektroda
    Posty: 2391
    Pomógł: 193
    Ocena: 252
    władziowek napisał:
    Już niedługo nie da się uruchomić spłuczki w kiblu bez smartfona i wi-fi.
    Przerost formy nad treścią.


    To prawda ale ... w tym przypadku Wi-Fi pozwala na
    umieszczenie podgrzewacza gdziekolwiek.
    Mam wcześniejszy model z tym kwadratowym panelem
    podświetlany na niebiesko i w sumie gdybym wiedział, że
    są wersje z Wi-FI ... to ułatwiłoby mi to montaż.
    A tak panel musi być pod ręką.

    Zasilacze są słabe i jak na takie nic stosunkowo drogie.
    Na szczęście daje się to jeszcze naprawić.
  • #30 21721008
    sq3evp
    Poziom 39  
    Posty: 6468
    Pomógł: 215
    Ocena: 858
    Otóż to - czasem wiFi ułatwia.
    Mam w takim miejscu, ze nie przeszkasza - zabezpieczony osobnym bezpiecznikiem, żeby nie przeciążać instalacji do łazienki. Zastanawiałem sie tylko nad gniazdkiem WiFi do załączanie - no i coś do dokładnego pomiaru temperatury z WiFi.
📢 Słuchaj (AI):

Podsumowanie tematu

✨ Dyskusja dotyczy wnętrza i inżynierii wstecznej elektrycznego podgrzewacza wody Ariston Velis 80 Wi‑Fi oraz możliwości zastąpienia fabrycznego modułu Wi‑Fi własnym rozwiązaniem opartym o ESP32 i open source firmware. Analizowano budowę urządzenia, aplikację Ariston NET, schematy serwisowe, liczbę grzałek i czujników temperatury, a także znaczenie tagu NFC z parametrami konfiguracyjnymi. Główny nacisk położono na przechwycenie i dekodowanie komunikacji UART między MCU a modułem Wi‑Fi, z użyciem analizatora logicznego, PulseView, eksportu UART oraz zdalnego rejestratora na Raspberry Pi Zero W z izolacją ADUM1200. Ustalono m.in. obecność szyfrowanego flasha ESP32, komunikację 5 V UART, konieczność konwersji poziomów, oraz że moduł Wi‑Fi służy wyłącznie do komunikacji z MCU. W toku prac zdekodowano część ramek i komend, w tym odczyt temperatur, ustawianie temperatury, licznik pryszniców, stan grzałki i podstawowe sterowanie zasilaniem. Równolegle omawiano serwis bojlera, opróżnianie zbiorników, wymianę elektrod magnezowych, czyszczenie grzałek oraz możliwość pracy lokalnej bez chmury i bez zamkniętej aplikacji producenta. Pojawiły się też próby adaptacji rozwiązania do modeli bez Wi‑Fi oraz rozważania nad własną płytką sterującą kompatybilną z Home Assistant i OBK.
Wygenerowane przez model językowy.
REKLAMA