Skip to main content

Envisalink EVL-4 (DSC PowerSeries)

The Envisalink EVL-4 is a small network module (made by Eyez-On) that wires onto a DSC PowerSeries alarm panel's keybus and exposes the panel over the LAN. GEM talks to it using DSC's TPI (Third Party Interface) protocol over TCP port 4025. One GEM device represents the whole panel; from there GEM can arm and disarm partitions, watch each panel zone go open/closed/in-alarm, and surface panel trouble conditions (AC loss, low battery, bell fault, tamper).

This is a local integration — GEM connects straight to the EVL-4 on the building network, with no cloud account involved. The module keeps the connection alive with a poll every few seconds and reconnects on its own if the link drops.

note

This driver targets the DSC panel family (PowerSeries / PowerSeries Neo) behind an EVL-4. The EVL-4 also has a Honeywell/Vista variant; this driver speaks the DSC TPI dialect, so pair it with a DSC panel.

What you get

  • Arm / Disarm by partition: arm away, arm stay (home), and disarm, issued from GEM as device commands you can put on a UI button, a macro, or a trigger.
  • Live zone state. Each panel zone you create in GEM tracks its real-time condition — open, closed, alarm, fault, or tamper — as the panel reports events.
  • Partition status feedback. The panel's armed/disarmed/exit-delay/entry-delay/alarm state is published back onto the device, so the homeowner control and your automations can react to it.
  • Trouble monitoring. AC-power loss, low panel battery, bell trouble, and system tamper are published as on/off device attributes the moment the panel raises or clears them.

Prerequisites

  • An Envisalink EVL-4 installed on a DSC PowerSeries panel's keybus and powered up, with the panel programming healthy (a working PC-Link/keybus connection).
  • The EVL-4's TPI password, set in the EVL-4's own web interface — not the DSC installer code. The factory default is user; change it before deploying.
  • A reachable IP address for the module. Give it a DHCP reservation (or a static IP) so it does not move — GEM connects to it by address.
  • Network access from the GEM server to the EVL-4 on TCP 4025.
  • The Security subsystem (it ships by default, labeled Security). Panel zones live under it, and the built-in homeowner Security control looks here for the panel device.
TPI password vs. installer code

Two different secrets are easy to confuse. The TPI password is local to the EVL-4 and is what GEM sends to log in. The user/installer codes are programmed into the DSC panel and are what disarm needs. Get the TPI password from the EVL-4 web page; get the disarm user code from the panel programming.

Setup

1. Add the device

  1. Open Devices and add a new device with the driver set to Envisalink EVL-4.
  2. Fill in the connection fields:
    • EVL-4 IP Address — the module's IP (for example 192.168.1.50).
    • TPI Password — the password from the EVL-4 web UI. Stored encrypted.
    • TPI Port — leave at the default 4025 unless you changed it on the module.
    • Partition Count / Zone Count — optional. These are planning hints describing how many partitions and zones the panel has; the driver tracks whatever the panel actually reports, so they don't change behavior. Fill them in for documentation if you like.
  3. Save and enable the device. GEM connects to the module, logs in with the TPI password, and begins receiving panel events.

2. Point the Security subsystem at the panel

So the homeowner Security control and the standard security workflow find the panel:

  1. Open Subsystems and edit Security.
  2. Set its Device to the Envisalink EVL-4 you just added.
  3. Save.

The subsystem's Device is how GEM resolves "the security panel" for the homeowner control and for any security zone that doesn't name a device of its own.

3. Create a zone for each panel zone

The driver does not auto-create zones — you add them so GEM knows the friendly name for each panel zone and where to publish its state:

  1. Open Zones and add a zone under the Security subsystem.
  2. Set its Address to the panel zone number (the integer the DSC panel uses — 1, 2, 3, …). This is the link between a TPI zone event and the GEM zone.
  3. Give it a clear Label (for example Front Door, Kitchen Motion). The homeowner control groups zones into Doors, Windows, Motion, Smoke, and Water by matching keywords in the label, so naming a motion sensor with "motion" or a door with "door" puts it in the right group.
  4. Leave the zone's Device blank to inherit the Security subsystem's device (set in step 2), or set it explicitly to the EVL-4. Either way works; an explicit device on the zone wins.

Repeat for every panel zone you want visible in GEM. A zone event for a panel zone with no matching GEM zone is logged and ignored (look for Unknown zone number in the device log).

4. Enable arming from the touch panel (optional)

