Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek 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 20 Sty 2017 12:40 20661 125
  • #61 20 Sty 2017 12:40
    szczukot
    Poziom 13  

    Znajdź jak się liczy sumę kontrolną :)
    Bez tego wysyłanie komunikatów będzie raczej niemożliwe :(

    Fantom

  • #62 20 Sty 2017 13:12
    mcart666
    Poziom 2  

    Z dotychczasowej lektury wątku zdaje się wynikać, że poziomy napięć na wyjściu to jednak standard RS232. Oznaczałoby to, że dobranie się do tego co wysyła sterownik przy pomocy takiego właśnie kabla DE-9/USB (jak pisze kol. Ntp) powinno być możliwe. Rohdamn, czy możesz to ewentualnie potwierdzić? Przy czymś takim, dalej w zasadzie byłoby już łatwo dla każdego, co zwiększy szansę na znalezienie procedury liczenia CRC.

  • #63 20 Sty 2017 15:05
    rohdamn
    Poziom 11  

    Ntp napisał:
    Panowie szkoda by było aby tak super zapowiadający się wątek umarł.

    Zgadzam się z Tobą w 100%

    Ntp napisał:
    ...że moja wersja sterownika nie będzie się komunikowała za pomocą nowej strony emodul.pl tylko ze starą (i archaiczną)....

    Problem polega na tym, że prawdopodobnie stare sterowniki nie mają zbyt bogatego wbudowanego oprogramowania komunikacyjnego. Powoduje to, że pomimo iż mamy rozpoznany prawie cały wachlarz parametrów które mogą być przesyłane, sam sterownik przesyła tylko kilka z nich (tak jest w moim AKM UNI, w Twoim jest pewnie lepiej), ale zawsze można spróbować zmieniać zdalnie parametry, które do zmiany są możliwe.

    Ntp napisał:
    Jeśli mógłbym jakoś pomóc to tylko dajcie znać jak...

    Skorzystaj z poradnika (w połowie tego tekstu https://www.elektroda.pl/rtvforum/viewtopic.php?p=16152735#16152735), odczytaj ramki swojego sterownika, a następnie wklej je tutaj http://dzien.net/tech/index.php napewno pojawią się nowe parametry do rozpoznania.
    Problem jaki mamy w symulacji sterowania piecem to CRC ramki. Jeżeli możesz to postaraj się zgłębić temat sumy kontrolnej CRC i konstrukcji ramki danych, choć kolega kebrzyk sprawdzał wiele możliwych kombinacji i póki co nie udało się tego rozkminić.
    Dodano po 29 [minuty]:
    mcart666 napisał:
    ...wyjściu to jednak standard RS232. Oznaczałoby to, że dobranie się do tego co wysyła sterownik przy pomocy takiego właśnie kabla DE-9/USB (jak pisze kol. Ntp) powinno być możliwe

    Wydaje mi się że poziomy sygnałów nie spełniają stricte standardu RS232, ale z tą przejściówką nie próbowałem.

    Podsłuchując czystą transmisję od sterownika bezpośrednio do monitora RS232 poprzez Arduino nie byłem w stanie odwrócić interpretacji sygnałów, a to konieczne dla poprawnego odczytu ramki (nie znalazłem monitora RS232 z możliwością ustawienia transmisji jako inverted).

    Dopiero wykorzystanie kodu odwracającego sygnał pomogło.
    Dla tych co chcieliby spróbować:
    Code:

    #include <ctype.h>
    #define bit9600Delay 100
    #define halfBit9600Delay 50.1


    byte rx = 5;
    String line;
    String crc;

    byte przeslanyBajt = 0;
    String bajt2, bajt4;
    int i = 0;
    int len = 0;


    void setup() {
    pinMode(rx,INPUT);
    digitalWrite(13,HIGH);
    Serial.begin(9600);
    }


    int SWread()
    {
    byte val = 0;
    while (digitalRead(rx) == LOW);
    //wait for start bit
    if (digitalRead(rx) == HIGH) {
    // check start bit
    delayMicroseconds(halfBit9600Delay);
    if (digitalRead(rx) == HIGH) {
    // read 8 bit
    for (int offset = 0; offset < 8; offset++) {
    delayMicroseconds(bit9600Delay);
    val |= (digitalRead(rx) == LOW) << offset;
    }
    // check bit stop
    delayMicroseconds(bit9600Delay);
    if (digitalRead(rx) == LOW) {
    return val;
    }
    }
    //return 0;
    }
    }


    void loop()
    {
    bajt2="";
    przeslanyBajt = SWread();

    if (przeslanyBajt < 16) {bajt2+="0";} //uzupelnienie
    bajt2 += String(przeslanyBajt, HEX);
    line += bajt2;

    Serial.print(bajt2);
    if(line.substring(line.length()-8,line.length()-4)=="0218") {
    Serial.println();
    line="";
    }
    }




    Tylko jedna uwaga. Arduino nie może być obciążone dodatkowymi procesami w trakcie odczytu ramki ze sterownika. Inaczej gubi sygnały i wychodzą niezłe przekłamania w postaci niekompletnej ramki (np. zgubione wartości). Ten kod który przedstawiam powyżej jest optymalny.

  • #64 22 Sty 2017 19:27
    wojtek13skw
    Poziom 11  

    Udało się komuś poprawie obliczyć sumę kontrolną czy dalej nici z marzeń o wysyłaniu poleceń do sterownika?

  • #65 28 Sty 2017 21:31
    kompio
    Poziom 10  

    W tym tyg. uruchamiamy kotłownie z ST-409N, czy do niego tez mogę podłączyć arduino i snifować ?

  • #66 28 Sty 2017 21:55
    olejopalacz2
    Poziom 23  

    najlepiej by było zapytać w dziale serwisowym producenta

  • #67 29 Sty 2017 12:03
    szczukot
    Poziom 13  

    olejopalacz2 napisał:
    najlepiej by było zapytać w dziale serwisowym producenta


    niezły żart .....

    Fantom

  • #68 29 Sty 2017 16:35
    rohdamn
    Poziom 11  

    Skoro ST-409n posiada wyjście RS zgodne ze standardem (instrukcja https://www.techsterowniki.pl/wp-content/uploads/2015/03/instrukcja_st-409n.pdf ) oraz możliwość włączenia modułu internetowego to nie widzę przeciwskazań do podsłuchiwania ramki. Rozbudowany jest z możliwością podpięcia wielu końcówek więc i ramki powinny być bogate w funkcje.

    Sprawdź wcześniej multimetrem wyjścia po RS żeby być pewnym standardu i bezpieczeństwa.

  • #69 30 Sty 2017 20:14
    Ntp
    Poziom 11  

    Mi udało się sczytać ramki z ST-480zPID, podłączone do tego zawór 4d, pompa C.O. i C.W.U., czujnik temp. zewnętrznej. Do zrzutu użyłem laptopa z programikiem https://sites.google.com/site/terminalbpp/ (polecam),prostego konwertera USB-TTL .Wcześniej sygnał przepuściłem przez SN74LS04 bo taki inwerter akurat miałem pod ręką. Inaczej mówiąc tam nie jest RS232 (z napięciami od -12 do +12V) tylko zwykły UART i logika 5V:). Mój sterownik ma sygnał RX na 3 pinie licząc od lewej strony (piny gniazda są "od"góry"). Pinów tam mam 6, ale, że nie miałem złączki 6 pinowej użyłem zwykłej telefonicznej 4 pin i a wtedy na takiej złączce mam masę na 1 pinie, TX sterownika na 2.
    Aby w tym sterowniku odczytać jakikolwiek ramki to trzeba to włączyć w menu instalatora (odpowiednio moduł internetowy, gsm, regulator pogodowy Tech). Z na szybko zrobionej analizy można dodać do bazy takie wpisy: 15 A7 - typ sterownika - 00 15 - ST-480zPID,
    16 FF - typ sterownika - 00 06 - ST-480zPID.
    Jak wyniucham coś więcej to dam znać. W załącznikach moje zrzuty ramek podzielone w zależności od włączonego dodatkowego modułu.

  • #70 05 Lut 2017 08:15
    kompio
    Poziom 10  

    Zakupiłem st-505 i podłączyłem do st-409N. lokalnie przez www mogę tylko ustawić hasło. Strona www techa z wyświetlanymi wartościami ze sterownika wygląda jak html z przez 10 lat :) (rozumiem że mam starą wersje sterownika st-409N ?? jeżeli nie mam opcji "rejestracja" w sterowniku? - myślałem że to najwyższy i najnowszy model ;] ).
    Próby curl-a też bez efektów ... zwraca 404 - strona nie istnieje .... czy może mój sterownik ma inną ścieżkę pliku cgi?
    Myślałem że zepnę to z openhabem lub domoticzem jak resztę elementów w nowym domu.... z góry dziękuje za wskazówki
    ...
    czy http://*ip_lokalne*/user/cgi-bin/edition.cgi powinno coś pokazać na ST-505, wklejone w przeglądarkę ?
    lokalnie tylko mam stronę do zmiany hasła i hasła do konta na www techa. (w zał Sterownik Tech AG Lux (Defro) - Protokół komunikacyjnytech.png Download (77.82 kB) )

  • #72 13 Lut 2017 13:56
    rohdamn
    Poziom 11  

    Gdyby ktoś potrzebował curl'em zmieniać lokalnie nastawy pieca to można to przeprowadzić tak:

    Code:

    // ustawianie parametrów // admin:password
    curl "http://10.0.0.36/admin/cgi-bin/edition.cgi" -H "Authorization: Basic YWRtaW46cGFzc3dvcmQ=" --data "st=502_51,654_47" -s

    Powyższe powoduje ustawienie temp CO na 51 stopni, CWU na 47 stopni.

    Po odpaleniu polecenia można zaobserwować na stronie Techa zmianę tych parametrów lub odczytać ją dla potwierdzenia poprzez poniższy kod:
    Code:

    //odczytywanie parametrów admin:password
    curl "http://10.0.0.36/user/cgi-bin/edition.cgi" -H "Authorization: Basic YWRtaW46cGFzc3dvcmQ=" --data "gt=502,654" -s


    YWRtaW46cGFzc3dvcmQ= to w Base64 admin:password
    10.0.0.36 to IP mojego ST-505

  • #73 13 Lut 2017 14:42
    Kedzierski
    Poziom 3  

    To jeszcze przez stronę zewnętrzną (usunięte Cookie..., UA...., login XXX, hasło XXX).
    Może coś komuś pomoże:
    Zalogowanie:

    Code:
    curl "http://zdalnie.techsterowniki.pl/index.php" 
    
    -H "Cookie: ..."
    -H "Origin: http://zdalnie.techsterowniki.pl"
    -H "Accept-Encoding: gzip, deflate, lzma"
    -H "Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4"
    -H "Upgrade-Insecure-Requests: 1"
    -H "User-Agent: ..."
    -H "Content-Type: application/x-www-form-urlencoded"
    -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    -H "Cache-Control: max-age=0"
    -H "Referer: http://zdalnie.techsterowniki.pl/index.php?str=logout"
    -H "Connection: keep-alive" --data "login=XXX&haslo=XXX&form_logowanie=logowanie&login_button.x=124&login_button.y=3&login_button=Zaloguj" --compressed

    Zmiana temperatury CO na 65*C.
    Code:

    curl 'http://zdalnie.techsterowniki.pl/index.php?str=extern'
    -H 'Origin: http://zdalnie.techsterowniki.pl'
    -H 'Accept-Encoding: gzip, deflate, lzma'
    -H 'Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4'
    -H 'User-Agent: ...'
    -H 'Content-type: application/x-www-form-urlencoded'
    -H 'Accept: */*'
    -H 'Referer: http://zdalnie.techsterowniki.pl/index.php'
    -H 'Cookie: ...'
    -H 'Connection: keep-alive' --data 'st=502_65' --compressed

  • #74 13 Lut 2017 19:20
    rohdamn
    Poziom 11  

    CRC:

    To jeszcze taki trop. Skoro wszędzie piszą, że na pokładzie ST-505 jest Ethernut (np. tutaj http://forum.tzb-info.cz/126194-dakon-fb2-automat/strana-19 serwer: Ethernut 4.8.7.0 plik: edition.cgi )to w takim razie zgodnie z tą dokumentacją komunikacja powinna chodzić po standardzie Xmodem http://www.ethernut.de/elektor/hardware/datasheets/at91sam7se.pdf strona 234, "25.4.2 Xmodem Protocol" ?!? Dlaczego więc CRC wyliczane z kalkulatorów zgodnie z tym opisem nie jest zgodne z odczytanym ramkami?

    Code:

    5.2.2.3 __inline__ uint16_t _crc_xmodem_update (uint16_t __crc, uint8_t __-
    data) [static]
    Optimized CRC-XMODEM calculation.
    Polynomial: x∧16 + x∧12 + x∧5 + 1 (0x1021)
    Initial value: 0x0
    This is the CRC used by the Xmodem-CRC protocol.
    The following is the equivalent functionality written in C.
    uint16_t
    crc_xmodem_update (uint16_t crc, uint8_t data)
    {
    int i;
    crc = crc ^ ((uint16_t)data << 8);
    for (i=0; i<8; i++)
    {
    if (crc & 0x8000)
    crc = (crc << 1) ^ 0x1021;
    else
    crc <<= 1;
    }
    return crc;
    }

  • #75 15 Lut 2017 17:10
    kompio
    Poziom 10  

    Czy wasz ST-505 wygląda jak na zał. zdjęciach ?
    Czy próbowaliście łączyć się apka na androida po sieci LAN ?
    bo ja niestety nie mogę i po rozmowie z pracownikiem Techa wynika że ST-505 łączy się tylko prze internet (ST-500 miał Lan i internet), więc zgłupiałem jak wysyłacie zapytania do ...cgi w ST-505 :)

  • #76 19 Lut 2017 15:34
    szczukot
    Poziom 13  

    rohdamn napisał:
    Mam plik bin aktualizacji firmware dla ST-505, może ktoś łebski jest w stanie to zdekompilować i odczytać sposób generowania CRC dla ramek wysyłanych do sterownika?

    Link do pliku BIN: https://emodul.eu/firmwares/ST-505/ST-505.bin


    No już dawno doszedłem do wniosku, że to będzie chyba jedyna droga.
    Ale kod typu ASM to widziałem ostatnio z 20 lat temu - więc nie wiem czy dam radę się za to wziąć

    Fantom

  • #79 27 Lut 2017 00:35
    -shadow-
    Poziom 10  

    Jakie parametry kotła można ustawić za pomocą ST-505 oraz SPK LUX? Co zamierzacie jak uda się obliczyć CRC?

  • #80 27 Lut 2017 10:30
    rohdamn
    Poziom 11  

    -shadow- napisał:
    Jakie parametry kotła można ustawić za pomocą ST-505 oraz SPK LUX?

    Parametry jakimi można sterować zależne są od sterownika kotła, to on odpowiada za odbieranie i przetwarzanie poleceń.

    -shadow- napisał:
    Co zamierzacie jak uda się obliczyć CRC?

    Pominąć ST-505 i podpiąć bezpośrednio do Raspberry. Możliwości jest mnóstwo: zapis i prezentacja parametrów na alternatywnych stronach www (sterowanie), podpięcie do systemu inteligentnego domu, alternatywne własne algorytmy sterowania pieca dla sterowników bez PID, modyfikacja istniejących algorytmów sterowania dla sterowników z PID...

  • #81 27 Lut 2017 12:22
    -shadow-
    Poziom 10  

    A czy ktoś się zastanawiał jak powinna wyglądać ramka z ST-505 / SPK LUX wysyłana do sterownika? A może ktoś takie ramki podsłuchał? Rozumiem, że wszystkich interesował by moduł który podłączamy do sterownika kotła i do LANa a jednocześnie znamy protokół komunikacji z nim?

  • #82 28 Lut 2017 13:41
    BartekElektro1
    Poziom 2  

    Nawet nie wiecie jak mnie cieszy że ten wątek poszedł tak do przodu...
    Wczoraj w końcu zmieniłem sterownik w piecu na ST-37n RS i planuję niedługo podłączyć do niego coś co będzie zbierać dane i logować - choćby w pliku tekstowym... Najlepiej po wifi... planuję wykorzystać ESP8266 i firmware ESP Easy. Aktualnie posiada jedynie telnet serwer, ale powinno wystarczyć. Docelowo napiszę plugin do ESP Easy jak już uda się wszystko rozkodować, tak żeby konkretne parametry prosto do Domoticza wysyłał czy innego Home Automation systemu. Ten zajmie się już wykresami, pamiętaniem historii i powiadomieniami....

    Ale first things first - ktoś powyżej wspominał odnośnie parametrów elektrycznych... w moim poprzednim wpisie, (#25) wrzuciłem screeny z oscyloskopu jak wygląda transmisja ze sterownika nie podłączonego do niczego. Poziomy na pewno nie są typowe dla RS232, bo tam występują ujemne napięcia. Tutaj są 2 stany logiczne - 0V oraz okolice 8V. Dla porównania RS-232 ma +12 / -12. Niektóre adaptery RS 232 traktują 0V na równo z -12V, dlatego może ewentualnie działać. Patrząc na to jednak jak na TTL RS, potrzebna jest inwersja bo linia jest idle przy 0V a stan aktywny to 8V. Linia na pewno jest od strony sterownika zabezpieczona rezystorem szeregowym, bo po podłączeniu choćby małego obciążenia napięcie dosyć mocno spada. Dlatego też bezpośrednie podpinanie salea powinno być w miarę bezpieczne.

    Niestety nie posiadam żadnego innego podzespołu który się komunikuje z tym sterownikiem, póki co mam jedynie układ dopasowujący TX sterownika do typowego 3v3 TTL RS.

    Bardzo mnie cieszy że ktoś wrzucił firmware, jak uda mi się znaleźć troche czasu (z tym ostatnio bardzo kiepsko) to wrzucę w jakiś disassembler i przyjrzę się okolicy sum kontrolnych. Na podstawie firmware jest to na pewno do rozkminienia. Może być też szybsze niż brute-forcing różnymi możliwymi algorytmami...

    Jak będę mieć coś nowego to na pewno tu napiszę,

    pozdrawiam wszystkich którzy próbują rozwinąć ten wątek i dodają kolejne niesamowicie ciekawe informacje :)

  • #84 28 Lut 2017 22:02
    toszt
    Poziom 7  

    Czołem Panowie!

    Zacznę od tego, że jestem posiadaczem sterownika 408n + st-505 (działającego jako 500) i nie do końca (delikatnie mówiąc) jestem zadowolony z możliwości zdalnego sprawdzania co w kotłowni słychać ;)

    Wczoraj trafiłem na ten wątek, a dziś korzystając z chwili postanowiłem zerknąć co w tym crc słychać. Znalazłem taki kalkulator w nim metodą prób i błędów trafiłem w CRC16_MCRF4XX, dane podaję jako Bytes bez odstępów i bez ostatniego wiersza.
    Dla kilku podanych próbek policzyło dobrze, niech ktoś rzuci na to okiem jeszcze i potwierdzi, ale może 'mamy to' ;)

    Tu jest nota katalogowa

  • #85 28 Lut 2017 22:49
    rohdamn
    Poziom 11  

    toszt napisał:
    ...w nim metodą prób i błędów trafiłem w CRC16_MCRF4XX, dane podaję jako Bytes bez odstępów i bez ostatniego wiersza.
    Dla kilku podanych próbek policzyło dobrze, niech ktoś rzuci na to okiem jeszcze i potwierdzi...


    Tutaj ramki: http://dzien.net/tech/index.php?baza=ramki
    Ale wynik jakby nie odpowiadał sumie.
    Biorę: 022600000225000002184F5D
    Wybieram CRC16xMCRF4XX i wklejam pierwszy ciąg jako bytes.
    Calculate CRC i u mnie wynik 7605 a powinien być 4F5D.

    Ustawienia:
    Predefined: CRC16_MCRF4XX
    Input reflected: On
    Result reflected: On
    Polynominal: 0x1021
    Initial Value: 0xFFFF
    Final Xor Value: 0x0
    CRC Input data: Bytes
    02260000022500000218

    Result CRC value: 0x7605

    Gdzie popełniłem błąd?

  • #86 28 Lut 2017 22:55
    toszt
    Poziom 7  

    Ja to robię tak: Sterownik Tech AG Lux (Defro) - Protokół komunikacyjny

    Wklejam szukany ciąg bez sumy i bez 0218. Działa?

    Edit: poprawiłem zrzut ekranu.

  • #87 28 Lut 2017 23:26
    rohdamn
    Poziom 11  

    Toszt - jesteś WIELKI! Rzeczywiście mamy to!
    Ramka bez znaku końca ramki 0218 i sumy CRC16 wyliczana jest bezbłędnie! :-)

    Panowie do dzieła - ESP8266, RaspberryPi, Arduino..... pochwalcie się swoimi projektami.

    Code:

    function crc16_mcrf4xx($dane)
    {
       $data = pack('H*',$dane);
       $crc = 0xFFFF;
       for ($i = 0; $i < strlen($data); $i++)
          {
    $crc ^=ord($data[$i]);

    for ($j = 8; $j !=0; $j--)
    {
    if (($crc & 0x0001) !=0)
    {
    $crc >>= 1;
                $crc ^= 0x8408;
    }
    else $crc >>= 1;
    }
    }
    return sprintf('%04X', $crc);
    }


    Ewentualnie: http://dzien.net/tech/index.php?baza=crc

  • #88 01 Mar 2017 08:54
    szczukot
    Poziom 13  

    Nie no. Jaja se robicie ? ;)
    Przecież ja to testowałem bez tych początkowych i końcowych ramek i mi nie wychodziło. Gdzieś musiałem coś źle spojrzeć.
    No to teraz trzeba zrobić próbę i nadać jakiś komunikat do sterownika czy przyjmie.

    Fantom

    Dodano po 22 [minuty]:

    No i już wiem czemu nie mogłem znaleźć tego CRC.
    Narzędzie które używałem coś źle liczy chyba i nie znajduje CRC dla tych kombinacji :( Albo źle przełączników używam.
    http://reveng.sourceforge.net/readme.htm

    Fantom

  • #89 01 Mar 2017 12:08
    Ntp
    Poziom 11  

    Toszt - działa! DZIĘKUJE! Dzięki również koledze rohdamn i reszcie, za ogrom roboty, i może przede wszystkim wiedzy, jaki w to włożyliście, a bez tego nie mielibyśmy tego co mamy:)

    Dzisiaj spróbuję coś wysłać do sterownika. Teraz wszyscy będą sprawdzać co ich sterownik akceptuje a co nie;)

    Ps. ESP8266 w duecie z SN74LS04 od miesiąca zbiera dane:) Działa elegancko.

  • #90 01 Mar 2017 21:29
    szczukot
    Poziom 13  

    Możesz zapodać schemat podłączenia ?
    Myślałeś już jak zrobić podłączenei do sterowania ?
    Ogólnie dane chcę docelowo czytać przez raspberry, ale leży kilkanaście metrów dalej i bezpośrednio raczej tego nie zrobię.
    Też chyba dam ESP8266. Ale nie bawiłem się nim dużo. Mam dwie takie kostki i coś tam w c++ bawiłem się tylko.

    Fantom

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME