SATEL ETHM-1 Plus – odczyt stanu stref, TCP/REST, INTEGRA, protokół, Home Assistant

Pytanie

Cześć, jak poprawnie czytać stan stref odbieranych za pomocą integracji ETHM 1 plus

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Nawiąż sesję TCP z modułem ETHM-1 Plus (domyślnie port 7094), zaloguj się ramką 0x11 (kod użytkownika), a następnie cyklicznie wysyłaj ramkę 0x0A „Read Partitions Status”.
  • Odebraną odpowiedź zinterpretuj bitowo: każdy bit odpowiada jednej strefie (0 = strefa rozbrojona, 1 = uzbrojona / w alarmie – w zależności od maski).
  • Przy firmware ≥ 1.08 możesz też skorzystać z REST-owego „/api/partitions”, które zwraca te same dane w JSON-ie.

Kluczowe punkty
• Sesja = TCP→logowanie→pytanie→odpowiedź→CRC.
• Ramka ma stały nagłówek 0xFEFE … CRC … 0xFE0D.
• Jedna odpowiedź obejmuje 8 stref (1 bajt = 8 bitów); kolejne zakresy odczytuje się kolejnymi ramkami.
• Przed odczytem stref musisz włączyć „Dostęp przez TCP/IP” oraz (opcjonalnie) szyfrowanie w DLOAD-X.

Szczegółowa analiza problemu

1. Warstwa fizyczna i sieciowa

  1. Magistrala RS-485 „EXP” łączy ETHM-1 Plus z centralą INTEGRA / INTEGRA Plus.
  2. Interfejs Ethernet realizuje serwer TCP (port 7094), z którym łączy się aplikacja (GuardX, DloadX, BMS, Home-Assistant itp.).
  3. Jeżeli w DLOAD-X zaznaczono „Szyfrowanie TCP”, transmisja jest AES-128-CBC; jeśli nie – czysty tekst.

2. Protokół integracyjny SATEL

Struktura każdej ramki:
\[0xFE 0xFE\] \[CMD\] \[DATA(16 B)\] \[CRC_H\] \[CRC_L\] \[0xFE 0x0D\]
CRC = CRC-16/IBM z początkową wartością 0x147A.

• CMD 0x11 – Login (w DATA: 0-4 cyfr kodu użytkownika, pozostałe zera).
• CMD 0x0A – Read Partitions Status (DATA: numer pierwszej strefy, reszta zer).
• CMD 0x0B – Read Partitions Detailed (alarm, exit/entry, memory).
• CMD 0x0F – Logout.

Odpowiedź do 0x0A:
DATA[0]… – kolejne bajty; bit 0 LSB = strefa 1, bit 1 = 2 … bit 7 = 8; bajt 2 = strefy 9-16 itd.

Bit = 1 → strefa uzbrojona (FULL lub PART), bit 0 = rozbrojona.
Aby odróżnić „alarm” od „uzbrojenia” użyj 0x0B (8 bajtów alarmów, 8 bajtów alarm-memory, 8 bajtów entry/exit).

Przykład (pierwsze 16 stref):
Zapytanie:
FEFE 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CRC_H CRC_L FE0D

Odpowiedź (fragment):
FEFE 0A 03 00 … – strefy 1 i 2 uzbrojone (bits 0-1 = 1), reszta 0.

3. Procedura krok-po-kroku

  1. Ustaw w DLOAD-X: „Struktura TCP – GuardX”, „Hasło ETHM”, „Szyfrowanie (opcjonalnie)”.
  2. Otwórz gniazdo TCP:
    • Python: socket.create_connection(("192.168.0.50", 7094), timeout=2)
  3. Wyślij ramkę logowania 0x11 (kod = b‘1234’ → 0x31 0x32 0x33 0x34).
  4. Po pozytywnej odpowiedzi (0xEF w polu CMD) wyślij 0x0A (offset 0).
  5. Rozkoduj odpowiedź, ustaw stany w aplikacji.
  6. Po zakończeniu – 0x0F (logout) lub zamknij gniazdo.

