TapHome

Satel ETHM-1 Plus

Packet Parser → TCP
Submitted by
Last updated: 03. 2026
Satel ETHM-1 Plus

The Satel ETHM-1 Plus is an Ethernet communication module that connects Satel alarm control panels to a TCP/IP network. TapHome communicates with the module over TCP using the Satel open integration protocol on port 7094 (default). The module acts as a network gateway between TapHome and the alarm panel.

The template provides read-only monitoring of up to 128 alarm zones. Each zone maps to a reed contact device that reports whether the zone is violated (open) or normal (closed). This covers door/window sensors, motion detectors, and any other sensor types assigned to zones in the alarm system.

Hardware connection

The ETHM-1 Plus module connects to the alarm control panel via the communication bus (DTM and CKM data/clock lines) and to the local network via a standard Ethernet cable (RJ-45, 100Base-TX).

Wiring to alarm panel
Wiring diagram showing ETHM-1 Plus connection to INTEGRA/INTEGRA Plus and PERFECTA 64 M/VERSA control panels via DTM, CKM, COM and power terminals

Connect the ETHM-1 Plus module terminals to the alarm panel terminals as follows:

ETHM-1 PlusINTEGRA / INTEGRA PlusPERFECTA 64 M / VERSA
+12V+KPDKPD
COMCOMCOM
DTMDTMDTA
CKMCKMCLK

Use an unshielded non-twisted cable for the bus connection. If twisted-pair cable is used, the CKM (clock) and DTM (data) signals must not be sent through the same twisted pair.

Module address

Set the module address using the ADDRESS jumper pins on the board:

  • INTEGRA 24 / INTEGRA 32: address 0 to 3
  • Other INTEGRA / INTEGRA Plus: address 0 to 7
  • PERFECTA 64 M: address 6
  • VERSA: address 4 (no keypad with address 4 may be connected)

The address must be different from any other device on the keypad bus.

Ethernet connection

Connect the module to the local network using a standard Ethernet cable (100Base-TX). The module supports DHCP for automatic IP assignment or manual static IP configuration.

The module must not be connected directly to a public network (MAN, WAN). Always use a router or xDSL modem. Install the module in the same enclosure as the control panel.

Configuration

Enabling the integration protocol

The integration protocol must be enabled in the DLOADX installer program before TapHome can connect:

  1. Open the DLOADX program (version 1.22.000 or newer)
  2. Navigate to StructureHardwareKeypads
  3. Select the ETHM-1 Plus module
  4. In the Integration section, enable the Integration checkbox
  5. Disable the Encrypted integration checkbox — TapHome connects via unencrypted integration
  6. Note the Port number — default is 7094
  7. Save the configuration to the control panel

Encrypted integration is not supported. The “Encrypted integration” option must remain disabled in DLOADX.

Network configuration

The module IP address can be found or configured in DLOADX under the Network Settings section of the ETHM-1 Plus module. If DHCP is enabled, the IP is assigned automatically. The current IP can also be read from the LCD keypad using the IP/MAC/IMEI/ID user function in the TESTS submenu.

Assign a static IP address or create a DHCP reservation for the ETHM-1 Plus module. A changing IP address will break the TapHome connection.

Compatible alarm panels

The integration protocol requires specific firmware versions:

PanelMinimum Firmware
INTEGRA Plus1.06
INTEGRA1.06
PERFECTA 64 MNot supported for integration
VERSANot supported for integration

The integration protocol is only available on INTEGRA Plus and INTEGRA panels. PERFECTA 64 M and VERSA panels support the ETHM-1 Plus module for remote programming and mobile app access, but do not support the open integration protocol used by TapHome.

Device capabilities

Zone monitoring

The template monitors 128 alarm zones as individual reed contact devices. Each zone reports a boolean state:

  • Violated (open) — the zone sensor has been triggered (door opened, motion detected, etc.)
  • Normal (closed) — the zone sensor is in its resting state

The zone states are received as a 16-byte bitmask. TapHome sends a binary command (0x00) and the alarm panel responds with zone violation states packed as bits — zones 1-8 in byte 1, zones 9-16 in byte 2, and so on up to zones 121-128 in byte 16.

The actual number of usable zones depends on the alarm panel model:

