Elektroda.pl
Elektroda.pl
X
Sonel MPI 540Sonel MPI 540
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny

squizzy 04 Gru 2018 11:08 60819 282
  • #241
    yntelo
    Poziom 9  
    @krzysiekj18:
    1. Nie da sie. W zależnosci do kogo adresowane sa ramki (do gsm, internet lub regulator) moga sie miedzy soba delikatnie roznic, ale wiecej parametrów ponad to co do tej pory zobaczyles juz nie wycisniesz.
    2. Nie da sie. Kolega @mdnet w poście #219 napisal jak sobie z tym poradzil.
    3. Co to jest "płytka przyłączeniowa"? Panel graficzny masz w innym miejscu kotła niż złącza? Nie wiem co tam konkretnie masz na kablu miedzy sterownikiem a panelem, ale jezeli chcesz się wpiąć w kabel i podsłuchiwać transmisję snifferem, to bez problemu da się to zrobić, o ile jest to RS232. Schemat sniffera znajdziesz w necie (RS232 sniffer), a potrzebne będą tylko 2 szybkie diody. Niektórzy koledzy z pierwszych stron tego wątku właśnie w taki sposób zdobywali wiedzę o protokole (podsłuchiwali pomiędzy sterownikiem, a modułami dodatkowymi jak gsm lub internet).
  • Sonel MPI 540Sonel MPI 540
  • #242
    mdnet
    Poziom 10  
    W poście #237 pisałem, że mam 1 błędne CRC na ok 2000 ramek. Teraz zero błędów na 60k ramek. Wystarczyło ustawić najwyższy priorytet dla przerwania od Uarta lub odczyt przez DMA.

    @yntelo.
    A jak u Ciebie wygląda sprawa wysłania danych do sterownika? Podejmiesz się tego tematu? Ja narazie stoję w miejscu. Chyba się zakończy na kupieniu modułu ETH i podgląd lini
  • Sonel MPI 540Sonel MPI 540
  • #243
    yntelo
    Poziom 9  
    Jeszcze się w ogóle nie zabrałem za wysyłkę danych do sterownika. Najpierw chcę dokończyć wizualizację tego co odczytałem, a po drodze mam jeszcze zliczanie ilości podanego paliwa. Co do modułu internet, to pamiętaj, że masz 14 dni na zwrot towaru :D
  • #244
    saddam100
    Poziom 12  
    Cześć,
    Udało się komuś zrealizować wysłanie danych do sterownika?
    Chodzi mi np. o zmianę trybu pracy pomp lub zmiana ustawionej temperatury kotła.

    Walczę również z tym aktualnie, ale jakoś sterownik nie chce "łyknąć" niczego co mu podsyłam...
    Jaką wartość powinien mieć parametr 0226?

    [0000] => do-> wszystkie urządzenia
    [FFF4] => do-> moduł ethernet
    [FFFA] => do-> regulator pokojowy Tech
    [FFF8] => do-> moduł GSM
    [xxxx] => do-> sterownik?

    Może ktoś podpowie?
  • #246
    norbi771
    Poziom 10  
    Witajcie,
    prześledziłem cały wątek, chylę czoła dla wykonanej pracy.

    Zakupiłem sobie do domu https://www.techsterowniki.pl/p/wifi-8s wraz z regulatorami temperatury i głowicami do sterowania grzejnikami.

    Wygląda na to, że działa to nieźle choć brakuje mi kilku szczegółów, w szczególności

    1. Wolałbym sterować wszystkim z LANu, a nie poprzez stronę emodul.eu (przynajmniej mieć taką opcję). To może da się wykonać jeśli na routerze podmieni się adres dnsowy strony https://emodul.pl/module_data na coś co będzie działać w LANie. Skoro ta strona odpowiada JSONem to teoretycznie zrobienie swojej, lokalnej wersji jest możliwe, choć pozostaje kwestia SSLa, ciekawe czy tech sprawdza certyfikat ...

    2. Denerwuje mnie ograniczenie dot. maksymalnie 3 zmian temperatury na dobę. Z powodu takiego ograniczenia nie mogę (albo wydaje mi się że nie mogę) wprowadzić np takiego schematu
    22 - 6 - 20st
    6 - 8 - 22st
    8 - 16 - 18st
    16 - 22 - 22st.

    Czyli takiego, który z rana przed wyjściem do pracy i szkoły podniesie temperaturę. Następnie ją obniży, znów podniesie i do spania obniży.

    ---
    Czy ktoś z Was pisał już może własną wersję serwera do "rozmawiania" ze sterownikiem

    Wie ktoś może czy jak obejść ograniczenie 3 zmian temperatur?
  • #247
    Arek1984
    Poziom 16  
    Ktoś ma pomysł dlaczego tylko krzaczki widać ? Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny

    Kocioł Stalmark z regulatorem pokojowym. Sterownik praktycznie bez przerwy wysyła dane do regulatora. Po wyłączeniu regulatora pokojowego a włączeniu modułu ethernet ilość a raczej częstotliwość wysyłania danych znacznie spada.
  • #248
    krzysiekj18
    Poziom 19  
    Przełącz tryb reprezentacji danych z ASCII na HEX.
  • #249
    BartekElektro1
    Poziom 2  
    Hej,

    Udało mi się odpalić komunikację (tylko odczyt) i napisałem wstępnie moduł do systemu automatyki domowej FHEM, który pokazuje wszystkie możliwe parametry. Moduł wymaga jeszcze sporo pracy, ale chciałbym go rozwijać i dodać mu funkcję emulacji termostatu pokojowego.

    W związku z tym mam pytanie - czy jest tutaj ktoś kto posiada zarówno sterownik jak i termostat pokojowy i mógłby zrzucić jakimś loggerem transmisję pomiędzy obydwoma modułami? Chodzi mi konkretnie o to, co termostat pokojowy odpowiada sterownikowi, żeby był w stanie 'online' dla sterownika. Czasowe zależności też mogą być ciekawe, ale zakładam że tak jak ktoś wcześniej pisał, termostat odpowiada zaraz po tym, jak sterownik mówi do niego i czeka te 6 sekund. Samo aktywowanie termostatu pokojowego w sterowniku powoduje że przez chwilę sterownik myśli że ma termostat, a później niestety już nie, a co gorsze - brak termostatu uznaje za warunek 'temperatura osiągnięta' i wyłącza pompę obiegową. Rozumiem że spodziewa się ciągłej komunikacji zwrotnej z termostatu i chciałbym poznać jakie konkretnie parametry ten termostat mu wysyła. A jak już uda mi się odpalić dwukierunkową komunikację, to będę mógł próbować co jeszcze sterownik pozwoli zmienić zdalnie. Osobiście chętnie bym np. regulował obroty nadmuchu czy przerwe pomiędzy kolejnymi podaniami. Z tego co wiem fabryczne sterowniki Tech nie mają takiej możliwości...
    Jeśli nie będzie nikogo, będę musiał zamówić na allegro i ew. skorzystać z opcji zwrotu w 14 dni, a wolałbym tego uniknąć i nie robić niepotrzebnego zamieszania...

    Jak tylko doszlifuję moduł wrzucę jego kod na githuba. Póki co ma sporo debugów, nie ma weryfikacji CRC i moim zdaniem jeszcze się do tego nie nadaje. Architektura jest taka, że jest sobie moduł wifi na esp8266 wg. schematu opublikowanego przez kolegów wcześniej (dzięki), na nim ESPEasy mega z urządzeniem ser2net, które komunikację modułu wystawia na porcie TCP. We FHEM zrobiłem moduł któremu podaje się IP oraz port na którym chodzi ser2net i moduł rozmawia już ze sterownikiem i wyświetla wszystko co od niego dostanie. Jako teaser wrzucę screenshot jak to wygląda oraz zrzut atrybutów modułu. W lini statusu liczba z % oznacza wyliczone proporcje czasu pracy względem sumy czasu pracy i podtrzymania. Przydatne do określenia obciążenia pieca. Atrybuty stat* są wyliczane przez moduł statystyk, który pozwala na robienie (i zapisywanie w bazie) statystyk godzinowych, dniowych, tygodniowych itd. atrybuty raw_**** to efekt włączonego debug - wszystkie otrzymane parametry, nawet nieznane, są w ten sposób wizualizowane. Sterownik jaki posiadam do ST-37rs jakby ktoś chciał wiedzieć.

    Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny

    No i samo odpalenie tego w FHEM, to poza dodaniem mojego modułu jedynie wpisanie w linii konsoli tego:
    Code:
    define MojaNazwa Tech <adres_IP> <port>


    Code:
    Internals:
    
       DEF        192.168.1.15:1111
       DeviceName 192.168.1.15:1111
       FD         12
       NAME       TechBridge
       NR         81
       PARTIAL
       STATE      praca (25.1%) CO:57 CWU:53
       TYPE       Tech
       Helper:
       READINGS:
         2019-01-07 11:17:58   desiredTemperature_CO 60
         2019-01-07 11:17:58   desiredTemperature_CWU 57
         2019-01-07 11:17:52   dmuchawa        on
         2019-01-07 11:17:52   dmuchawa_obroty 100
         2019-01-07 11:17:58   dzien_tygodnia  5
         2019-01-07 11:17:58   godzina         18:18
         2019-01-07 11:17:52   podajnik        on
         2019-01-07 11:17:52   podajnik_temperatura 23
         2019-01-07 11:14:46   pompa_CO        on
         2019-01-07 11:14:46   pompa_CWU       off
         2019-01-07 11:18:01   ratio           25.1
         2019-01-07 10:23:58   raw_0000        1681
         2019-01-07 10:23:58   raw_0001        158b
         2019-01-06 13:12:34   raw_0002        1620
         2019-01-06 13:12:34   raw_0004        1589
         2019-01-07 10:23:58   raw_0005        1589
         2019-01-06 13:12:34   raw_0034        166e
         2019-01-06 13:12:34   raw_0039        1681
         2019-01-06 13:12:34   raw_0050        15cd
         2019-01-06 09:29:34   raw_01f6        0000 (regulator_desiredTemperature_CO: brak ustawienia)
         2019-01-06 09:29:34   raw_01f9        0000 (regulator_aktywny: off)
         2019-01-06 13:12:34   raw_0208        1616
         2019-01-06 09:29:34   raw_0245        0000
         2019-01-06 09:29:34   raw_028e        0000 (regulator_desiredTemperature_CWU: brak ustawienia)
         2019-01-06 09:29:34   raw_0298        0000 (regulator_godzina: 00:00)
         2019-01-06 09:29:34   raw_0299        0000 (regulator_dzien_tygodnia: 0)
         2019-01-06 09:29:37   raw_02f7        0000
         2019-01-06 09:29:34   raw_02fc        0000
         2019-01-06 09:29:34   raw_0311        0000
         2019-01-06 09:29:34   raw_0312        0000
         2019-01-06 09:29:37   raw_033a        0000
         2019-01-06 09:29:37   raw_0363        0000
         2019-01-06 09:29:37   raw_0365        0000
         2019-01-07 10:23:58   raw_1118        1621
         2019-01-06 13:12:34   raw_140c        1621
         2019-01-07 11:15:36   raw_157c        0002 (tryb: praca)
         2019-01-07 11:17:49   raw_157d        023a (temperature_CO: 57)
         2019-01-06 20:05:41   raw_157e        003c (desiredTemperature_CO: 60)
         2019-01-06 18:01:55   raw_157f        0000 (regulator_wlaczony: off)
         2019-01-07 11:17:52   raw_1587        0001 (podajnik: on)
         2019-01-07 11:15:42   raw_1588        0001 (dmuchawa: on)
         2019-01-06 18:01:55   raw_1589        0001 (pompa_CO: on)
         2019-01-07 09:36:57   raw_158b        0000 (pompa_CWU: off)
         2019-01-07 11:15:42   raw_159b        0064 (dmuchawa_obroty: 100)
         2019-01-06 09:29:34   raw_15a7        0009
         2019-01-06 09:29:37   raw_15a9        0000
         2019-01-06 09:29:34   raw_15cd        0002
         2019-01-06 09:29:34   raw_1616        0039 (desiredTemperature_CWU: 57)
         2019-01-07 11:17:52   raw_1620        1212 (godzina: 18:18)
         2019-01-06 16:59:45   raw_1621        0005 (dzien_tygodnia: 5)
         2019-01-07 11:06:58   raw_166e        0212 (temperature_CWU: 53)
         2019-01-07 11:17:58   raw_1681        f830 (temperatura_zewn: brak pomiaru)
         2019-01-06 09:29:49   raw_1684        0000
         2019-01-06 09:29:34   raw_169e        502d
         2019-01-06 09:29:34   raw_169f        4b28
         2019-01-06 09:29:34   raw_16c2        0000
         2019-01-07 11:17:58   raw_16ef        0002
         2019-01-07 11:07:01   raw_16f8        00e6 (podajnik_temperatura: 23)
         2019-01-06 09:29:34   raw_16ff        0006
         2019-01-06 13:12:34   raw_f830        0218
         2019-01-06 13:12:34   raw_fc18        157c
         2019-01-07 11:17:58   regulator_aktywny off
         2019-01-07 11:17:58   regulator_desiredTemperature_CO brak ustawienia
         2019-01-07 11:17:58   regulator_desiredTemperature_CWU brak ustawienia
         2019-01-07 11:17:58   regulator_dzien_tygodnia 0
         2019-01-07 11:17:58   regulator_godzina 00:00
         2019-01-07 11:17:58   regulator_wlaczony off
         2019-01-07 11:17:58   statDmuchawaDay off: 06:49:17 off_Count: 22 on: 04:28:46 on_Count: 22
         2019-01-06 23:59:55   statDmuchawaDayLast off: 14:43:20 off_Count: 60 on: 09:16:40 on_Count: 60
         2019-01-07 11:17:58   statDmuchawaHour off: 00:15:29 off_Count: 2 on: 00:02:34 on_Count: 2
         2019-01-07 10:59:55   statDmuchawaHourLast off: 00:44:10 off_Count: 3 on: 00:15:50 on_Count: 2
         2019-01-07 11:17:58   statDmuchawaMonth off: 2d 17:54:46 off_Count: 331 on: 3d 17:23:17 on_Count: 332
         2018-12-31 23:59:55   statDmuchawaMonthLast off: 13d 13:37:01 off_Count: 1659 on: 12d 22:17:52 on_Count: 1659 (since: 2018-12-05_12:05:00)
         2019-01-07 11:17:58   statDmuchawaYear off: 2d 17:54:46 off_Count: 331 on: 3d 17:23:17 on_Count: 332
         2018-12-31 23:59:55   statDmuchawaYearLast off: 13d 13:37:01 off_Count: 1659 on: 12d 22:17:52 on_Count: 1659 (since: 2018-12-05_12:05:00)
         2019-01-07 11:17:58   statPodajnikDay off: 10:55:54 off_Count: 61 on: 00:22:09 on_Count: 61
         2019-01-06 23:59:55   statPodajnikDayLast off: 23:09:08 off_Count: 157 on: 00:50:52 on_Count: 156
         2019-01-07 11:17:58   statPodajnikDayon_Count 61
         2019-01-06 23:59:55   statPodajnikDayon_CountLast 156
         2019-01-07 11:17:58   statPodajnikHour off: 00:17:21 off_Count: 3 on: 00:00:42 on_Count: 3
         2019-01-07 10:59:55   statPodajnikHourLast off: 01:00:00 off_Count: 1
         2019-01-07 11:17:58   statPodajnikHouron_Count 3
         2019-01-07 09:59:55   statPodajnikHouron_CountLast 3
         2019-01-07 11:17:58   statPodajnikMonth off: 6d 05:42:33 off_Count: 1000 on: 05:35:30 on_Count: 1000
         2018-12-31 23:59:55   statPodajnikMonthLast off: 25d 10:17:45 off_Count: 5128 on: 1d 01:37:08 on_Count: 5127 (since: 2018-12-05_12:05:00)
         2019-01-07 11:17:58   statPodajnikYear off: 6d 05:42:32 off_Count: 1000 on: 05:35:31 on_Count: 1000
         2018-12-31 23:59:55   statPodajnikYearLast off: 25d 10:17:48 off_Count: 5128 on: 1d 01:37:05 on_Count: 5127 (since: 2018-12-05_12:05:00)
         2019-01-07 11:17:58   statPompa_CODay on: 11:18:03 on_Count: 1
         2019-01-06 23:59:55   statPompa_CODayLast off: 18:00:51 off_Count: 2 on: 05:59:09 on_Count: 2
         2019-01-07 11:17:58   statPompa_COHour on: 00:18:03 on_Count: 1
         2019-01-07 10:59:55   statPompa_COHourLast on: 01:00:00 on_Count: 1
         2019-01-07 11:17:58   statPompa_COMonth off: 20:55:10 off_Count: 3 on: 5d 14:22:53 on_Count: 4
         2018-12-31 23:59:55   statPompa_COMonthLast on: 4d 12:25:36 on_Count: 1 (since: 2018-12-27_11:34:18)
         2019-01-07 11:17:58   statPompa_COYear off: 20:55:10 off_Count: 3 on: 5d 14:22:52 on_Count: 4
         2018-12-31 23:59:55   statPompa_COYearLast on: 4d 12:25:37 on_Count: 1 (since: 2018-12-27_11:34:18)
         2019-01-07 11:17:58   statPompa_CWUDay off: 06:25:03 off_Count: 3 on: 04:53:00 on_Count: 2
         2019-01-06 23:59:55   statPompa_CWUDayLast off: 14:50:47 off_Count: 53 on: 09:09:13 on_Count: 52
         2019-01-07 11:17:58   statPompa_CWUHour off: 00:18:03 off_Count: 1
         2019-01-07 10:59:55   statPompa_CWUHourLast off: 01:00:00 off_Count: 1
         2019-01-07 11:17:58   statPompa_CWUMonth off: 4d 12:28:36 off_Count: 393 on: 1d 22:49:26 on_Count: 392
         2018-12-31 23:59:55   statPompa_CWUMonthLast off: 3d 08:52:06 off_Count: 304 on: 1d 03:33:31 on_Count: 303 (since: 2018-12-27_11:34:18)
         2019-01-07 11:17:58   statPompa_CWUYear off: 4d 12:28:36 off_Count: 393 on: 1d 22:49:27 on_Count: 392
         2018-12-31 23:59:55   statPompa_CWUYearLast off: 3d 08:52:07 off_Count: 304 on: 1d 03:33:30 on_Count: 303 (since: 2018-12-27_11:34:18)
         2019-01-07 11:17:58   statTemperature_CODay Min: 55 Avg: 60 Max: 65
         2019-01-06 23:59:55   statTemperature_CODayLast Min: 40 Avg: 53 Max: 62
         2019-01-07 11:17:58   statTemperature_COHour Min: 57 Avg: 61 Max: 64
         2019-01-07 10:59:55   statTemperature_COHourLast Min: 58 Avg: 62 Max: 65
         2019-01-07 11:17:58   statTemperature_COMonth Min: 33 Avg: 52 Max: 65
         2018-12-31 23:59:55   statTemperature_COMonthLast Min: 49 Avg: 51 Max: 54 (since: 2018-12-27_11:33:04 )
         2019-01-07 11:17:58   statTemperature_COYear Min: 33 Avg: 52 Max: 65
         2018-12-31 23:59:55   statTemperature_COYearLast Min: 49 Avg: 51 Max: 54 (since: 2018-12-27_11:33:04 )
         2019-01-07 11:17:58   statTemperature_CWUDay Min: 51 Avg: 55 Max: 57
         2019-01-06 23:59:55   statTemperature_CWUDayLast Min: 47 Avg: 53 Max: 57
         2019-01-07 11:17:58   statTemperature_CWUHour Min: 53 Avg: 53 Max: 54
         2019-01-07 10:59:55   statTemperature_CWUHourLast Min: 54 Avg: 55 Max: 56
         2019-01-07 11:17:58   statTemperature_CWUMonth Min: 31 Avg: 51 Max: 57
         2018-12-31 23:59:55   statTemperature_CWUMonthLast Min: 44 Avg: 51 Max: 53 (since: 2018-12-27_11:33:04 )
         2019-01-07 11:17:58   statTemperature_CWUYear Min: 31 Avg: 51 Max: 57
         2018-12-31 23:59:55   statTemperature_CWUYearLast Min: 44 Avg: 51 Max: 53 (since: 2018-12-27_11:33:04 )
         2019-01-07 11:17:58   statTrybDay     podtrzymanie: 06:51:16 podtrzymanie_Count: 18 praca: 04:26:47 praca_Count: 18
         2019-01-06 23:59:55   statTrybDayLast podtrzymanie: 14:43:34 podtrzymanie_Count: 55 praca: 09:16:26 praca_Count: 55
         2019-01-07 11:17:58   statTrybHour    podtrzymanie: 00:15:41 podtrzymanie_Count: 1 praca: 00:02:22 praca_Count: 1
         2019-01-07 10:59:55   statTrybHourLast podtrzymanie: 00:44:55 podtrzymanie_Count: 2 praca: 00:15:05 praca_Count: 1
         2019-01-07 11:17:58   statTrybMonth   alarm:_Temperatura_nie_rośnie: 01:27:59 alarm:_Temperatura_nie_rośnie_Count: 1 podtrzymanie: 2d 16:37:25 podtrzymanie_Count: 318 praca: 3d 17:12:39 praca_Count: 320
         2018-12-31 23:59:55   statTrybMonthLast 0002: 00:03:37 0002_Count: 2 0050: 00:15:12 0050_Count: 1 00d3: 00:00:02 00d3_Count: 1 alarm:_Temperatura_nie_rośnie: 01:43:58 alarm:_Temperatura_nie_rośnie_Count: 3 podtrzymanie: 13d 12:25:46 podtrzymanie_Count: 1518 praca: 12d 21:08:32 praca_Count: 1524 (since: 2018-12-05_12:22:46)
         2019-01-07 11:17:58   statTrybYear    alarm:_Temperatura_nie_rośnie: 01:27:59 alarm:_Temperatura_nie_rośnie_Count: 1 podtrzymanie: 2d 16:37:25 podtrzymanie_Count: 318 praca: 3d 17:12:39 praca_Count: 320
         2018-12-31 23:59:55   statTrybYearLast 0002: 00:03:37 0002_Count: 2 0050: 00:15:12 0050_Count: 1 00d3: 00:00:02 00d3_Count: 1 alarm:_Temperatura_nie_rośnie: 01:43:58 alarm:_Temperatura_nie_rośnie_Count: 3 podtrzymanie: 13d 12:25:46 podtrzymanie_Count: 1518 praca: 12d 21:08:34 praca_Count: 1524 (since: 2018-12-05_12:22:46)
         2019-01-07 09:36:53   state           opened
         2019-01-07 11:17:58   temperatura_zewn brak pomiaru
         2019-01-07 11:17:58   temperature_CO  57
         2019-01-07 11:17:58   temperature_CWU 53
         2019-01-07 11:17:58   tryb            praca
       helper:
         _98_statistics TechStat
    Attributes:
       event-min-interval desiredTemperature.*:3600,temperature.*:60,pompa.*:300,dmuchawa:60
       event-on-change-reading .*
       room       ESPEasy,Ogrzewanie,Overview
       stateFormat tryb (ratio%) CO:temperature_CO CWU:temperature_CWU
       timestamp-on-change-reading pompa.*
       userReadings ratio {sprintf("%.1f", hms2secs(statgetkey(ReadingsVal($name,"statTrybHourLast","0:00:00"),"praca"))*100/(hms2secs(statgetkey(ReadingsVal($name,"statTrybHourLast","0:00:00"),"praca"))+hms2secs(statgetkey(ReadingsVal($name,"statTrybHourLast","0:00:00"),"podtrzymanie"))))}
       verbose    3

    Bart
  • #250
    Arek1984
    Poziom 16  
    Ja mam regulator pokojowy ale dedykowany do stalmarka i tam chyba troche pozmieniali ramki bo wg. "dekodera" ramek jest status regulatora nieaktywny, temp pokojowa zmierzona oraz zadana sa 0*C. CRC też błędne wychodzi.
    Jak kupiłem regulator to na początku był brak komunikacji, jak się okazało miał soft techa ale nie dedykowany do stalmarka (musiałem odesłać na zmianę softu) więc stąd przypuszczenia, że stalmarkowe ramki sa inne.
  • #251
    wobio
    Poziom 12  
    yntelo napisał:
    Frame jest tablicą elementów odczytanych prosto ze sterownika: ushort frame[maxBufferSize] (gdzie maxBufferSize = 500, bo nie widzialem dluzszych ramek ze sterownika, ważne żeby cała ramka się zawsze zmieściła). Po serial port lecą dane 1 bajtowe, ale odczytuję je do tablicy 2 bajtowych elementow, zeby pozniej bylo prosciej. Dzięki temu zabiegowi funkcja obliczająca CRC w ogóle działa. Bez tego miałem z nią problemy o co nawet pytałem w tym wątku (jeden bajt był za mały i coś się przelewało podczas obliczeń).


    Podpowiedz proszę yntelo jak wczytujesz te dane do tablicy? Ja do tej pory wczytuję je do Stringa, tak jak zaproponował flaoo13 w poście #191.
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=17554037#17554037

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Działa wszystko ok dla samego wyciągania wartości temperatur CO i CWU. Natomiast gdy próbuję robić więcej rzeczy (obliczanie CRC, wyciąganie kolejnych parametrów) coś się sypie. Ramki albo nie idą od początku, albo nie są odczytywane do końca, albo się sklejają. Próbowałem zmieniać czasy w warunku: while (millis() - startTime < 1500) jak również dla delay na końcu pętli void loop(), ale nie wiele to zmienia.
    Myślę, że rozwiązaniem będzie tutaj wczytywanie i operowanie na danych z tablicy a nie w stringu.

    Poniżej kilka obecnych odczytów:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #252
    wobio
    Poziom 12  
    Doczytałem, że problemem może być 64bajtowy bufor portu szeregowego w ESP. Ramki przesyłane przez sterownik pieca są dłuższe. To dla tego tnie mi te ramki, bo nie potrafię ich odczytać na czas. Próbowałem z różnymi czasami opóźnienia, ale nie działa. Jak sobie radzicie z tym, żeby cała ramka została odczytana czy to do Stringa, czy tablicy?
  • #253
    yntelo
    Poziom 9  
    @wobio Ty czytasz bajt po bajcie (char), tylko że zbierasz to do stringa zamiast do tablicy. Ale to wcale nie musi być przyczyną Twoich problemów. Ze stringami chodzi o to, że one "szatkują" pamięć tzn. dochodzi do defragmentacji (zostaje sporo pustych dziur w pamięci, których nie da się odzyskać), aż w końcu pamięć się kończy i urządzenie np. się resetuje. Dlatego lepiej ich unikać na urządzeniach o tak małych zasobach. U Ciebie nie ma takich objawów więc pewnie chodzi o coś innego.

    U mnie to kocioł sklejał ramki. Gdy pracował w PID to nie sklejał, gdy wyłączyłem PID to sklejał. Miałem wtedy identyczne objawy jak u Ciebie. Kocioł nie trzymał się reżimu czyli 1 ramka co 3sek. Podłącz kocioł do PC-ta zamiast do ESP i użyj np. Serial Port Utility a od razu będziesz wiedział, czy to kocioł świruje, czy jednak Twój ESP. Jeżeli to nie kocioł, to zakomentowałbym wszystko, a zostawił tylko kod odpowiedzialny za odczyt z portu szeregowego. Następnie powoli odkomentowywałbym kolejne fragmenty kodu, aż znalazłbym winowajcę.

    Inny sposób to dodanie trochę logiki w pętli odczytującej dane, co wcale nie jest trudne. Najpierw odczytujesz 2 bajty i sprawdzasz, czy są to znaki początku ramki. Jeżeli nie, to czyścisz bufor i wychodzisz obrażony (odczytujesz wszystko co tam jest i wyrzucasz bo nic z tym nie zdziałasz). Jeżeli masz początek ramki to dopiero wchodzisz do pętli czytającej z portu i czytasz bajt po bajcie, ale nie odczytujesz wszystkiego bezwiednie tak jak robisz to teraz (port.available()), tylko cały czas sprawdzasz, czy udało Ci się już uzbierać znak końca ramki. Jeżeli nie masz znaku końca ramki to czytasz dalej aż go znajdziesz lub do timeout-u. Jeżeli masz znak końca ramki to doczytujesz jeszcze 2 bajty (CRC) i wyskakujesz z pętli, a resztę danych w buforze zostawiasz na następny raz bo jeżeli coś tam zostało to pewnie jest to kolejna ramka. Problem taki, że jak w ramce pojawi się wartość taka sama jak znak końca ramki (0218 hex, czyli 536 dec czyli np. 53,6 st. C) to wyskoczysz z pętli przedwcześnie i będziesz miał niekompletną ramkę. CRC to wykryje, ale masz ramkę w plecy, a jeżeli będzie to wartość, która utrzymuje się długo np. temp. na kotle, to przez długi czas nic nie odczytasz bo będziesz odrzucał wszystkie ramki. Żeby tego uniknąć należało by po wykryciu znaku końca ramki obliczyć CRC dla danych które już odczytałeś. Jeżeli CRC byłoby błędne to znaczy, że ramka się jeszcze nie skończyła, a ten znak końca to była tylko wartość.
  • #254
    wobio
    Poziom 12  
    yntelo napisał:
    Inny sposób to dodanie trochę logiki w pętli odczytującej dane, co wcale nie jest trudne. Najpierw odczytujesz 2 bajty i sprawdzasz, czy są to znaki początku ramki. Jeżeli nie, to czyścisz bufor i wychodzisz obrażony (odczytujesz wszystko co tam jest i wyrzucasz bo nic z tym nie zdziałasz). Jeżeli masz początek ramki to dopiero wchodzisz do pętli czytającej z portu i czytasz bajt po bajcie, ale nie odczytujesz wszystkiego bezwiednie tak jak robisz to teraz (port.available()), tylko cały czas sprawdzasz, czy udało Ci się już uzbierać znak końca ramki. Jeżeli nie masz znaku końca ramki to czytasz dalej aż go znajdziesz lub do timeout-u. Jeżeli masz znak końca ramki to doczytujesz jeszcze 2 bajty (CRC) i wyskakujesz z pętli, a resztę danych w buforze zostawiasz na następny raz bo jeżeli coś tam zostało to pewnie jest to kolejna ramka.


    Hej. A możesz wkleić kawałek kodu jak Ty to robisz?
    Udało mi się już zrealizować odczyt danych do tablicy, z tym że nie weryfikuję początku i końca ramki. Odczytuje to co jest w buforze i wysyłam na razie na Serial monitor.
    Tak to robię:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A takie wyniki teraz otrzymuję:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #255
    wobio
    Poziom 12  
    Udało mi się chyba rozwiązać problem 64 bajtowego buforu portu szeregowego ESP.
    Wcześniej gubiłem kilka bajtów powyżej 64-tego. Podzieliłem pętlę odczytu ramki większej na dwa kroki i teraz nic nie gubię. :-)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A ramki takie lecą:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #256
    rohdamn
    Poziom 12  
    wobio napisał:

    A takie wyniki teraz otrzymuję:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Cześć,
    sprawdziłem Twoje ramki na https://dzien.net/tech/ i wygląda na to, że są już poprawne zbierane z czytnika z tą różnicą, że aby poprawnie odczytać ich wartości powinieneś zapisywać HEXy w postaci np. 02 a nie jak zapisujesz 2. Przykład poprawionej ramki z cytatu powyżej dla której wyliczone CRC #321C jest zgodne:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #257
    wobio
    Poziom 12  
    Dzięki rohdamn za sprawdzenie moich ramek.
    Wiem, że aby sprawdzić crc przez https://dzien.net/tech/ wartości powinny być w HEX.
    Jednak według propozycji yntelo z postu #236
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=17594470#17594470
    dane powinny być wczytywane do tablicy 2 bajtowych elementów a CRC musi być liczone na surowej ramce tzn. na danych binarnych przed konwersją na postać hexadecymalną.
    Sprawdzę jak się będzie liczyło crc dla moich ramek tym sposobem.

    Edit: Potwierdzam poprawność obliczania crc. Mam jeszcze co jakiś czas przycięte ramki w okolicach 65-tego i 66-tego bajtu, ale jest to rzadkość a po za tym kalkulacja i porównanie crc pozwala mi je odrzucać.
  • #259
    camusnh
    Poziom 2  
    Cześć wszystkim :)
    podłączyłem się do sterownika ST480K przez RSa z Raspberry na którym dane czytane są przez skrypt w pythonie i trafiają przez Jasona do Domoticza. Całość zapowiada się ciekawie a to dopiero początek bo nie wyciągam wszystkich danych z pieca. Kolejny etap to będzie sterowanie piecem. Dostęp do domoticza przez portal my domoticz ( nie trzeba miec public ip )

    Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny
    Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny
  • #260
    TomasekTMK
    Poziom 9  
    yntelo napisał:
    Typ ushort to po prostu alias na przesadnie długą deklarację unsigned short int. Jest to więc zwykły 2 bajtowy int bez znaku. Równie dobrze można napisać uint16_t, i chociaż jest między nimi drobna różnica, to w naszym przypadku nie ma to znaczenia. Na tym typie pracuje funkcja obliczająca CRC i taki typ zwraca.

    Frame jest tablicą elementów odczytanych prosto ze sterownika: ushort frame[maxBufferSize] (gdzie maxBufferSize = 500, bo nie widzialem dluzszych ramek ze sterownika, ważne żeby cała ramka się zawsze zmieściła). Po serial port lecą dane 1 bajtowe, ale odczytuję je do tablicy 2 bajtowych elementow, zeby pozniej bylo prosciej. Dzięki temu zabiegowi funkcja obliczająca CRC w ogóle działa. Bez tego miałem z nią problemy o co nawet pytałem w tym wątku (jeden bajt był za mały i coś się przelewało podczas obliczeń).

    frameSize to informacja ile danych wczytalem do bufora frame (wiadomo, frameSize jest zawsze mniejsze niż maxBufferSize).

    Wywołanie ushort crcLocal = Crc16_mcrf4xx(frame, frameSize - 4); przyjmuje 2 parametry, pierwszy to bufor, a więc ramka, na której będę obliczał CRC, a drugi parametr to informacja do którego miejsca w ramce ma robić obliczenia. Ponieważ w buforze jest cała ramka, a CRC obliczamy dla ramki z pominięciem znaku końca ramki (2 bajty) i pominięciem CRC (2 bajty) więc muszę poinstruować tę funkcję aby ominęła te dwa elementy, stąd frameSize - 4.

    CRC musi być liczone na surowej ramce tzn. na danych binarnych przed konwersją na postać hexadecymalną.

    No to jeszcze funkcja do CRC, co by wszystko było w jednym miejscu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Użycie (crcRemote to CRC otrzymane ze sterownika, jest ono zapisane na 2 bajtach więc pierwsza linijka to złożenie 2 bajtów w jedną za pomocą operacji bitowych):

    Kod: c
    Zaloguj się, aby zobaczyć kod



    W jaki sposób używasz mechanizmu CRC dla Arduino?
    Testowałem ten dzień przez cały dzień:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym, że wynikowy CRC16 to: E74D.
    E74D jest poprawny, ale błędny zgodnie z obliczeniami kotła.
    Kocioł określa CRC dla ramy: 0226FFF416100000 CRC: 0E9F
    Jednak ten przypadek zwraca: E74D
    Możesz przetestować tutaj: https://crccalc.com
    Kiedy przełączysz się na iput wpisz ASCII, więc wynik E74D zwróci arduino, ale nie wiem, jak sprawić, żeby arduino zwróciło wynik 0E9F.
    0E9F dopasowuje typ wejścia HEX.

    Jak rozwiązać go po stronie arduina lub ESP32?

    A może sprawdzasz po stronie serwera?

    Czy masz demonstrację CRC w PHP?

    Nie chcę dekodować ramki, jeśli nie wiem 100%, że CRC jest OK.

    Dziękuję za radę i demonstrację kodu.

    Przykro mi, PL nie jest moim językiem, tłumaczenie jest tłumaczone przez Google translator.
  • #261
    TomasekTMK
    Poziom 9  
    Rozwiązałem kod dla Arduino. (Z powodzeniem - Test Uno) W dalszym ciągu podłączę ESP32 z diodą RGB.

    Ciąg wejściowy to ciąg znaków (szesnastkowy z kotła).

    - Oblicza CRC (Crc16_mcrf4xx)
    - Porównuje obliczony CRC i CRC z kotła.
    - Sprawdza początek i koniec sekwencji HEX (Start (0226) i End (0218)
    - Sprawdza liczbę znaków HEX> = 16 lub maksymalnie 256.
    - Usuwa luki na początku i na końcu

    Dane wyjściowe to: 0 CRC (Hex Damaged) lub 1 (CRC Hex Scales może być wysłane do PHP i odszyfrowane).

    !!! Ograniczenia: maks. Szesnaście 256 znaków

    Mam nadzieję, że to pomoże komuś rozwiązać komunikację tak jak ja :)

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #262
    TomasekTMK
    Poziom 9  
    Jak przesłać dane z arduinu do kotła?
    Próbowałem tutaj przykład na forum, ale to nie działa dla mnie.
    (nie trzeba potwierdzać wysyłania przez specjalny? lub po prostu "0226FFF4020A0001021858B4")

    Próbowałem ustawić czas:
    0226FFF4020000010218C413

    lub włączyć i wyłączyć kocioł:
    0226FFF4020A0001021858B4
    0226FFF4020A0000021858B4

    lub wyłącz wentylator:
    0226FFF40200000002182BCE

    nie odpowiada :(

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kocioł My Tech St37RS nie odpowiada. (Czytałem dobrze informacje o kotle.)

    Czy ktoś powinien pochwalić się twoim kodem?

    Próbowałem włączyć moduł internetowy lub termostat pokojowy w ustawieniach, ale nawet kocioł na mnie polecenia arduina nie odpowiada :(
  • #263
    szczukot
    Poziom 13  
    Może coś sprzętowo jest nie tak ?
    Mi też się nie udało.
    Jaki schemat masz zrobiony na wysłanie.

    Fantom
  • #264
    TomasekTMK
    Poziom 9  
    Do konwersji rs232 używam obwodu: MAX3232 (czytanie jest w porządku, nie wiem dlaczego TX nie działa)
    LINK Aliexpres


    Do komunikacji przez Arduino UNO (później ESP32)
    Kod pokazuje, że dla oprogramowania szeregowego używam pinu 1.2

    Diody TX i RX do komunikacji zi do lampy Arduino.
    Nie wiem, dlaczego kocioł nie słucha moich poleceń.
  • #265
    TomasekTMK
    Poziom 9  
    Heuréka !!
    Mogę więc odczytać dane kotła, a także polecenia.

    (Bug był po mojej stronie :( (Miałem Arduin błędnie podłączony TX pin .... lol.)

    Mały krok dla mnie, ale duży krok dla kotła, w końcu mogę zrobić pilota i kontrolować temperaturę w domu.

    Chociaż ustawiam tylko temperaturę, ale będzie możliwość czuwania itp. Muszę wymyślić więcej opcji według: https://dzien.net/tech/

    Wielkie dzięki to:
    flaoo13, wobio, yntelo, flaoo13, szczukot, wobio

    Bez ciebie nie opanowałbym chłopców ... DZIĘKUJĘ!

    Przejdź teraz na ESP32 i steruj przez moją stronę :)
  • #266
    NeverGiveUp1995
    Poziom 6  
    ESP8266 Nodemcu v3
    Witam mam taki problem może ktoś już się spotkał próbuję odczytać dane z sterownika tylko średnio to wychodzi może ma ktoś jakiś przykład albo naprowadzi jak to zrobić by działało

    no to pierwszy kod z forum czyta ramki ładnie tylko nie wiem jak zabrać się do tego by to podzielić i wysłać do domoticza gotowe dane
    Kod: c
    Zaloguj się, aby zobaczyć kod


    testowałem kolejny kod który bym zrobił na case działa tylko jest problem bo nie odczytuję ramek do konca tylko ucina podobno buffor w esp jest 64 bity ale nie potrafię tego rozszerzyć

    dane otrzymane :
    0226FFF4169E502D169F4B23157C0050157D0208157E0033166E00001616002D1681F83015CD0000
    162010311621000115890001158B000016B6000016B00
    Kod: c
    Zaloguj się, aby zobaczyć kod


    i mam jeszcze jeden kod który napisałem tylko w nim jest znowu problem że gubi zera
    To co dostaje na serial tam gdzie są przerwy brakuje zer
    0226FFF4169E502D169F4B23157C0 50157D 1F4157E0 33166E00 16160 2D1681F83015CD00 1620153416210 315890 1158B00 16B600 16B00 416AE0 115AB00 158700 158800 159B00 1F600 28E00 29800 29900 24500 2189B1400000000000----------
    dane które idą konwenter usb->rs232
    0226FFF4169E502D169F4B23157C0050157D0212157E0035166E00001616002D1681F83015CD0000162013281621000315890001158B000016B6000016B0000416AE000115AB00001587000015880000159B000001F60000028E0000029800000299000002450000021804CC

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #267
    wobio
    Poziom 12  
    Witam znowu.

    Poradźcie proszę szanowni forumowicze. Mam problem z poprawnym startem mojego układu po zaniku zasilania w sieci. Sprawa wygląda, tak. Zasilam układ ze sterownika pieca ST-48 poprzez LM1117 - 3,3V. Po powrocie zasilania 230V do sterownika pieca, ESP nie startuje prawidłowo (świeci się ciągle niebieska dioda na ESP-ku). Dopiero ręczny reset po jakimś czasie pomaga. Zauważyłem pewną zależność, że reset ten poprawnie działa dopiero po tym jak sterownik pieca przejdzie przez "ekran startowy". Wcześniejsze próby resetu w trakcie wyświetlania "ekranu startowego" nie skutkują poprawnym resetem (ciągłe świecenie niebieskiej diody). I tu pytanie. Co może być powodem takiej sytuacji? Zależy mi na tym, aby moduł poprawnie sam startował po każdym zaniku energii elektrycznej, abym nie musiał go ręcznie resetować. Nie chciałbym też zasilać go z zewnętrznego zasilacza. W załączniku schemat mojego układu.


    Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny
  • #268
    wobio
    Poziom 12  
    Witam.
    Walczę z tym poprawnym startem po zaniku zasilania i nie potrafię tego usprawnić.
    Zrobiłem próbę z zewnętrznym zasilaczem ale niestety skutek taki sam. ESP nie startuje poprawnie.
    Odpiąłem najpierw Rx ze sterownika pieca, dalej to samo.
    Odpiąłem Tx i tu moduł uruchamia się prawidłowo.
    Następnie zrobiłem próbę podpięcia lini Tx tuż po włączeniu zasilania (ok. sekundy po) i moduł również startuje prawidłowo.
    Przemierzyłem napięcie na tej linii Tx od sterownika. Sytuacja wygląda tak, że tuż po włączeniu zasilania napięcie skacze tam do ok 18 - 17 V i po ok. 6 sekundach (gdy sterownik pieca przejdzie ekran startowy) spada do 0V a gdy jest transmisja wynosi ok 1,0 - 0,8 V.
    Podejrzewam, że powodem tej sytuacji jest ten skok napięcia przy starcie sterownika pieca.
    Macie może pomysł jak to ominąć. Próbowałem dawać kondensatory pomiędzy Tx a masę, ale to powoduje że transmisja jest również filtrowana i ESP nie odbiera żadnych danych. Poradźcie mi proszę jak tą przypadłość wyeliminować.
    Pozdr.
  • #269
    szczukot
    Poziom 13  
    A zobacz mój schemat. Jest dużo prostszy (bo nie ma jakiś diodek, przycisków reset itp) ale za to działa. Może jakiś element typu wpięty rezytor między nóżkami (a masz ich kilka) coś powoduje.
  • #270
    wobio
    Poziom 12  
    Dzięki szczukot za sugestie. Faktycznie mój układ jest trochę bardziej rozbudowany niż twój. Sprawdzę czy po odchudzeniu go coś się zmieni. Niemniej jednak zastanawia mnie ciągle fakt, dlaczego układ startuje prawidłowo przy odłączonej linii Tx na czas startu i działa również dalej prawidłowo po podłączeniu tej linii (po ok 1 sekundzie od startu).