DSC Keybus Protocol

Go To Last Post
63 posts / 0 new

Pages

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hello,

 

hope anyone who's contributed to this thread is still around. 

 

I am trying to get either a PC1555 or LCD5501 keypad to communicate with an Arduino Uno. I have tried communicating per specs outlined in this thread (1kHz clock/data, command + 0 bit + data + checksum) but haven't been able to do so. Maybe I am miscalculating the checksum (0xff mask of sum of all bytes, including command?)

 

After a few seconds, the keypads light up their Trouble light and aren't responsive. Since I don't have a DSC alarm panel, I am unable to get any data but what I can get here and there online. Does anyone know if a specific sequence has to be sent to the keypads to get them to "think" there's a control panel connected?

 

Thanks in advance, and happy new year!

Last Edited: Sat. Dec 31, 2016 - 03:02 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Sorry to bust in on this party late, but what is the relation between the keybus and the pclink connection?  Doesn't the pclink connection use standard RS-232 from a computer's serial port?

 

So as another back door into the system, couldn't a code guessing program simply be used on pclink, bypassing the keypad lockout issue?  Has anyone done any analysis of pclink traffic?  Did I miss that somewhere above?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hello Guys,

 

Thanks for the project at https://github.com/sjlouw/dsc-alarm-arduino - Just want to find out if there's any news on the Virtual Keypad from Arduino?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

 