PanelMaximum Zones
INTEGRA 2424
INTEGRA 3232
INTEGRA 64 / 64 Plus64
INTEGRA 128 / 128 Plus128
INTEGRA 256 Plus128 (template limit)

Zones beyond the panel’s capacity will remain in the normal (closed) state. After importing the template, rename each zone device in TapHome to match its function in the alarm system (e.g., “Zone 1” → “Front Door”, “Zone 2” → “Living Room Motion”).

Additional capabilities

The Satel INTEGRA alarm system also supports partition arming/disarming, output control (sirens, lights), zone tamper and alarm states, zone bypass management, system trouble reporting, event log access, roller shutter control, and wireless temperature sensor readings (ATD-100). These capabilities are available through the integration protocol and can be added in a future template update.

Troubleshooting

TapHome cannot connect to the module
  1. Verify that the Integration option is enabled in DLOADX and Encrypted integration is disabled
  2. Confirm the correct IP address and port (default 7094)
  3. Check that no other client (Home Assistant, openHAB, GUARDX) is already connected — only one client can connect to the integration port at a time
  4. Verify the INTEGRA panel firmware is version 1.06 or newer
  5. Check the ETHM-1 Plus module firmware — version 2.00 or newer is recommended for integration
Connection drops after ~25 seconds

The ETHM-1 Plus (firmware v2.03+) disconnects clients after 25 seconds of inactivity. Ensure the TapHome polling interval is shorter than 25 seconds.

Module not visible in DLOADX
  1. Confirm the module address is correctly set via ADDRESS jumper pins and does not conflict with other devices on the bus
  2. Check the DTM, CKM, COM and +12V connections to the control panel
  3. Verify the PWR/LOG LED is lit (power OK) and the BUS LED is blinking (data exchange active)
Wrong IP address after DHCP renewal

If the module uses DHCP and the router assigns a new IP, TapHome will lose connectivity. Set a static IP in DLOADX or configure a DHCP reservation on the router.

After 3 consecutive failed connection attempts with an incorrect key, the module stops responding for approximately 20 minutes from that IP address. Wait for the lockout to expire or restart the module.

Available devices

Satel INTEGRA Module

Satel

Read (module)
SENDDATA(BYTECOLLECTION("00"));
Zone 1 Reed Contact Read-only
boolean bitmask

Zone 1

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x01) > 0;
END
Zone 2 Reed Contact Read-only
boolean bitmask

Zone 2

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x02) > 0;
END
Zone 3 Reed Contact Read-only
boolean bitmask

Zone 3

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x04) > 0;
END
Zone 4 Reed Contact Read-only
boolean bitmask

Zone 4

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x08) > 0;
END
Zone 5 Reed Contact Read-only
boolean bitmask

Zone 5

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x10) > 0;
END
Zone 6 Reed Contact Read-only
boolean bitmask

Zone 6

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x20) > 0;
END
Zone 7 Reed Contact Read-only
boolean bitmask

Zone 7

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x40) > 0;
END
Zone 8 Reed Contact Read-only
boolean bitmask

Zone 8

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,1) & 0x80) > 0;
END
Zone 9 Reed Contact Read-only
boolean bitmask

Zone 9

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x01) > 0;
END
Zone 10 Reed Contact Read-only
boolean bitmask

Zone 10

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x02) > 0;
END
Zone 11 Reed Contact Read-only
boolean bitmask

Zone 11

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x04) > 0;
END
Zone 12 Reed Contact Read-only
boolean bitmask

Zone 12

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x08) > 0;
END
Zone 13 Reed Contact Read-only
boolean bitmask

Zone 13

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x10) > 0;
END
Zone 14 Reed Contact Read-only
boolean bitmask

Zone 14

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x20) > 0;
END
Zone 15 Reed Contact Read-only
boolean bitmask

Zone 15

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x40) > 0;
END
Zone 16 Reed Contact Read-only
boolean bitmask

Zone 16

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,2) & 0x80) > 0;
END
Zone 17 Reed Contact Read-only
boolean bitmask

Zone 17

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x01) > 0;
END
Zone 18 Reed Contact Read-only
boolean bitmask

Zone 18

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x02) > 0;
END
Zone 19 Reed Contact Read-only
boolean bitmask

