Zone_bypass_mode not working with DSC Alarm Binding

This is my first ever post, so apologies in advance if I’ve missed something.

I have OH2 running on a Windows PC and working with a number of bindings. I use the DSC Alarm binding to control my DSC alarm system, but I cannot get the zone_bypass_mode to ever report back when a zone is bypassed. I have every other channel for the binding working correctly, so I know it is talking to the alarm panel.

Has anyone else managed to get this working?

Here is the code for a zone I’m trying to get the bypass mode for:

Things declaration:

Thing zone DiningRm_Windows [ partitionNumber=1, zoneNumber=11 ]

Items declaration:

Switch Zone11_bypass_mode "Dining Room Windows"{channel="dscalarm:zone:MyAlarm:DiningRm_Windows:zone_bypass_mode"}

I also have a rule that sets the zone to bypassed by sending a keypad command when a dummy switch on the sitemap is pressed.

rule "SendBypassCommand11"
    Item BypassZone11 received command ON
    sendCommand(SEND_DSC_ALARM_COMMAND, "071,1*111#")

In the logs I can see the the item being set to OFF initially:
2018-12-13 12:28:28.289 [vent.ItemStateChangedEvent] - Zone11_bypass_mode changed from NULL to OFF

And here the bypass zone command is sent, and I can verify it by looking at the physical alarm keypad.
2018-12-13 12:34:33.736 [ome.event.ItemCommandEvent] - Item ‘BypassZone11’ received command ON
2018-12-13 12:34:33.747 [vent.ItemStateChangedEvent] - BypassZone11 changed from NULL to ON
2018-12-13 12:34:33.751 [ome.event.ItemCommandEvent] - Item ‘SEND_DSC_ALARM_COMMAND’ received command 071,1111#
2018-12-13 12:34:33.754 [vent.ItemStateChangedEvent] - SEND_DSC_ALARM_COMMAND changed from to 071,1

But I never see a change in the Zone11_bypass_mode state.

Any help would be appreciated.

Hello @Buono,

Here is a brief explanation of what is going on. Even when a zone is put into bypass mode by the switch there is no way of telling if it happened or not, because the event isn’t reported by the DSC alarm system. Sorry its’ not a solution, just an explanation.

Thanks for the reply @rsstephens

So am I missing something, or is there no use for the zone_bypass_mode channel?

I did look at the Envisalink TPI documentation a bit an found this section.

Bypassed Zones Bitfield Dump This command is issued upon leaving Zone Bypass programming (*1 on the keypad). It is a 16 character HEX string representing an 8 byte bitfield. This bitfield indicates which zones are currently in bypass. A “1” indicates the zone is in bypass. The lower 8 zones are in the first position of the bitfield. The developer can force this dump by using the keystring commands to enter and leave zone bypassing. i.e. “*1#”

I thought that the zone_bypass_mode channel would be updated whenever this Bitfield was sent out after the panel exited the Zone Bypass programming.


When the binding was created this command (Bypassed Zones Bitfield Dump) wasn’t apart of the TPI. It is apparently a new feature that has been added since. The binding is based on the document version EnvisaLinkTPI-1-04 which didn’t include this feature. Looking at the latest version of the document, EnvisaLinkTPI-1-08, it is only available on the Envisalink 3 (firmware version 1.12.182 and above) and the Envisalink 4. It would be a nice feature to add to the binding for sure. I am currently using the Envisalink 2 which doesn’t support this feature, so I would like to upgrade to a newer Envisalink model before attempting to add the feature. But I will definitely look into it.

The zone_bypass_mode channel is used primarily to send the command to the DSC alarm to put a zone in to bypass mode. I doesn’t do well as a bypass mode status.

That makes sense, I did see that note in the document about that command being added later. I have an Envisalink 3, and I did check that I was running at least that FW version mentioned.

If you are ever able to get a newer Envisalink and try implementing this features, please let me know. I would be glad to help test and debug it.

On your note about using the zone_bypass_mode to put a zone into bypass mode. That is interesting, I thought the only way to do this was with a rule, and the command:

sendCommand(SEND_DSC_ALARM_COMMAND, "071,1*101#")

Are you saying, that I don’t need to do it this way, and by directly setting the state of a _zone_bypass_mode _ item, the binding will send the correct bypass command to the alarm?

Yes, the zone_bypass_mode is for sending that command to the the DSC alarm. But the issue is, as you have already found, you really don’t know if the alarm system accepted the command without checking the keypad.

Hi @rsstephens

Thanks for all your replies. In case you get a newer Envisalink in the future and want to add this functionality to the binding. Here is some info that may help. At the keypad I bypassed zone 11, then zone 12, then undid both. Here is the debug messages. You can see the command 616 being received, and the bitmaps that correspond to zones, 11 and 12.

2018-12-18 22:17:53.135 [DEBUG] [larm.handler.EnvisalinkBridgeHandler] - read(): Message Received: 6160004000000000000A1
2018-12-18 22:17:53.136 [DEBUG] [ng.dscalarm.internal.DSCAlarmMessage] - parseAPIMessage(): Message Received (6160004000000000000) - Code: 616, Name: Unknown Code, Description: Unknown code received., Data: 0004000000000000
2018-12-18 22:17:53.136 [DEBUG] [rm.handler.DSCAlarmBaseBridgeHandler] - handleIncomingMessage(): Message received: 6160004000000000000A1 - Code: "616", Name: "Unknown Code", Description: "Unknown code received.", Data: 0004000000000000

2018-12-18 22:18:00.104 [DEBUG] [larm.handler.EnvisalinkBridgeHandler] - read(): Message Received: 616000C000000000000B0
2018-12-18 22:18:00.106 [DEBUG] [ng.dscalarm.internal.DSCAlarmMessage] - parseAPIMessage(): Message Received (616000C000000000000) - Code: 616, Name: Unknown Code, Description: Unknown code received., Data: 000C000000000000
2018-12-18 22:18:00.106 [DEBUG] [rm.handler.DSCAlarmBaseBridgeHandler] - handleIncomingMessage(): Message received: 616000C000000000000B0 - Code: "616", Name: "Unknown Code", Description: "Unknown code received.", Data: 000C000000000000

018-12-18 22:18:10.621 [DEBUG] [larm.handler.EnvisalinkBridgeHandler] - read(): Message Received: 61600000000000000009D
2018-12-18 22:18:10.622 [DEBUG] [ng.dscalarm.internal.DSCAlarmMessage] - parseAPIMessage(): Message Received (6160000000000000000) - Code: 616, Name: Unknown Code, Description: Unknown code received., Data: 0000000000000000
2018-12-18 22:18:10.622 [DEBUG] [rm.handler.DSCAlarmBaseBridgeHandler] - handleIncomingMessage(): Message received: 61600000000000000009D - Code: "616", Name: "Unknown Code", Description: "Unknown code received.", Data: 0000000000000000

Hi @rsstephens

Do you perhaps know if anything is in development towards supporting the polling of Zone Bypass status yet?