The built-in homeowner Security control hides its arm/disarm buttons until arming is turned on for the subsystem:

  1. On the Security subsystem, add the attribute arm_enabled (type boolean) and set it to true. (Add it from the subsystem's attribute editor — it is offered in the name picker.)
  2. Reopen the homeowner Security control; the Arm/Disarm buttons are now active. With arm_enabled off, the control shows "System arming is DISABLED."

Arming and disarming

Arming is done with device commands. The driver exposes:

CommandWhat it sendsNotes
arm_awayTPI arm-away on the partitionArms with interior + perimeter.
arm_stayTPI arm-stay on the partitionArms perimeter only (stay/home).
arm_nightTPI arm-stay on the partitionDSC over TPI has no separate night mode, so this maps to the same arm-stay command as arm_stay.
disarmTPI disarm + the user codeDisarms the partition. The code is sent to the panel and the panel validates it.

Every one of these commands requires a user code to be passed as the code argument (the driver also accepts user_code). Without it the command returns "User code required for arm/disarm." Two important behaviors to understand:

  • Disarm sends the code to the panel — it must be a valid DSC user code, or the panel refuses to disarm.
  • Arm commands require the code argument too, but they do not forward it to the panel; the panel arms on its own programming (quick-arm style). The code requirement on arming is a GEM-side gate, not a panel check.

Each command also takes an optional partition argument (the partition number). If omitted it defaults to partition 1, which is the only partition the homeowner Security control targets. To arm or disarm a second partition, call the command from a macro or the Commands screen with partition set to that partition number.

You can fire these three ways:

  • For testing — run the command from the device's command list or the Commands screen with code (and partition if needed) and watch the result.
  • From a UI — the homeowner Security control wires its Arm Away and Disarm buttons to arm_away and disarm; both prompt for a code on an on-screen keypad (minimum 4 digits) before sending. See Known limitations about the Arm Home button.
  • From automation — call the command in a macro or trigger (for example, "arm Away when the site goes to Away mode"). See Macros and Triggers. Store the user code in the macro step's code argument.

Reading the panel's state

The partition's current state is published to the device's arm_state attribute (for partition 1) as one of ready, not_ready, armed_away, armed_stay, disarmed, exit_delay, entry_delay, or alarm. A macro condition or trigger can read it — for example to avoid re-arming, or to flash a light during entry delay. The homeowner Security control reads arm_state for its big status banner and to highlight the active arm button, and it shows a live countdown during exit/entry delay.

Zones and live state

Each GEM security zone mirrors its panel zone. As the panel reports events, the driver updates two attributes on the zone:

  • state — the current condition: open, closed, alarm, fault, or tamper.
  • last_message — the most recent raw event, useful for detail: zone_open, zone_restored, zone_alarm, zone_alarm_restore, zone_fault, zone_fault_restore, zone_tamper, or zone_tamper_restore.

In the homeowner Security control, a zone shows red when it is open or faulted and green otherwise, and faulted zones float to the top of their group. You can search zones by name and toggle between Show Faults and Show All.

Zone bypass

The driver provides a bypass_zone command. It bypasses a zone by sending the DSC virtual keypad sequence (*1 followed by the zone number) — the same keystrokes you'd enter on a physical keypad.

Call it with the panel zone number in the zone argument — for example from a macro or the Commands screen: bypass_zone with zone = 5. See Known limitations for why the homeowner control's on-screen Bypass buttons don't currently reach this driver.

Attribute reference

Device attributes — configuration

AttributeRequiredTypeNotes
ipyesstringThe EVL-4's IP address. Shown as EVL-4 IP Address.
passwordyesstring (secure)The EVL-4 TPI Password (not the DSC installer code). Stored encrypted.
portnointegerTPI port. Defaults to 4025. Shown as TPI Port.
partition_countnointegerPlanning hint for how many partitions the panel has. The driver does not act on it.
zone_countnointegerPlanning hint for how many panel zones exist. The driver does not act on it.

Device attributes — published by the driver

These appear automatically as the panel reports state; you don't set them.

AttributeTypeNotes
arm_statestringPartition 1's state: ready / not_ready / armed_away / armed_stay / disarmed / exit_delay / entry_delay / alarm.
partition_<n>_statusstringPer-partition state (partition_1_status, partition_2_status, …) using the same values as arm_state.
panel_ac_troublebooleantrue while the panel reports AC-power loss; clears to false on restore.
panel_battery_troublebooleantrue while the panel reports a low/failed backup battery.
bell_troublebooleantrue while the panel reports a bell/siren circuit fault.
general_system_tamper_troublebooleantrue while the panel reports a system tamper.

Zone attributes

AttributeRequiredTypeNotes
addressyesstringThe panel zone number. This is what ties a TPI event to the GEM zone — set it yourself when you create the zone.
stateautostringLive zone condition: open / closed / alarm / fault / tamper.
last_messageautostringMost recent raw zone event (see Zones and live state).

Diagnostic commands

CommandWhat it does
statusAsks the panel for a full status refresh. Useful right after connecting to repopulate every partition and zone.
pollSends a single keep-alive poll. The driver already polls automatically; this is for manual testing.

How it works

Connecting and logging in. GEM opens a TCP connection to the EVL-4 on port 4025 and authenticates with the TPI password. The module silently drops the connection if the password is wrong, so "connects then immediately disconnects" almost always means a password mismatch.

Keep-alive. Once logged in, GEM sends a poll roughly every 20 seconds. If it hears nothing back from the module for about 60 seconds, it assumes the link is dead, drops it, and reconnects a few seconds later. Occasional reconnect lines in the device log are normal; a tight reconnect loop is not (see Troubleshooting).

Events. The panel pushes TPI messages as things happen — partition arm/disarm, zone open/restore, alarms, and trouble conditions — and the driver maps each one onto the corresponding arm_state, zone state/last_message, or trouble attribute. There is no constant polling of individual zones; updates are event-driven and arrive within seconds.

Known limitations

  • "Arm Home" button on the homeowner Security control. That control's three buttons are Arm Home, Disarm, and Arm Away. Arm Away and Disarm work with this driver, but the Arm Home button sends an arm_home command that this driver does not implement (it provides arm_stay), so pressing it returns an error instead of arming in stay mode. To arm stay/home, call arm_stay (or arm_night) from a macro, a trigger, or a custom UI button, or from the Commands screen. (This is a driver/UI naming mismatch, noted here for accuracy.)
  • On-screen Bypass buttons don't reach this driver. The Security control's per-zone Bypass and Bypass Faulted buttons pass the zone's address, but bypass_zone reads the zone argument, so those buttons don't currently bypass anything on a DSC panel. Bypass instead by calling bypass_zone with the zone argument from a macro or the Commands screen, or from the panel's own keypad. The driver also has no unbypass_zone command and does not publish a per-zone "bypassed" flag, so the control won't display zones as bypassed.
  • Stay vs. night arming. Over DSC TPI there is no distinct night-arm command, so arm_night performs the same stay-arm as arm_stay.
  • Disarm needs a valid panel code. Disarming forwards the code to the panel, which validates it; an invalid or missing code will not disarm. (Arming requires a code argument in GEM but does not send it to the panel.)
  • Single-partition by default. The arm/disarm commands target partition 1 unless you pass a partition argument, and the homeowner control only ever targets partition 1. Multi-partition arming has to be driven from macros/commands with an explicit partition.

Troubleshooting

SymptomCheck
Device connects but receives nothing, or drops immediatelyTPI password mismatch — the EVL-4 silently disconnects on a bad login. Confirm the TPI Password against the EVL-4 web UI (the default is user). It is not the DSC installer code.
Reconnect loop every ~60 secondsThe keep-alive poll isn't getting answered. Power-cycle the EVL-4 and confirm the panel programming / keybus (PC-Link) wiring is healthy.
Zone events appear for unknown zones (Unknown zone number in the log)Create a GEM zone under the Security subsystem whose Address equals that panel zone number. The driver never auto-creates zones.
Zones never updateConfirm each zone's Address is the panel zone number and the zone resolves to this device — either give the zone a Device of the EVL-4, or set the Security subsystem's Device to it.
Arm/disarm returns "User code required for arm/disarm"Pass the user code as the code argument (the homeowner keypad does this for you; a macro step must include it).
Disarm rejected by the panelThe code isn't a valid DSC user code, or the panel is in a state that refuses disarm. Verify the code on a physical keypad.
Arm "succeeds" but the panel doesn't armA zone is faulted (open door/window) or the panel has a trouble condition; clear or bypass it, then re-arm.
Homeowner control shows "System arming is DISABLED"Set the arm_enabled attribute on the Security subsystem to true.
Homeowner control shows "Missing security device"Set the Security subsystem's Device to the EVL-4 under Subsystems.
  • Devices — where the EVL-4 device is added and its connection fields are set.
  • Subsystems — assign the EVL-4 as the Security subsystem's device and add the arm_enabled attribute.
  • Zones — create one zone per panel zone, with the panel zone number as the address.
  • Commands — where arm_away, arm_stay, disarm, and bypass_zone are dispatched and wired into automation.
  • Macros and Triggers — arm/disarm on a schedule or in response to events, and react to arm_state and zone state.