Zone 19

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x04) > 0;
END
Zone 20 Reed Contact Read-only
boolean bitmask

Zone 20

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x08) > 0;
END
Zone 21 Reed Contact Read-only
boolean bitmask

Zone 21

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x10) > 0;
END
Zone 22 Reed Contact Read-only
boolean bitmask

Zone 22

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x20) > 0;
END
Zone 23 Reed Contact Read-only
boolean bitmask

Zone 23

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x40) > 0;
END
Zone 24 Reed Contact Read-only
boolean bitmask

Zone 24

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,3) & 0x80) > 0;
END
Zone 25 Reed Contact Read-only
boolean bitmask

Zone 25

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x01) > 0;
END
Zone 26 Reed Contact Read-only
boolean bitmask

Zone 26

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x02) > 0;
END
Zone 27 Reed Contact Read-only
boolean bitmask

Zone 27

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x04) > 0;
END
Zone 28 Reed Contact Read-only
boolean bitmask

Zone 28

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x08) > 0;
END
Zone 29 Reed Contact Read-only
boolean bitmask

Zone 29

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x10) > 0;
END
Zone 30 Reed Contact Read-only
boolean bitmask

Zone 30

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x20) > 0;
END
Zone 31 Reed Contact Read-only
boolean bitmask

Zone 31

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x40) > 0;
END
Zone 32 Reed Contact Read-only
boolean bitmask

Zone 32

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,4) & 0x80) > 0;
END
Zone 33 Reed Contact Read-only
boolean bitmask

Zone 33

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x01) > 0;
END
Zone 34 Reed Contact Read-only
boolean bitmask

Zone 34

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x02) > 0;
END
Zone 35 Reed Contact Read-only
boolean bitmask

Zone 35

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x04) > 0;
END
Zone 36 Reed Contact Read-only
boolean bitmask

Zone 36

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x08) > 0;
END
Zone 37 Reed Contact Read-only
boolean bitmask

Zone 37

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x10) > 0;
END
Zone 38 Reed Contact Read-only
boolean bitmask

Zone 38

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x20) > 0;
END
Zone 39 Reed Contact Read-only
boolean bitmask

Zone 39

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x40) > 0;
END
Zone 40 Reed Contact Read-only
boolean bitmask

Zone 40

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,5) & 0x80) > 0;
END
Zone 41 Reed Contact Read-only
boolean bitmask

Zone 41

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x01) > 0;
END
Zone 42 Reed Contact Read-only
boolean bitmask

Zone 42

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x02) > 0;
END
Zone 43 Reed Contact Read-only
boolean bitmask

Zone 43

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x04) > 0;
END
Zone 44 Reed Contact Read-only
boolean bitmask

Zone 44

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x08) > 0;
END
Zone 45 Reed Contact Read-only
boolean bitmask

Zone 45

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x10) > 0;
END
Zone 46 Reed Contact Read-only
boolean bitmask

Zone 46

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x20) > 0;
END
Zone 47 Reed Contact Read-only
boolean bitmask

Zone 47

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x40) > 0;
END
Zone 48 Reed Contact Read-only
boolean bitmask

Zone 48

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,6) & 0x80) > 0;
END
Zone 49 Reed Contact Read-only
boolean bitmask

Zone 49

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x01) > 0;
END
Zone 50 Reed Contact Read-only
boolean bitmask

Zone 50

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x02) > 0;
END
Zone 51 Reed Contact Read-only
boolean bitmask

Zone 51

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x04) > 0;
END
Zone 52 Reed Contact Read-only
boolean bitmask

Zone 52

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x08) > 0;
END
Zone 53 Reed Contact Read-only
boolean bitmask

Zone 53

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x10) > 0;
END
Zone 54 Reed Contact Read-only
boolean bitmask

Zone 54

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x20) > 0;
END
Zone 55 Reed Contact Read-only
boolean bitmask

Zone 55

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x40) > 0;
END
Zone 56 Reed Contact Read-only
boolean bitmask

Zone 56

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,7) & 0x80) > 0;
END
Zone 57 Reed Contact Read-only
boolean bitmask

Zone 57

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x01) > 0;
END
Zone 58 Reed Contact Read-only
boolean bitmask

Zone 58

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x02) > 0;
END
Zone 59 Reed Contact Read-only
boolean bitmask

