Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Computer Controls
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 46137 264
  • #241 04 Gru 2018 11:08
    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).

  • Computer Controls
  • #242 04 Gru 2018 20:27
    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

  • #243 04 Gru 2018 23:45
    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

  • Computer Controls
  • #244 12 Gru 2018 17:40
    saddam100
    Poziom 11  

    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 16 Gru 2018 19:08
    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 29 Gru 2018 18:35
    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 29 Gru 2018 18:37
    krzysiekj18
    Poziom 19  

    Przełącz tryb reprezentacji danych z ASCII na HEX.

  • #249 07 Sty 2019 11:16
    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 07 Sty 2019 12:06
    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 18 Sty 2019 08:16
    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 19 Sty 2019 15:53
    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 20 Sty 2019 01:14
    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 20 Sty 2019 18:29
    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 23 Sty 2019 17:26
    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 23 Sty 2019 23:43
    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 24 Sty 2019 08:08
    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 05 Lut 2019 14:41
    camusnh
    Poziom 1  

    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 10 Lut 2019 14:13
    TomasekTMK
    Poziom 8  

    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 17 Lut 2019 12:37
    TomasekTMK
    Poziom 8  

    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 18 Lut 2019 11:42
    TomasekTMK
    Poziom 8  

    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 18 Lut 2019 11:52
    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 18 Lut 2019 12:07
    TomasekTMK
    Poziom 8  

    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 19 Lut 2019 19:31
    TomasekTMK
    Poziom 8  

    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ę :)