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

Satel ETHM-1 - jak zintegrować z własnym sterownikiem przez TCP?

dziobsan 20 Wrz 2014 17:09 48903 140
Najlepsze odpowiedzi

Jak zintegrować własny sterownik z ETHM-1 przez TCP, tak aby odczytywać stan systemu i sterować wyjściami centrali?

Da się to zrobić po TCP, ale tylko w trybie 2 protokołu integracji: centrala sama nic nie wysyła, więc trzeba ją odpytywać o stan systemu, a do ramek dołączać 2-bajtową sumę kontrolną CRC [#13977219][#14248103] Do testów najlepiej użyć Herculesa; trzeba też pamiętać, że ETHM-1 obsługuje jedno połączenie integracyjne naraz, więc przy drugim połączeniu pojawi się komunikat „Busy!” [#14868641][#14868886] Ramki mają postać z nagłówkiem FE FE i końcówką FE 0D, a bajt FE w środku trzeba escapować jako FE F0; po odebraniu odpowiedzi najpierw usuwa się te sekwencje, a dopiero potem sprawdza CRC [#14868886][#14944395] Sterowanie wyjściami jest możliwe komendami 0x88 i 0x89 — ustawiasz tylko bity wyjść, które mają się zmienić, bez konieczności podawania stanu pozostałych [#14869652][#16943110] Do załączania czuwania używa się też komend z rodziny 0x80/0x81, a odpowiedzi na komendy sterujące przychodzą jako 0xEF, więc po wysłaniu polecenia trzeba wykonać recv i odebrać zwrotkę [#14248103][#14868786][#14868886]
Wygenerowane przez model językowy.
  • #1 13976035
    dziobsan
    Poziom 10  
    Posty: 51
    Ocena: 3
    Witam
    Mam kilka pytań odnośnie integracji INTEGRY z własnym sterownikiem. Otóż mój sterownik ma nasłuchiwać danych z systemu alarmowego na sateloskim domyślnym porcie integracji TCP 7094 ale jeśli tylko na "sucho" otworzę sobie ten port z terminala komputera to nic nie wyskakuje a po paru sekundach socket się zamyka. Specjaliści z Satela wytłumaczyli że pojawiaja się tam ramki RS-owe i będzie to chodzić jeśli użyję VSPE (Virtual Server Port Emulator) który tworzy wirtualny port COM.
    O to mi nie chodzi chce odczytywać i nadawać wyłącznie pakiety TCP.
    Jest możliwość tego zrealizowania ?

    I jeszcze jedno czy będzie możliwość sterowania systemem a nie tylko odczytu chodzi mi chociażby o załączanie wyjść centrali z poziomu mojego sterownika.
  • Pomocny post
    #2 13977219
    dariusz.bembenek
    Specjalista - Alarmy Stacjonarne
    Posty: 2141
    Pomógł: 455
    Ocena: 615
    W trybie "2" protokołu integracji jest możliwość sterowania i sprawdzania stanu systemu. Wtedy nie wystarczy podsłuchiwać tego, co się dzieje (bo nic się nie dzieje), ale należy odpytywać centralę (poprzez moduł ethm-1) o stan systemu.

    W każdej ramce muszą znajdować się oprócz początku i końca ramki - dodatkowe dwa bajty sumy kontrolnej. Sposób obliczania przedstawiony jest w dokumentacji. Jeśli potrzeba tylko 2,3 info, to można na sztywno obliczyć i zrobić gotową ramkę odpytującą. Jeśli to jednak ma działać na różne warianty (sterowanie różnymi wyjściami, różnymi strefami z różnymi hasłami itd.) to lepiej jest napisać funkcje, które automatycznie przeliczą CRC.
    Ogólnie jest to zabawa dla programistów, jeśli nie czujesz się dobrze w takich tematach to nic z tego nie będzie. Jeśli programujesz (wspomniane PLC) to spoko.
    Protokół śmiga oczywiście po TCP. Do testowania i pobawienia się protokołem można użyć programu "Hercules".

    Generalnie jeśli chcesz zintegrować centralę z własnym sprzętem na takim poziomie, abyś miał możliwość manipulacji systemem, to możesz użyć tylko trybu "2".
  • #3 13981871
    dziobsan
    Poziom 10  
    Posty: 51
    Ocena: 3
    Ok zadziałało ale jak na razie to wysłałem tą przykładową ramkę z satelowskiego opisu protokołu. Próbuję teraz rozgryźć ten sposób liczenia sumy kontrolnej, w sumie to wiem o co chodzi ale faktem jest że trudniej już nie mogli tego zrobić.
    I tu pytanie po co takie liczenie sumy ?

    Dodano po 24 [minuty]:

    Swoją drogą to Satel również powinien pomyśleć o stworzeniu wirtualnych wejść w systemie typu PAKIET TCP. Czyli naruszenie wejścia po otrzymaniu określonego pakietu przez ETHM-a
  • #4 13982583
    dariusz.bembenek
    Specjalista - Alarmy Stacjonarne
    Posty: 2141
    Pomógł: 455
    Ocena: 615
    Po co liczymy sumę? Odpowiedź jest bardzo prosta. Aby centrala miała pewność, że otrzymana ramka, czyli zestaw bajtów - jest poprawna. Gdyby transmisja została przekłamana a CRC nie było by liczone, mogło by dojść np. do wyłączenia czuwania zamiast załączenia lampy itp.

    Ty (program) liczy CRC dla ramki i ją dokleja do tej ramki.
    Centrala odbiera ramkę, sama również liczy CRC. Jeśli Twoje CRC zgadza się z CRC obliczonym przez centralę, to znaczy, że walidacja jest ok. Centrala wykonuje polecenie.

    Sprawa skomplikowania. Nie wiem jak to bywa na PLC, ale np. na Winde albo uC jest to proste. Napisanie funkcji polega na cyklicznym:
    - rotowaniu słowa w lewo o jeden bit
    - alternatywa wykluczająca (ramka XOR 0xffff)
    - sumowanie (zgodnie z dokumentacją)

    W języku C,C++,C# to jest szybka sprawa.

    Co do ostatniego pomysłu (pakiet TCP naruszający wejścia), to również tego mi brakowało. Być może jest to celowe ograniczenie protokołu integracji.
    Na koniec tylko dodam, że ten protokół ma bardzo fajne i ciekawe zastosowania. Ale poznanie dobrze idei tego protokołu podpowiada, że kiedy się z niego nie korzysta należy go wyłączyć (wyłączyć opcję "Integracja"). Więcej o tym pewnie napiszę za niedługo na naszej firmowej stronie. Jak powstanie już jakiś ciekawy artykuł to wrzucę odniesienia.
  • #5 13983061
    dziobsan
    Poziom 10  
    Posty: 51
    Ocena: 3
    Ma kolega absolutna racje. CRC jest potrzebne a co nawet wymagane w takich sytuacjach. Pytanie brzmiało czemu aż tak zawiłe. Nie szło zrobić to prościej, czyli suma wszystkich bajtów ograniczona do DWORD.
    Chce tylko wykorzystać sterowanie wyjściami wiec nie musze pisać żadnej funkcji tylko na sztywno obliczyć sobie parę ramek i je wprowadzić do sterownika.
    Ps. Czekam na pomysł zastosowania tego algorytmu.
  • Pomocny post
    #6 13983634
    montersi.pl

    Poziom 16  
    Posty: 91
    Pomógł: 26
    Ocena: 26
    Witam,
    W załączniku załączam spakowany program do obliczania sumy kontrolnej. Program pochodzi od Satela i za ich zgodą mogę program udostępnić (jest to testowy, nieoficjalny program).

    Program RS CRC służy do obliczania 2-bajtowej sumy kontrolnej. Nie trzeba przez to siedzieć przy kalkulatorze i mozolnie przeliczać sumę CRC każdej ramki. Rozwiązanie idealne, jeśli się chce zaimplementować tylko kilka ramek w swoim systemie.
    W perspektywie własnego programu (działającego dynamicznie), nie obejdzie się bez napisania własnych funkcji liczących CRC.
    Za kilka tygodni na naszej stronie powinien pojawić się artykuł lub cykl artykułów opisujących zastosowanie protokołu integracji.
    Załączniki:
    • INT-RS_crc.7z (142.29 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    Konto firmowe:
    E-SYSTEM Sp. z o.o.
    Czarnoleska 10, Zabagnie k. Wolbromia, 32-340 | Tel.: 32 XXX XX XX (Pokaż) | Strona WWW: https://www.montersi.pl
  • #7 13997726
    kamiKAC
    Poziom 11  
    Posty: 32
    Ocena: 1
    Witam

    Do zabawy w Integrację ze sterownikiem PLC proponuje na początek wyłączyć opcję "kodowanie integracji" w Satelu.

    Przykładowy program pod CODESYS (sterowniki WAGO/Beckhoff) można znaleźć tutaj http://www.edom-plc.pl/forum/index.php?topic=5.15

    Gwarantuję, że działa.

    Pozdrawiam
  • #8 14086199
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Postanowiłem trochę pogmerać z tą integracją i odniosłem pierwszy "sukces" :)

    Po wysłaniu z basha:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    Integra mi ładnie odpowiedziała.

    By dokładnie zobaczyć co wypluwa trzeba przekierować wyjćie do pliku np.
    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    W pliku powinna ukazać się między innymi nazwa użytkownika, którego hasło wysłaliśmy.
    Oczywiście pamiętamy by wpisać swoje hasło oraz dopełnić do 8 bajtów jeśli jest krótsze.
    W przykladzie jest 1234FFFF -te "efy" to dopełnienie.
    Hasło to 1234
    8A9B to suma kontrolna.
    By sobie potestować używajcie ten załączony powyżej programik do liczenia całej ramki. Przykładowo by dostać info o userze który ma hasło 4321 to IN wpisujemy:

    a otrzymujemy:
    FE FE E0 43 21 FF FF 88 BF FE 0D

    I to jest cala ramka.

    B.T.W. zna ktoś jakiś program na Windows, który by miał możliwość wysyłania hexów do IP:port? oprócz netcat? Najlepiej coś okienkowego.

    Aha jeśli nic nie otrzymamy po wysłaniu komendy to znaczy, że wyslaliśmy złą ramkę. Jakakolwiek odpowiedź będzie tylko w przypadku wysłania prawidłowej ramki.
  • #10 14086439
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Wielkie dzięki. Teraz jest o wiele latwiej. Szkoda jedynie, że nie da się widzieć przychodzących danych w hexie.

    Edit.
    Ok sorry da się podpatrywać w czystym hex. Super !!
  • #12 14086456
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    O właśnie sam doszedłem. Jeszcze raz dzięki.
    Myślę, że teraz co pierwsze będę próbował zrobić to wysyłanie maila w przypadku alarmu.
    To czego nie ma na integrach bez plusa, będzie można np. zrobić na routerze z Openwrt.
  • #13 14086473
    montersi.pl

    Poziom 16  
    Posty: 91
    Pomógł: 26
    Ocena: 26
    Tak, protokół umożliwia realizację kilku ciekawych rzeczy. Korzystanie z tego protokołu jest wygodne wtedy, kiedy napisze się swoje funkcje przeliczania sum kontrolnych.
    Już nie raz widziałem (nawet tutaj na forum) wrzucone kody do obliczania CRC. Te kody jednak nie implementowały w 100% poprawnego obliczania CRC. Np. nie wszyscy uwzględniają wzmiankę o "FE F0" w ramce (gdzie F0 występujące po FE nie bierze udziału w liczeniu CRC) - a to jest bardzo ważne. Należy więc napisać swoją funkcję, która o wszystko zadba.
    Konto firmowe:
    E-SYSTEM Sp. z o.o.
    Czarnoleska 10, Zabagnie k. Wolbromia, 32-340 | Tel.: 32 XXX XX XX (Pokaż) | Strona WWW: https://www.montersi.pl
  • #14 14087131
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Przydałby się mały programik bashowy pod linuxa w stylu tego, który wstawiłeś. Żeby można było jako argument wpisać polecenie, a na stdout otrzymać tekstową reprezentację odpowiedzi hexadecymalnej, która była by już bardzo łatwa do przeparsowania przez skrypty. Dla mnie już nic więcej by nie było potrzebne. Niestety sam nie potrafię tego napisać.
  • #15 14087145
    montersi.pl

    Poziom 16  
    Posty: 91
    Pomógł: 26
    Ocena: 26
    Skrypty pod linuksa to też nie moja mocna strona. Program, który wrzuciłem (od Satela) powinno się dać uruchomić pod linuksem (jakiś emulator wine). Chyba, że chodzi o wspomniany wcześniej OpenWRT.
    Konto firmowe:
    E-SYSTEM Sp. z o.o.
    Czarnoleska 10, Zabagnie k. Wolbromia, 32-340 | Tel.: 32 XXX XX XX (Pokaż) | Strona WWW: https://www.montersi.pl
  • #16 14089399
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Zrobiłem dla testu pierwszy skrypcik, który zwraca trochę info o centrali.
    Składnia: intver.sh <ip> <port>
    np. intver.sh 192.168.2.8 7094
    Oczywiście na porcie musi być załączona integracja
    Działa na powłoce bash, nie działa na ash.

    Próbuję działać dalej ale napotkałem problem.
    Satel ETHM-1 - jak zintegrować z własnym sterownikiem przez TCP?

    Według udostępnionego protokołu komenda 7F powinna zwrócić pięć bajtów a u mnie zwraca tylko trzy. Dlaczego?
    Może ktoś u siebie sprawdzić?

    Dobra wiem dlaczego.
    W zakładce test mode nie widać wszystkich danych.
    Wysyłanie i odbieranie w zakładce TCP Client działa OK.

    Poprawiłem nieco skrypt.
    [edit]
    Ostatecznie przeszedłem na php i napisałem kompletną obsługę ramek z liczeniem crc i zważaniem na bajty FE i F0 jeśli takie miały by się pojawić.
    Samo crc nie było dosyć trudne. Trudność polegała na tych właśnie nieszczęsnych dwóch bajtach.
    Teraz zostało tylko do zrobienia przetwarzanie danych. Przy okazji nauczyłem się php :)
    Załączniki:
    • intver.zip (939 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 14247893
    Luksystem
    Poziom 1  
    Posty: 1
    Witam,

    a mam takie pytanie. Potrzebuję wysłać po ethm komendę do satela, żeby dostać stan czujek, a potem wygrzebać z tego stan konkretnej jednej czujki. Czy jest to możliwe?

    Podobnie potrzebuję zazbroić alarm i mieć informację o zazbrojeniu i włamaniu.

    Z góry dziękuję za odpowiedzi.
  • #18 14248103
    montersi.pl

    Poziom 16  
    Posty: 91
    Pomógł: 26
    Ocena: 26
    Luksystem napisał:
    Potrzebuję wysłać po ethm komendę do satela, żeby dostać stan czujek, a potem wygrzebać z tego stan konkretnej jednej czujki. Czy jest to możliwe?

    Jasne, że jest to możliwe. W dokumentacji protokołu są opisane wszystkie możliwe komendy.

    Komenda odpytująca o stan wejść to 0x00. Uzupełniając to o bajty startu, końca, sumę kontrolną - finalna postać ramki odpytującej wygląda tak:
    {FE}{FE}{00}{D7}{E2}{FE}{0D}

    Potem zgodnie z dokumentacją otrzymujesz stosowną odpowiedź, np.:
    {FE}{FE}{00}{00}{01}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{74}{C8}{FE}{0D}

    gdzie:
    {00}{01}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}
    to stan wejść.
    I np. zwróć uwagę, że drugi bajt od lewej ma wartość 1, więc wejście nr9 jest naruszone (każdy bajt reprezentuje 8 wejść).
    Coś na wzór:

    # 8 7 6 5 4 3 2 1 # 16 15 14 13 12 11 10 9 # ...

    Odnośnie sterowania alarmem sprawa analogiczna. Wysyłasz ramkę załączającą czuwanie. Potem odpytujesz, czy czuwanie załączone. Zawsze trzeba zadawać pytanie w kierunku centrali. Centrala dobrowolnie nic sama nie wyśle (mówimy o trybie 2 protokołu, czyli integracja).
    Konto firmowe:
    E-SYSTEM Sp. z o.o.
    Czarnoleska 10, Zabagnie k. Wolbromia, 32-340 | Tel.: 32 XXX XX XX (Pokaż) | Strona WWW: https://www.montersi.pl
  • #19 14284687
    free_nsc
    Poziom 12  
    Posty: 31
    Ocena: 5
    @xury Pytanie, czy udalo CI sie cos stworzyc cos wiecej w Bashu czy przeszedles na PHP ?? Chcialbym przy uzyciu skryptu bash (lub LUA) dodac czujke temp. Satela ATD-100 jako wirtualne urzadzenia w Domoticz'u. Skrypt mialby odczytac wartosci z termometru poprzez ETHM-1 zwrocic wartosc postaci decymalnej, ktora chcialbym uzyc w Domoticzu. Dzieki Twojemu przykladowi potrafie odczytac te dane, jednak nie wiem jak to dalej wszystko skleic w calosc.

    Jesli sie powiedzie, to w nastepnym etapie umozliwi to integracje np stanow czujek PIR, kontaktronow etc.

    Czy ktos probowal cos takiego stworzyc w domoticzu?
  • #20 14284803
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Przeszedłem na php dlatego, że w bash'u nie potrafiłem policzyć crc.
    Jednak jeśli nie masz potrzeby liczenia crc to równie dobrze można odczytać temperaturę w bashu.
    Wartość temperatury to: (odczyt - 110 ) / 2
    Czyli od odczytanej wartości odejmujesz 110 i dzielisz przez 2.
    A i jeszcze jedno. Ja biorę pod odczyt tylko jeden bajt pomimo, że w teorii są to dwa bajty. Ale nie spodziewam się odczytać temperatury powyżej FF czyli 72,5 °C
    Wychodzi, że zakres na jednym bajcie to od 00 (-55 °C) do FF (72,5 °C)
    I taki zakres w zupełności mi wystarcza :)
    BTW.
    O istnieniu Domoticza nie wiedziałem. A jest też coś podobnego na malince - nettemp.
    A i jeszcze jedna sprawa. Początkowo czytałem ATD-100 co 10 minut i wszystko było ok. Po pewnym czasie zacząłem czytać z czujki co minutę i też przez kilka dni było OK, a potem temperatura zaczeła mi oscylować co każdy odczyt o pół stopnia.
    Czyli odczytuje i mam np. 21,5 po minucie mam 21,0, po następnej minucie znów 21,5 i tak dalej...
    Zaznaczam, że wcześniej tak nie było. Nie wiem czy to czujnik się uszkodził?
    Raczej nie przez to, że za często z niego czytam?
    Resetowałem i zmieniałem baterie. Nie pomogło.
  • #21 14286515
    free_nsc
    Poziom 12  
    Posty: 31
    Ocena: 5
    Dzieki za odpowiedz. Jesli chodzi o sam odczyt bez liczenia crc to rzeczywiscie narazie mozna na sztywno je policzyc, nawet przy kilku czujkach (bo mam ich 3 + 1 na zew) i podac parametr przy uruchomieniu. Formule od 110 tez udalo mi sie rozszyfrowac i tez mysle, ze odczyt z jednego bajtu wystarczy.

    Poszukujac informacji, natknalem sie sie na Twojego postana na nettemp i w ten sposob dowiedzialem sie o tym produkcie :) Przyznam, ze wyglada ciekawie, ale poki co chce zostac przy Domoticzu. Wiem, ze w LUA mozna uruchomic skrypt bash'owy tylko nie potrafie jeszcze dodac Termometru wirtualnego ze zmienna, ktorej wartosc mialaby byc przypisana ze zwroconego odczytu z Satela.

    Swoja droga, moze chcialbys podzielic sie swoim kodem php. Jestem ciekaw do jakiego stopnia chcesz zintegrowac RPi z Integra. Wiem, ze nie masz interferjsu, ale szukam inspiracji takze bylbym wdzieczny gdybys mogl sie podzielic swoim rozwiazaniem.

    PS. Co to czestotliwoscie odpytywania, nie jestem ekspertem aby stwierdzic czy zbyt czesta moglaby prowadzic do jej uszkodzenia. Wydaje mi sie, to niezbyt mozliwe bo ABAX zczytuje je nawet co 12sekund. Tak czy inaczej, dzieki za ostrzezenie przed zbyt czestym zczytywaniem ATD-100 poki sytuacja sie nie wyjasni pozostane przy 10min. :)
  • #22 14286677
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    Na razie to sam nie wiem co chcę zrobić. :) Puki co odczyty są zapisywane na pendrive w routerze z Openwrt i wyświetlane na przerobionym pod moje potrzeby skryptem kolegi bbarwika z forum eko.one.pl
    http://eko.one.pl/forum/viewtopic.php?id=7073
    Ciągle zastanawiam się nad udostępnianiem mojego skryptu. Mam kilka dylematów:
    Począwszy od tego, że skrypt jest nieco chaotyczny i nie skończony (i chyba nigdy nie będzie, bo zawsze będę coś poprawiał) do tego że zastanawiam się nad komercyjnym wykorzystaniem.
    Z drugiej strony jeśli bym go udostępnił za free to nie chciałbym, bo ktoś inny sprytny na tym zarabiał.
  • #23 14295647
    free_nsc
    Poziom 12  
    Posty: 31
    Ocena: 5
    xury napisał:

    A i jeszcze jedna sprawa. Początkowo czytałem ATD-100 co 10 minut i wszystko było ok. Po pewnym czasie zacząłem czytać z czujki co minutę i też przez kilka dni było OK, a potem temperatura zaczeła mi oscylować co każdy odczyt o pół stopnia.
    Czyli odczytuje i mam np. 21,5 po minucie mam 21,0, po następnej minucie znów 21,5 i tak dalej...
    Zaznaczam, że wcześniej tak nie było. Nie wiem czy to czujnik się uszkodził?
    Raczej nie przez to, że za często z niego czytam?
    Resetowałem i zmieniałem baterie. Nie pomogło.


    Uzywasz crontaba do ich uruchamiania? Jesli tak, to byc moze to jest powodem..

    Udalo mi sie zaimplementowac odczyt temperatur z 4 czujek ATD-100 poprzez osobny skrypt bash dla kazdej czujki temperatury. W Domoticzu stworzylem 4 wirtualne sensory i poszczegolne wskazania temp. aktualizuje uzywajac JSON API komenda curl.
    Skrypty uruchomilem recznie i czujki w domoticzu ozyly, wiec postanowilem dodac je do crontaba. Dodalem 4 wpisy uruchmiajace kazdy z osobna co 10 min... I co? Podczas pierwszych odczytow temperatury zaczely sie mieszac. Pojawily sie minusowe temperatury. Szybko zorientowalem sie, ze crontab uruchamia skrypty jednoczesnie zatem Integra zwraca zupelnie przypadkowe wartosci, lub tez nakladaja sie poprzez moje niedopatrzenie/brak doswiadczenia w kodowaniu w takim aspekcie.
    Rozwiazalem problem zmieniajac wpis crontaba na jedna linie rozdzielajac skrypty srednikiem ; dzieki czemu wykonywane sa po zakonczeniu poprzedniej akcji.
  • #24 14296024
    xury
    Specjalista automatyka domowa
    Posty: 7078
    Pomógł: 878
    Ocena: 1492
    U mnie nie może być mowy o przypadkowych danych. Od początku do końca jest kontrolowana crc zarówno przy wysyłaniu jak i przy odbieraniu każdej ramki. Nawet sobie tym głowy nie zajmuję, samo się liczy i sprawdza. Poza tym na razie mam tylko jeden czujnik.
  • #25 14703816
    marcin11
    Poziom 1  
    Posty: 1
    Mam pytanie do xury. Czy jesteś wstanie udostępnić swój kod pod php. Interesuje mnie tylko odczyt stanu czujek i liczenie crc. Mam centralke satela z ETHM-1 i zastanawiam się nad podłączeniem tego do RPI. Nie znam za bardzo php ale myślę, że jak będę miał podstawowy kod to uda mi się to ogarnąć. Jeżeli nie chcesz dzielić się kodem to może dasz jakieś wskazówki.
  • #26 14730438
    draftshaft
    Poziom 2  
    Posty: 2
    Witam wszystkich.
    Mam pytanie dotyczące wysyłania danych do centrali Integra 128-wrl poprzez moduł ethernetowy. Do transmisji ramek wykorzystuję wspomniany w temacie program Hercules.
    Odczytywanie danych z centrali działa prawidłowo, a kontrolowanie stanu (np. poprzez zmianę stanu wyjść) nie działa - brak odpowiedzi z centrali. Identyczna sytuacja jest w przypadku wysyłania ramek dotyczących zarządzania użytkownikami, np:

    FE FE E0 12 34 FF FF D8 C2 FE 0D - zakładając, że kod użytkownika to 1234.

    Czy ktoś miał podobny problem i wie jak go rozwiązać?
  • #27 14730493
    dariusz.bembenek
    Specjalista - Alarmy Stacjonarne
    Posty: 2141
    Pomógł: 455
    Ocena: 615
    A skąd taka ramka?
    Jeśli Twoja treść to: E0 12 34 FF FF
    To suma kontrolna wynosi: 8A 9B.
  • #28 14737060
    draftshaft
    Poziom 2  
    Posty: 2
    Dziękuję za odpowiedź - faktycznie, pomieszałem coś z sumą kontrolną.
  • #29 14762555
    szczukot
    Poziom 14  
    Posty: 826
    Pomógł: 6
    Ocena: 83
    No ja już od jednego dnia :) zabieram sie do napisania jakiejś komunikacji z centralką ale w C++.
    A tylko dlatego, że aktualnie do "ynreligentnego" domu uzywam program Domoticz, a to jest open source w c++.
    Więc dokleję tam ten moduł do komunikacji.
    Idea niby trudna nie jest, szczególnie aby uzyc tylko podstawowych komend (pobieranie stanu wejśc itp).
    Ale brak czasu może mnie załatwić :(

    Fantom
  • #30 14810505
    free_nsc
    Poziom 12  
    Posty: 31
    Ocena: 5
    szczukot napisał:
    No ja już od jednego dnia :) zabieram sie do napisania jakiejś komunikacji z centralką ale w C++.
    A tylko dlatego, że aktualnie do "ynreligentnego" domu uzywam program Domoticz, a to jest open source w c++.
    Więc dokleję tam ten moduł do komunikacji.
    Idea niby trudna nie jest, szczególnie aby uzyc tylko podstawowych komend (pobieranie stanu wejśc itp).
    Ale brak czasu może mnie załatwić :(

    Fantom


    Jestem ciekaw jak Twoj postep w pisaniu modulu do Domoticza? Ja tez od kilku miesiecy uzywam Domoticza, w bash'u odczytuje termperature z czujek Integry, a nastepnie przy uzyciu jSON'a aktualizuje wirtualne sensory temperatury w domoticzu. Podobnie zrobilem sterowanie wyjsciami niskopradowymi w integrze, ale przydalaby sie bardziej to rozbudowac i scislej zintegrowac.

Podsumowanie tematu

✨ Dyskusja dotyczy integracji centrali alarmowej Satel INTEGRA z własnym sterownikiem poprzez moduł ETHM-1 i protokół TCP na porcie 7094. Użytkownicy omawiają tryb 2 protokołu integracji, który umożliwia sterowanie i odczyt stanu systemu poprzez aktywne odpytywanie centrali, a nie tylko pasywne nasłuchiwanie. Kluczowym elementem komunikacji jest prawidłowe formatowanie ramek, w tym obliczanie dwubajtowej sumy kontrolnej CRC według dokumentacji Satela, z uwzględnieniem specjalnego traktowania bajtów 0xFE (wstawianie 0xF0 po 0xFE) oraz struktury ramki (początek FE FE, koniec FE 0D). Do testów polecany jest program Hercules, umożliwiający wysyłanie i odbieranie danych w formacie HEX.

Sterowanie wyjściami centrali realizuje się komendami 0x88 (załączanie) i 0x89 (wyłączanie), przy czym wyjścia muszą być odpowiednio skonfigurowane (typ przełącznik MONO lub BI, przypisanie do stref). Ramki sterujące wymagają poprawnego ustawienia bitów odpowiadających wyjściom oraz prawidłowego obliczenia CRC. Wysyłanie komend do uzbrojenia i rozbrojenia stref odbywa się przez komendy 0x80 i 0x81 z odpowiednim formatowaniem bajtów stref (4 bajty, najmłodszy bajt po lewej stronie, bity odpowiadają strefom). Odczyt stanu wejść i stref realizowany jest komendami 0x00, 0x02, 0x13, 0x17, 0x7F i innymi, z interpretacją bitów w odpowiedziach.

Wielu użytkowników podkreśla konieczność utrzymywania stałego połączenia TCP, aby nie tracić krótkotrwałych zmian stanów oraz unikać resetowania stanów po rozłączeniu. Moduł ETHM-1 obsługuje tylko jedno połączenie na raz, a próby podłączenia kolejnego skutkują komunikatem "Busy!", który należy obsłużyć w aplikacji.

Do obliczania sumy CRC dostępne są narzędzia, w tym nieoficjalne programy od Satela oraz przykładowe implementacje w PHP, Pythonie, C++ i Bascomie. Wskazano również na specyfikę protokołu dla manipulatorów LCD (wersja 1.12), który różni się od protokołu ETHM-1/INT-RS, m.in. długością sumy kontrolnej i zakresem funkcji.

W kontekście integracji z systemami automatyki domowej, szczególnie z Domoticzem, omawiano rozpoznawanie czujek temperatury ABAX (ATD-100, ATD-200) na podstawie nazwy czujki (np. zawierającej "ATD100") oraz sposoby odczytu temperatury i stanów. Wskazano na ograniczenia protokołu w zakresie odczytu temperatur (komenda 0x7D) i konieczność optymalizacji zapytań.

Poruszono także kwestie integracji z PLC Siemens S7-1200, gdzie podstawowe polecenia sterujące działają, ale odczyt stanów wymaga dalszych prac. Wspomniano o dostępnych na rynku konwerterach RS232 RS485 Modbus RTU, które umożliwiają integrację Satela z PLC poprzez standard Modbus, a także o problemach z jednoczesną komunikacją przez Ethernet i RS232.

Na koniec podano linki do otwartych projektów i skryptów do obsługi protokołu Satela w PHP, Pythonie i C#, które mogą stanowić bazę do dalszej integracji i automatyzacji.

Podsumowując, integracja Satel ETHM-1 z własnym sterownikiem przez TCP wymaga znajomości protokołu, prawidłowego formatowania ramek z uwzględnieniem CRC i znaków specjalnych, utrzymywania połączenia TCP, oraz odpowiedniej konfiguracji wyjść i stref w centrali. Dostępne są narzędzia i przykładowe implementacje ułatwiające realizację tego zadania, a także rozwiązania sprzętowe do integracji z PLC poprzez Modbus RTU.
Wygenerowane przez model językowy.
REKLAMA