Zone 59

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x04) > 0;
END
Zone 60 Reed Contact Read-only
boolean bitmask

Zone 60

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x08) > 0;
END
Zone 61 Reed Contact Read-only
boolean bitmask

Zone 61

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x10) > 0;
END
Zone 62 Reed Contact Read-only
boolean bitmask

Zone 62

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x20) > 0;
END
Zone 63 Reed Contact Read-only
boolean bitmask

Zone 63

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x40) > 0;
END
Zone 64 Reed Contact Read-only
boolean bitmask

Zone 64

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,8) & 0x80) > 0;
END
Zone 65 Reed Contact Read-only
boolean bitmask

Zone 65

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x01) > 0;
END
Zone 66 Reed Contact Read-only
boolean bitmask

Zone 66

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x02) > 0;
END
Zone 67 Reed Contact Read-only
boolean bitmask

Zone 67

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x04) > 0;
END
Zone 68 Reed Contact Read-only
boolean bitmask

Zone 68

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x08) > 0;
END
Zone 69 Reed Contact Read-only
boolean bitmask

Zone 69

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x10) > 0;
END
Zone 70 Reed Contact Read-only
boolean bitmask

Zone 70

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x20) > 0;
END
Zone 71 Reed Contact Read-only
boolean bitmask

Zone 71

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x40) > 0;
END
Zone 72 Reed Contact Read-only
boolean bitmask

Zone 72

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,9) & 0x80) > 0;
END
Zone 73 Reed Contact Read-only
boolean bitmask

Zone 73

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x01) > 0;
END
Zone 74 Reed Contact Read-only
boolean bitmask

Zone 74

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x02) > 0;
END
Zone 75 Reed Contact Read-only
boolean bitmask

Zone 75

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x04) > 0;
END
Zone 76 Reed Contact Read-only
boolean bitmask

Zone 76

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x08) > 0;
END
Zone 77 Reed Contact Read-only
boolean bitmask

Zone 77

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x10) > 0;
END
Zone 78 Reed Contact Read-only
boolean bitmask

Zone 78

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x20) > 0;
END
Zone 79 Reed Contact Read-only
boolean bitmask

Zone 79

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x40) > 0;
END
Zone 80 Reed Contact Read-only
boolean bitmask

Zone 80

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,10) & 0x80) > 0;
END
Zone 81 Reed Contact Read-only
boolean bitmask

Zone 81

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x01) > 0;
END
Zone 82 Reed Contact Read-only
boolean bitmask

Zone 82

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x02) > 0;
END
Zone 83 Reed Contact Read-only
boolean bitmask

Zone 83

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x04) > 0;
END
Zone 84 Reed Contact Read-only
boolean bitmask

Zone 84

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x08) > 0;
END
Zone 85 Reed Contact Read-only
boolean bitmask

Zone 85

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x10) > 0;
END
Zone 86 Reed Contact Read-only
boolean bitmask

Zone 86

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x20) > 0;
END
Zone 87 Reed Contact Read-only
boolean bitmask

Zone 87

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x40) > 0;
END
Zone 88 Reed Contact Read-only
boolean bitmask

Zone 88

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,11) & 0x80) > 0;
END
Zone 89 Reed Contact Read-only
boolean bitmask

Zone 89

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x01) > 0;
END
Zone 90 Reed Contact Read-only
boolean bitmask

Zone 90

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x02) > 0;
END
Zone 91 Reed Contact Read-only
boolean bitmask

Zone 91

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x04) > 0;
END
Zone 92 Reed Contact Read-only
boolean bitmask

Zone 92

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x08) > 0;
END
Zone 93 Reed Contact Read-only
boolean bitmask

Zone 93

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x10) > 0;
END
Zone 94 Reed Contact Read-only
boolean bitmask

Zone 94

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x20) > 0;
END
Zone 95 Reed Contact Read-only
boolean bitmask

Zone 95

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x40) > 0;
END
Zone 96 Reed Contact Read-only
boolean bitmask

Zone 96

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,12) & 0x80) > 0;
END
Zone 97 Reed Contact Read-only
boolean bitmask

Zone 97

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x01) > 0;
END
Zone 98 Reed Contact Read-only
boolean bitmask