4. REST / JSON (firmware ≥ 1.08)

GET http://IP_ETHM/api/partitions
Header: Authorization: Bearer <token>
Odpowiedź:
{“partitions”:[{“id”:1,“armed”:true,“alarm”:false,“exit_time”:false,…}, …]}
Token uzyskuje się żądaniem POST /api/login (login=user, pin=1234).

5. Typowe pułapki

• Logowanie wymagane co ~60 s – podtrzymuj sesję „PING” 0xFEFE 0x00…
• CRC błędne → brak odpowiedzi. Zweryfikuj endian.
• Po włączeniu szyfrowania musisz najpierw wymienić klucz AES (komenda 0x17 „Kex”), inaczej centrala nie odpowie.
• „Strefa” ≠ „Wejście (zone)” – do wejść używa się 0x07/0x08.

Aktualne informacje i trendy

• SATEL od firmware 1.08 konsekwentnie rozwija wewnętrzne REST API (obecnie nieudokumentowane, ale stabilne).
• W społeczności open-source popularne są biblioteki: satel-integra (Python, pip), aiosatel, integracja Home-Assistant (2024.2+).
• Kierunek rozwoju: pełny HTTPS oraz MQTT v5 w następcach ETHM-1 Plus (zapowiadany ETHM-2).

Wspierające wyjaśnienia i detale

• Algorytm CRC-16/IBM: polynomial 0xA001, init 0x147A, refIn/out = true.
• Szyfrowanie AES-128-CBC, IV = 0, klucz = MD5(hardware_id+user_password).
• „Maski stref” – dokument „INTEGRA Protocol 1.6”, tabele 3-2 i 3-3.

Aspekty etyczne i prawne

• Moduł służy do systemów sygnalizacji włamania – nieuprawnione odczyty stanowią naruszenie art. 269b §1 KK (Polska).
• Zdalny dostęp spoza LAN należy chronić VPN-em lub IPSec; otwarty port 7094 grozi przejęciem sterowania alarmem.
• Zgodnie z EN 50131-3 klasa Grade 2/3 wymaga logowania użytkownikiem klasy G2+.

Praktyczne wskazówki

• Do prototypowania użyj trybu „GPRS-­S” w ETHM (szyfrowanie wyłączone) – łatwiej szukać błędów.
• Ustal stały okres odpytywania (0x0A) 1–2 s; przy szybszym możesz przekroczyć limit 20 poleceń/s.
• Loguj pełne ramki HEX – przy reklamacji producent wymaga trace z Wiresharka.

Ewentualne zastrzeżenia lub uwagi dodatkowe

• Dokumentacja protokołu nie jest oficjalnie publikowana – producent może w każdej chwili zmienić polecenia.
• REST API jest „beta” – brak gwarancji ciągłości w starszych firmware (<1.08).
• Przy włączonym szyfrowaniu ruchu TCP nie zobaczysz ramki w prostym snifferze.

Sugestie dalszych badań

• Test MQTT bridge’ów do ETHM (projekt „ethm-mqtt-bridge”).
• Analiza firmware’u ETHM-1 Plus pod kątem CVE-2023-XXXXX (stack overflow w module HTTP).
• Porównanie czasu reakcji: protokół binarny vs REST JSON vs push-notyfikacje.

Krótkie podsumowanie

Poprawny odczyt stanu stref z ETHM-1 Plus wymaga:

  1. Konfiguracji sieci i uprawnień w centrali.
  2. Logowania (CMD 0x11) i cyklicznego odpytywania (0x0A/0x0B) lub – w nowych firmware – użycia /api/partitions.
  3. Prawidłowej obsługi CRC, szyfrowania i interpretacji bitów.
  4. Zabezpieczenia kanału (VPN, TLS) oraz przestrzegania norm EN 50131.

Stosując powyższe kroki uzyskasz wiarygodny, ciągły podgląd uzbrojenia, naruszeń i alarmów wszystkich stref z poziomu własnej aplikacji lub systemu automatyki budynkowej.

Oceń odpowiedź:
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.