Any news about this project? I have pc5020, and code works, but i think it`s a little buggy with my alarm. When i  sabotage one of zones, i have a message like this

Quote:

 

Panel]  00100111 0 10000001 00000001 00000000 11000111 00000000 01110000 0 (OK)
20:29:07, 4/18/2017 27(39): [Zones A] Secure 
Time Synchronized
[Panel]  10100101 0 00010111 01010010 01010100 01110100 01011101 11111111 00110010 0 (OK)
20:29:00, 4/18/2017 a5(165): [Info] , User Code 30
[Panel]  11001110 0 00100000 01110100 01011101 00000000 00000000 10111111 0 (OK)
20:29:00, 4/18/2017 ce(206): 
[Panel]  00000101 0 10010000 00000011 00010000 11000111 00010000 11000111 00010000 11000111 1
20:29:00, 4/18/2017 05(5): [Status] Not Ready, Error
[Panel]  11101011 0 00000001 00010111 00010010 01010100 01110100 00000000 01011101 11111111 00111001 0 (OK)
20:29:00, 4/18/2017 eb(235): 
[Panel]  00000101 0 10010000 00000011 00010000 11000111 00010000 11000111 00010000 11000111 1
20:29:00, 4/18/2017 05(5): [Status] Not Ready, Error
[Panel]  01100100 0 00000100 01101000 0 (OK)
20:29:02, 4/18/2017 64(100): [3 Beeps] 
[Panel]  00000101 0 10010000 00000011 00010000 11000111 00010000 11000111 00010000 11000111 1

 

or this when second zone i remove resistor

 

 

Time Synchronized
[Panel]  10100101 0 00010111 00010010 01010100 10000000 00000000 00000000 10100010 0 (OK)
20:32:00, 4/18/2017 a5(165): [Info] 
[Panel]  00000101 0 10010000 00000011 00010000 11000111 00010000 11000111 00010000 11000111 1
20:32:00, 4/18/2017 05(5): [Status] Not Ready, Error
[Panel]  00100111 0 10010000 00000011 00010000 11000111 00000000 10010001 0 (OK)
20:32:03, 4/18/2017 27(39): [Zones A] Secure 
Time Synchronized
[Panel]  10100101 0 00010111 01010010 01010100 10000000 01111101 11111111 01011110 0 (OK)
20:32:00, 4/18/2017 a5(165): [Info] , Master Code 67
[Panel]  11001110 0 00100000 10000000 01111101 00000000 00000000 11101011 0 (OK)
20:32:00, 4/18/2017 ce(206): 
[Panel]  00000101 0 10010001 00000001 00010000 11000111 00010000 11000111 00010000 11000111 1
20:32:00, 4/18/2017 05(5): [Status] Ready, Error
[Panel]  11101011 0 00000001 00010111 00010010 01010100 10000000 00000000 01111101 11111111 01100101 0 (OK)
20:32:00, 4/18/2017 eb(235): 
[Panel]  00000101 0 10010001 00000001 00010000 11000111 00010000 11000111 00010000 11000111 1
20:32:00, 4/18/2017 05(5): [Status] Ready, Error
[Panel]  00000101 0 10000001 00000001 00000000 11000111 00000000 11000111 00000000 11000111 1
20:32:00, 4/18/2017 05(5): [Status] Ready
[Panel]  00010001 0 10101010 10101000 10101010 10101010 10101010 10101010 10101010 10
20:32:11, 4/18/2017 11(17): [Keypad Query] 
[Panel]  00000101 0 10000001 00000001 00000000 11000111 00000000 11000111 00000000 11000111 1
20:32:11, 4/18/2017 05(5): [Status] Ready
[Panel]  11100110 0 00101100 10000000 00000000 00000000 00000000 00000000 10010010 0 (OK)
20:32:26, 4/18/2017 e6(230): 
[Panel]  00000101 0 10000001 00000001 00000000 11000111 00000000 11000111 00000000 11000111 1
20:32:26, 4/18/2017 05(5): [Status] Ready
[Panel]  00010001 0 10101010 10101000 10101010 10101010 10101010 10101010 10101010 10
20:32:41, 4/18/2017 11(17): [Keypad Query] 

 

Is this normal? Any news about sterring the keypad from arduino?

Last Edited: Tue. Apr 18, 2017 - 06:52 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

I am trying to interface a pc1555rkz keypad with a micro. Using info from this thread. I was able to sound the beeper, and turn on the three top leds. 

But  can only get the zone leds to blink, didnt find a way to turn them on continuously.

Can anybody help me with this ?

I have used commands 05 and 27 for the leds and 64 for the beeper. The zone leds start to blink with command 5d.

If there is still interest in this subject I can post some of my findings.

Regards

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Fernando,

Great you did this on the ESP8266 yes

 - Can you share the code?

 - have you figured out when the alarm is activated?

Last Edited: Tue. Mar 6, 2018 - 06:40 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

Greetings all,

 

Thanks for the excellent discussion detailing the Keybus clock and data lines.  I've written a library for Arduino and esp8266 that supports reading Keybus data, decoding system status, and writing as a virtual keypad (using an NPN transistor) with examples integrating with Apple HomeKit and Siri, MQTT, email, and push notifications with Pushbullet:

 

https://github.com/taligentx/dscKeybusInterface

 

This is an early release supporting zones 1-8 on one partition as seen on a PC1555MX panel.  The library reads the Keybus using hardware interrupts for the clock and timer interrupts for the data line to capture data 250us after the clock changes - this was necessary as I observed delays up to 160us for keypads to send data.  

 

At this point, I've decoded many of the commands listed in the DSC IT-100 Developers Guide and documented these with samples of the binary and the decoded message in src/dscKeybusPrintData.cpp

 

Further development for zones 9-64, multiple partitions, PC1616/PC1832/PC1864, and wireless modules will require logs of data from these panels, feel free to add an issue/pull request with logs, additions, and corrections - it'd be nice to get the library in a usable state for all DSC panels (including the classic series eventually, the dougkpowers/pc1550-interface library is functional but uses polling and blocking delays).

 

Cheers,

Nikhil

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

Greetings,

 

DSC Keybus Interface 1.0 is now available in the Arduino IDE Library Manager and PlatformIO Library Registry:  https://github.com/taligentx/dscKeybusInterface

 

The library is now capable of decoding partitions 1-8 status, zones 1-64 status, and writing as a virtual keypad to partitions 1-8 across all PowerSeries panels.  See src/dscKeybusPrintData.cpp for the details of the protocol as I've decoded it so far - post a reply here or a Github issue if there are any sections that are unclear.  Ideally, the protocol information would be separately documented but I'll leave that to anyone interested.

 

I've also added a virtual keypad example for iOS and Android using Blynk.  Now that quite a bit of the protocol is decoded, the focus can move on to integrating with home automation and other software - there are lots of systems out there so this portion is up to anyone interested in working on a particular integration.  SmartThings and openHAB, for example, seem like useful targets.

 

-Nikhil

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Amazing job! I will try it i have pc5020 and 64 zones. In blynk sketch and last library i have problem with zones 17-32 and maybe up to 64 zones (at this moment have 32 zones connected). I see issue in github, but it regarding to arduino sketch not blynk.

 

change D1 D2 D8 to 5 4 15

 

and all complile ok. 

Last Edited: Wed. Aug 22, 2018 - 04:11 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

I'm working on a Raspberry based home security system and want to use a DSC keypad to control it. Does anyone have a solution for this?

My understanding is that in my case I need to implement the master version of the keybus protocol, but all the open source solutions are for keybus slaves.

 

My project: https://www.arpi-security.info

 

Thanks,

Gábor

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Gabor, i think your hardware needs a bit of attention. You have no protection on the alarm inputs. A bit of lightning will zap them. Add some varistors.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

gkovacs81 wrote:

I'm working on a Raspberry based home security system and want to use a DSC keypad to control it. Does anyone have a solution for this?

My understanding is that in my case I need to implement the master version of the keybus protocol, but all the open source solutions are for keybus slaves.

 

Hi Gábor,

 

The DSC panels send a constant stream of data on the Keybus to the keypads.  If you mimic this, the keypads should work fine - it'd be interesting to see what the minimum set of commands is necessary to work with the keypads.

 

At least, you'd need to send a constant stream of 0x05 status messages, 0x27 status messages for zones 1-8 every 4 minutes or on a zone status change, and 0xA5 time and status messages every 4 minutes.  There are likely more commands that the keypads look for that may be a matter of trial and error.

 

I have documented the protocol in dscKeybusPrintData.cpp with the data I've been able to decode so far, including examples of the binary data for each message and the interval of each message.  If the keypad works, it will send back messages - these are also documented in this file.

 

Please report back if you are able to make any headway, I'm sure this would generate interest as the keypads are handy devices that could be used for quite a few applications.

 

-Nikhil

Pages