Zone 98

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x02) > 0;
END
Zone 99 Reed Contact Read-only
boolean bitmask

Zone 99

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x04) > 0;
END
Zone 100 Reed Contact Read-only
boolean bitmask

Zone 100

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x08) > 0;
END
Zone 101 Reed Contact Read-only
boolean bitmask

Zone 101

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x10) > 0;
END
Zone 102 Reed Contact Read-only
boolean bitmask

Zone 102

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x20) > 0;
END
Zone 103 Reed Contact Read-only
boolean bitmask

Zone 103

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x40) > 0;
END
Zone 104 Reed Contact Read-only
boolean bitmask

Zone 104

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,13) & 0x80) > 0;
END
Zone 105 Reed Contact Read-only
boolean bitmask

Zone 105

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x01) > 0;
END
Zone 106 Reed Contact Read-only
boolean bitmask

Zone 106

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x02) > 0;
END
Zone 107 Reed Contact Read-only
boolean bitmask

Zone 107

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x04) > 0;
END
Zone 108 Reed Contact Read-only
boolean bitmask

Zone 108

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x08) > 0;
END
Zone 109 Reed Contact Read-only
boolean bitmask

Zone 109

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x10) > 0;
END
Zone 110 Reed Contact Read-only
boolean bitmask

Zone 110

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x20) > 0;
END
Zone 111 Reed Contact Read-only
boolean bitmask

Zone 111

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x40) > 0;
END
Zone 112 Reed Contact Read-only
boolean bitmask

Zone 112

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,14) & 0x80) > 0;
END
Zone 113 Reed Contact Read-only
boolean bitmask

Zone 113

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x01) > 0;
END
Zone 114 Reed Contact Read-only
boolean bitmask

Zone 114

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x02) > 0;
END
Zone 115 Reed Contact Read-only
boolean bitmask

Zone 115

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x04) > 0;
END
Zone 116 Reed Contact Read-only
boolean bitmask

Zone 116

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x08) > 0;
END
Zone 117 Reed Contact Read-only
boolean bitmask

Zone 117

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x10) > 0;
END
Zone 118 Reed Contact Read-only
boolean bitmask

Zone 118

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x20) > 0;
END
Zone 119 Reed Contact Read-only
boolean bitmask

Zone 119

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x40) > 0;
END
Zone 120 Reed Contact Read-only
boolean bitmask

Zone 120

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,15) & 0x80) > 0;
END
Zone 121 Reed Contact Read-only
boolean bitmask

Zone 121

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x01) > 0;
END
Zone 122 Reed Contact Read-only
boolean bitmask

Zone 122

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x02) > 0;
END
Zone 123 Reed Contact Read-only
boolean bitmask

Zone 123

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x04) > 0;
END
Zone 124 Reed Contact Read-only
boolean bitmask

Zone 124

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x08) > 0;
END
Zone 125 Reed Contact Read-only
boolean bitmask

Zone 125

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x10) > 0;
END
Zone 126 Reed Contact Read-only
boolean bitmask

Zone 126

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x20) > 0;
END
Zone 127 Reed Contact Read-only
boolean bitmask

Zone 127

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x40) > 0;
END
Zone 128 Reed Contact Read-only
boolean bitmask

Zone 128

Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);

IF(cmd = 0)
   Rc := (GETAT(RECEIVEDBYTES,16) & 0x80) > 0;
END
Connection: Packet Parser → TCP
Possible improvements (10)
  • Partition Control — Arm/disarm partitions — supported by HA and openHAB via integration protocol, not implemented in TapHome template
  • Output Control — Control mono/bistable outputs (switches, sirens) — requires user code authentication
  • Zone Tamper State — Zone tamper detection channel, available in openHAB binding
  • Zone Alarm State — Zone alarm state (separate from violation), available in openHAB binding
  • Zone Bypass State — Zone bypass status, available in openHAB binding
  • System Troubles — Active trouble indicator and trouble memory, available via system thing
  • System Date/Time — System clock synchronization channel
  • Event Log — Alarm event history with timestamps and descriptions
  • Roller Shutter — Dual-output roller shutter control via dedicated thing type
  • Wireless Temperature Sensor (ATD-100) — Temperature readings from ATD-100 wireless detectors, with battery and communication status

Sources