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
Connect the ETHM-1 Plus module terminals to the alarm panel terminals as follows:
ETHM-1 Plus
INTEGRA / INTEGRA Plus
PERFECTA 64 M / VERSA
+12V
+KPD
KPD
COM
COM
COM
DTM
DTM
DTA
CKM
CKM
CLK
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:
Open the DLOADX program (version 1.22.000 or newer)
Navigate to Structure → Hardware → Keypads
Select the ETHM-1 Plus module
In the Integration section, enable the Integration checkbox
Disable the Encrypted integration checkbox — TapHome connects via unencrypted integration
Note the Port number — default is 7094
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:
Panel
Minimum Firmware
INTEGRA Plus
1.06
INTEGRA
1.06
PERFECTA 64 M
Not supported for integration
VERSA
Not 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:
Panel
Maximum Zones
INTEGRA 24
24
INTEGRA 32
32
INTEGRA 64 / 64 Plus
64
INTEGRA 128 / 128 Plus
128
INTEGRA 256 Plus
128 (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
Verify that the Integration option is enabled in DLOADX and Encrypted integration is disabled
Confirm the correct IP address and port (default 7094)
Check that no other client (Home Assistant, openHAB, GUARDX) is already connected — only one client can connect to the integration port at a time
Verify the INTEGRA panel firmware is version 1.06 or newer
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
Confirm the module address is correctly set via ADDRESS jumper pins and does not conflict with other devices on the bus
Check the DTM, CKM, COM and +12V connections to the control panel
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 INTEGRAModule
Satel
Read (module)
SENDDATA(BYTECOLLECTION("00"));
Zone 1Reed ContactRead-only
booleanbitmask
Zone 1
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x01) > 0;
END
Zone 2Reed ContactRead-only
booleanbitmask
Zone 2
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x02) > 0;
END
Zone 3Reed ContactRead-only
booleanbitmask
Zone 3
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x04) > 0;
END
Zone 4Reed ContactRead-only
booleanbitmask
Zone 4
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x08) > 0;
END
Zone 5Reed ContactRead-only
booleanbitmask
Zone 5
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x10) > 0;
END
Zone 6Reed ContactRead-only
booleanbitmask
Zone 6
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x20) > 0;
END
Zone 7Reed ContactRead-only
booleanbitmask
Zone 7
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x40) > 0;
END
Zone 8Reed ContactRead-only
booleanbitmask
Zone 8
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,1) & 0x80) > 0;
END
Zone 9Reed ContactRead-only
booleanbitmask
Zone 9
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x01) > 0;
END
Zone 10Reed ContactRead-only
booleanbitmask
Zone 10
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x02) > 0;
END
Zone 11Reed ContactRead-only
booleanbitmask
Zone 11
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x04) > 0;
END
Zone 12Reed ContactRead-only
booleanbitmask
Zone 12
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x08) > 0;
END
Zone 13Reed ContactRead-only
booleanbitmask
Zone 13
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x10) > 0;
END
Zone 14Reed ContactRead-only
booleanbitmask
Zone 14
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x20) > 0;
END
Zone 15Reed ContactRead-only
booleanbitmask
Zone 15
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x40) > 0;
END
Zone 16Reed ContactRead-only
booleanbitmask
Zone 16
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,2) & 0x80) > 0;
END
Zone 17Reed ContactRead-only
booleanbitmask
Zone 17
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x01) > 0;
END
Zone 18Reed ContactRead-only
booleanbitmask
Zone 18
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x02) > 0;
END
Zone 19Reed ContactRead-only
booleanbitmask
Zone 19
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x04) > 0;
END
Zone 20Reed ContactRead-only
booleanbitmask
Zone 20
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x08) > 0;
END
Zone 21Reed ContactRead-only
booleanbitmask
Zone 21
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x10) > 0;
END
Zone 22Reed ContactRead-only
booleanbitmask
Zone 22
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x20) > 0;
END
Zone 23Reed ContactRead-only
booleanbitmask
Zone 23
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x40) > 0;
END
Zone 24Reed ContactRead-only
booleanbitmask
Zone 24
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,3) & 0x80) > 0;
END
Zone 25Reed ContactRead-only
booleanbitmask
Zone 25
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x01) > 0;
END
Zone 26Reed ContactRead-only
booleanbitmask
Zone 26
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x02) > 0;
END
Zone 27Reed ContactRead-only
booleanbitmask
Zone 27
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x04) > 0;
END
Zone 28Reed ContactRead-only
booleanbitmask
Zone 28
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x08) > 0;
END
Zone 29Reed ContactRead-only
booleanbitmask
Zone 29
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x10) > 0;
END
Zone 30Reed ContactRead-only
booleanbitmask
Zone 30
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x20) > 0;
END
Zone 31Reed ContactRead-only
booleanbitmask
Zone 31
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x40) > 0;
END
Zone 32Reed ContactRead-only
booleanbitmask
Zone 32
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,4) & 0x80) > 0;
END
Zone 33Reed ContactRead-only
booleanbitmask
Zone 33
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x01) > 0;
END
Zone 34Reed ContactRead-only
booleanbitmask
Zone 34
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x02) > 0;
END
Zone 35Reed ContactRead-only
booleanbitmask
Zone 35
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x04) > 0;
END
Zone 36Reed ContactRead-only
booleanbitmask
Zone 36
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x08) > 0;
END
Zone 37Reed ContactRead-only
booleanbitmask
Zone 37
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x10) > 0;
END
Zone 38Reed ContactRead-only
booleanbitmask
Zone 38
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x20) > 0;
END
Zone 39Reed ContactRead-only
booleanbitmask
Zone 39
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x40) > 0;
END
Zone 40Reed ContactRead-only
booleanbitmask
Zone 40
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,5) & 0x80) > 0;
END
Zone 41Reed ContactRead-only
booleanbitmask
Zone 41
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x01) > 0;
END
Zone 42Reed ContactRead-only
booleanbitmask
Zone 42
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x02) > 0;
END
Zone 43Reed ContactRead-only
booleanbitmask
Zone 43
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x04) > 0;
END
Zone 44Reed ContactRead-only
booleanbitmask
Zone 44
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x08) > 0;
END
Zone 45Reed ContactRead-only
booleanbitmask
Zone 45
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x10) > 0;
END
Zone 46Reed ContactRead-only
booleanbitmask
Zone 46
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x20) > 0;
END
Zone 47Reed ContactRead-only
booleanbitmask
Zone 47
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x40) > 0;
END
Zone 48Reed ContactRead-only
booleanbitmask
Zone 48
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,6) & 0x80) > 0;
END
Zone 49Reed ContactRead-only
booleanbitmask
Zone 49
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x01) > 0;
END
Zone 50Reed ContactRead-only
booleanbitmask
Zone 50
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x02) > 0;
END
Zone 51Reed ContactRead-only
booleanbitmask
Zone 51
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x04) > 0;
END
Zone 52Reed ContactRead-only
booleanbitmask
Zone 52
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x08) > 0;
END
Zone 53Reed ContactRead-only
booleanbitmask
Zone 53
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x10) > 0;
END
Zone 54Reed ContactRead-only
booleanbitmask
Zone 54
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x20) > 0;
END
Zone 55Reed ContactRead-only
booleanbitmask
Zone 55
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x40) > 0;
END
Zone 56Reed ContactRead-only
booleanbitmask
Zone 56
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,7) & 0x80) > 0;
END
Zone 57Reed ContactRead-only
booleanbitmask
Zone 57
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x01) > 0;
END
Zone 58Reed ContactRead-only
booleanbitmask
Zone 58
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x02) > 0;
END
Zone 59Reed ContactRead-only
booleanbitmask
Zone 59
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x04) > 0;
END
Zone 60Reed ContactRead-only
booleanbitmask
Zone 60
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x08) > 0;
END
Zone 61Reed ContactRead-only
booleanbitmask
Zone 61
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x10) > 0;
END
Zone 62Reed ContactRead-only
booleanbitmask
Zone 62
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x20) > 0;
END
Zone 63Reed ContactRead-only
booleanbitmask
Zone 63
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x40) > 0;
END
Zone 64Reed ContactRead-only
booleanbitmask
Zone 64
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,8) & 0x80) > 0;
END
Zone 65Reed ContactRead-only
booleanbitmask
Zone 65
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x01) > 0;
END
Zone 66Reed ContactRead-only
booleanbitmask
Zone 66
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x02) > 0;
END
Zone 67Reed ContactRead-only
booleanbitmask
Zone 67
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x04) > 0;
END
Zone 68Reed ContactRead-only
booleanbitmask
Zone 68
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x08) > 0;
END
Zone 69Reed ContactRead-only
booleanbitmask
Zone 69
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x10) > 0;
END
Zone 70Reed ContactRead-only
booleanbitmask
Zone 70
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x20) > 0;
END
Zone 71Reed ContactRead-only
booleanbitmask
Zone 71
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x40) > 0;
END
Zone 72Reed ContactRead-only
booleanbitmask
Zone 72
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,9) & 0x80) > 0;
END
Zone 73Reed ContactRead-only
booleanbitmask
Zone 73
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x01) > 0;
END
Zone 74Reed ContactRead-only
booleanbitmask
Zone 74
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x02) > 0;
END
Zone 75Reed ContactRead-only
booleanbitmask
Zone 75
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x04) > 0;
END
Zone 76Reed ContactRead-only
booleanbitmask
Zone 76
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x08) > 0;
END
Zone 77Reed ContactRead-only
booleanbitmask
Zone 77
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x10) > 0;
END
Zone 78Reed ContactRead-only
booleanbitmask
Zone 78
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x20) > 0;
END
Zone 79Reed ContactRead-only
booleanbitmask
Zone 79
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x40) > 0;
END
Zone 80Reed ContactRead-only
booleanbitmask
Zone 80
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,10) & 0x80) > 0;
END
Zone 81Reed ContactRead-only
booleanbitmask
Zone 81
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x01) > 0;
END
Zone 82Reed ContactRead-only
booleanbitmask
Zone 82
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x02) > 0;
END
Zone 83Reed ContactRead-only
booleanbitmask
Zone 83
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x04) > 0;
END
Zone 84Reed ContactRead-only
booleanbitmask
Zone 84
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x08) > 0;
END
Zone 85Reed ContactRead-only
booleanbitmask
Zone 85
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x10) > 0;
END
Zone 86Reed ContactRead-only
booleanbitmask
Zone 86
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x20) > 0;
END
Zone 87Reed ContactRead-only
booleanbitmask
Zone 87
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x40) > 0;
END
Zone 88Reed ContactRead-only
booleanbitmask
Zone 88
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,11) & 0x80) > 0;
END
Zone 89Reed ContactRead-only
booleanbitmask
Zone 89
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x01) > 0;
END
Zone 90Reed ContactRead-only
booleanbitmask
Zone 90
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x02) > 0;
END
Zone 91Reed ContactRead-only
booleanbitmask
Zone 91
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x04) > 0;
END
Zone 92Reed ContactRead-only
booleanbitmask
Zone 92
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x08) > 0;
END
Zone 93Reed ContactRead-only
booleanbitmask
Zone 93
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x10) > 0;
END
Zone 94Reed ContactRead-only
booleanbitmask
Zone 94
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x20) > 0;
END
Zone 95Reed ContactRead-only
booleanbitmask
Zone 95
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x40) > 0;
END
Zone 96Reed ContactRead-only
booleanbitmask
Zone 96
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,12) & 0x80) > 0;
END
Zone 97Reed ContactRead-only
booleanbitmask
Zone 97
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x01) > 0;
END
Zone 98Reed ContactRead-only
booleanbitmask
Zone 98
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x02) > 0;
END
Zone 99Reed ContactRead-only
booleanbitmask
Zone 99
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x04) > 0;
END
Zone 100Reed ContactRead-only
booleanbitmask
Zone 100
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x08) > 0;
END
Zone 101Reed ContactRead-only
booleanbitmask
Zone 101
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x10) > 0;
END
Zone 102Reed ContactRead-only
booleanbitmask
Zone 102
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x20) > 0;
END
Zone 103Reed ContactRead-only
booleanbitmask
Zone 103
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x40) > 0;
END
Zone 104Reed ContactRead-only
booleanbitmask
Zone 104
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,13) & 0x80) > 0;
END
Zone 105Reed ContactRead-only
booleanbitmask
Zone 105
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x01) > 0;
END
Zone 106Reed ContactRead-only
booleanbitmask
Zone 106
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x02) > 0;
END
Zone 107Reed ContactRead-only
booleanbitmask
Zone 107
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x04) > 0;
END
Zone 108Reed ContactRead-only
booleanbitmask
Zone 108
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x08) > 0;
END
Zone 109Reed ContactRead-only
booleanbitmask
Zone 109
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x10) > 0;
END
Zone 110Reed ContactRead-only
booleanbitmask
Zone 110
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x20) > 0;
END
Zone 111Reed ContactRead-only
booleanbitmask
Zone 111
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x40) > 0;
END
Zone 112Reed ContactRead-only
booleanbitmask
Zone 112
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,14) & 0x80) > 0;
END
Zone 113Reed ContactRead-only
booleanbitmask
Zone 113
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x01) > 0;
END
Zone 114Reed ContactRead-only
booleanbitmask
Zone 114
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x02) > 0;
END
Zone 115Reed ContactRead-only
booleanbitmask
Zone 115
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x04) > 0;
END
Zone 116Reed ContactRead-only
booleanbitmask
Zone 116
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x08) > 0;
END
Zone 117Reed ContactRead-only
booleanbitmask
Zone 117
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x10) > 0;
END
Zone 118Reed ContactRead-only
booleanbitmask
Zone 118
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x20) > 0;
END
Zone 119Reed ContactRead-only
booleanbitmask
Zone 119
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x40) > 0;
END
Zone 120Reed ContactRead-only
booleanbitmask
Zone 120
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,15) & 0x80) > 0;
END
Zone 121Reed ContactRead-only
booleanbitmask
Zone 121
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x01) > 0;
END
Zone 122Reed ContactRead-only
booleanbitmask
Zone 122
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x02) > 0;
END
Zone 123Reed ContactRead-only
booleanbitmask
Zone 123
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x04) > 0;
END
Zone 124Reed ContactRead-only
booleanbitmask
Zone 124
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x08) > 0;
END
Zone 125Reed ContactRead-only
booleanbitmask
Zone 125
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x10) > 0;
END
Zone 126Reed ContactRead-only
booleanbitmask
Zone 126
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x20) > 0;
END
Zone 127Reed ContactRead-only
booleanbitmask
Zone 127
Listener
VAR cmd := GETAT(RECEIVEDBYTES,0);
IF(cmd = 0)
Rc := (GETAT(RECEIVEDBYTES,16) & 0x40) > 0;
END
Zone 128Reed ContactRead-only
booleanbitmask
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