Git Product home page Git Product logo

dsckeybusinterface's Introduction

DSC Keybus Interface

dscKeybusInterface This library directly interfaces Arduino, esp8266, esp32, and esp32-s2 microcontrollers to DSC PowerSeries and Classic series security systems for integration with home automation, remote control as a virtual keypad, notifications on alarm events, unlocking installer codes, and emulating DSC panels to use DSC keypads as general purpose input devices.

This enables existing DSC security system installations to retain the features and reliability of a hardwired system while integrating with modern devices and software for under $5USD in components.

The built-in examples can be used as-is or as a base to adapt to other uses:

Example integrations:

Quick start

  1. Install the DSC Keybus Interface library:
    • Arduino IDE: Search for DSC in the Library Manager - Sketch > Include Library > Manage Libraries
      ArduinoIDE
    • PlatformIO IDE: Search for DSC in the PlatformIO Library Registry
      PlatformIO
    • PlatformIO CLI: platformio lib install "dscKeybusInterface"
    • Alternatively, git clone or download the repo .zip to the Arduino/PlatformIO library directory to keep track of the latest changes.
  2. Select, configure, and upload one of the example sketches to the microcontroller:
    Examples
  3. Connect the microcontroller to the DSC Keybus per the wiring diagram with the appropriate resistors (and a transistor if you'd like to control the system).

Why?

I Had: A DSC security system not being monitored by a third-party service.
I Wanted: Notification if the alarm triggered.

I was interested in finding a solution that directly accessed the pair of data lines that DSC uses for their proprietary Keybus protocol to send data between the panel, keypads, and other modules (instead of using the DSC IT-100 serial module). Tapping into the data lines is an ideal task for a microcontroller and also presented an opportunity to work with the Arduino and FreeRTOS (via esp-open-rtos) platforms.

While there has been excellent discussion about the DSC Keybus protocol and several existing projects, there were a few issues that remained unsolved:

  • Error-prone Keybus data capture.
  • Limited data decoding - there was good progress for armed/disarmed states and partial zone status for a single partition, but otherwise most of the data was undecoded (notably missing the alarm triggered state).
  • Read-only - unable to control the Keybus to act as a virtual keypad.
  • No implementations to do useful work with the data.

This library uses a combination of hardware and timer interrupts to accurately capture Keybus data, and has lead to reverse engineering much of the Keybus protocol.

Features

  • Monitor the status of all partitions:
    • Alarm triggered, armed/disarmed, entry/exit delay, fire triggered, keypad panic keys
  • Monitor zones status:
    • Zones open/closed, zones in alarm
  • Monitor system status:
    • Ready, trouble, AC power, battery
  • Monitor PGM outputs 1-14 status
  • Virtual keypad:
    • Write keys to the panel for all partitions
    • Trigger panel command outputs
  • Keypad interface:
    • Emulates a DSC panel to use DSC PowerSeries and Classic series keypads as physical input devices for any general purpose, without needing a DSC panel.
  • Panel time - retrieve current panel date/time and set a new date/time (including an example with NTP sync)
  • Panel installer code unlocking - determine the 4-digit panel installer code
  • Virtual zone expander - the expander branch can emulate a DSC zone expander module to add zones to the security system that are handled by the microcontroller - thanks to Dilbert66 for this contribution!
  • Direct Keybus interface:
  • Designed for reliable data decoding and performance:
    • Hardware GPIO pin interrupts and timer interrupts for accurate data capture timing
    • Data buffering: helps prevent lost Keybus data if the sketch is busy
    • Extensive data decoding: the majority of Keybus data as seen in the DSC IT-100 Data Interface developer's guide has been reverse engineered and documented in src/dscKeybusPrintData.cpp.
    • Non-blocking code: Allows sketches to run as quickly as possible without using delay or delayMicroseconds
  • Supported security systems:
    • DSC PowerSeries - all panels are supported, tested with: PC585, PC1555MX, PC1565, PC1565-2P, PC5005, PC5010, PC5015, PC5020, PC1616, PC1808, PC1832, PC1864
    • DSC Classic series: PC1500, PC1550, PC2550
      • Requires configuring the panel through *8 programming to enable PC16-OUT: section 19, option 4.
      • PC2500 and PC3000 are untested, post an issue if you're able to test these panels.
    • Rebranded DSC PowerSeries (such as some ADT systems) should also work with this interface.
  • Unsupported security systems:
    • DSC Alexor (PC9155) is all wireless and does not have an accessible Keybus interface.
    • DSC Neo series use a higher speed encrypted data protocol (Corbus) that is not currently possible to support.
    • Other brands (that are not rebranded DSC systems) use different protocols and are not supported.
  • Supported microcontrollers:
    • Arduino:
      • Boards: Uno, Mega, Leonardo, Mini, Micro, Nano, Pro, Pro Mini
      • ATmega328P, ATmega2560, and ATmega32U4-based boards at 16Mhz
    • esp8266:
    • esp32:
      • Development boards: NodeMCU ESP-32S, Doit ESP32 Devkit v1, Wemos Lolin D32, etc.
      • Includes Arduino framework support (v2.0.2 or newer required), dual cores, WiFi, and Bluetooth for ~$5USD shipped.
    • esp32-s2:
  • Possible features (PRs welcome!):
    • DSC IT-100 emulation
    • Unlock 6-digit installer codes

Release notes

  • 3.0
    • New: DSC Classic series panel support: PC1500, PC1550, PC2550
    • New: KeypadInterface and KeypadInterface-MQTT example sketches - emulate a DSC panel to connect DSC PowerSeries and Classic keypads as physical input devices for any general purpose, without needing a DSC panel.
    • New: HomeKit-HomeSpan example sketch (esp32) - integrate directly with Apple HomeKit as a native standalone accessory using HomeSpan
    • New: Pushover and Pushsafer push notification example sketches for esp8266/esp32
    • New: esp32-s2 microcontroller support
    • New: Code restructured to support new features from sketches using #define flags - enables Classic series support and KeypadInterface.
    • Updated: Homebridge-MQTT supports switching armed modes while armed
    • Updated: Added TLS root certificate to Twilio-SMS
    • Updated: removed deprecated handlePanel()
    • Bugfix: VirtualKeypad-Web updated notes to switch to this fork of ESPAsyncWebServer to resolve crashes with iOS and macOS clients.
    • Bugfix: Pushbullet example sketch updated TLS security certificate fingerprint
    • Bugfix: Workaround for upstream esp32 TLS handshake issue preventing making a TLS connection more than once.
    • Bugfix: Fixed Homebridge-MQTT handling exit delay states while multiple partitions are arming
    • Bugfix: Resolved access codes not updating on disarm, changed arming access codes to update before armed status changes
  • 2.0
    • New: Telegram bot example sketch
    • New: OpenHAB integration example sketch using MQTT
    • New: Unlocker example sketch - determines the panel installer code
    • New: TimeSyncNTP example sketch - uses NTP to automatically set the panel time
    • New: ESPHome integration example (located in the extras directory) - thanks to Dilbert66 for this contribution!
    • New: TinyGSM-SMS example sketch - sends status via SMS with a GSM modem - thanks to jvitkauskas for this contribution!
    • New: KeybusReaderIP example sketch enables Keybus data access over IP, thanks to aboulfad for this contribution!
    • New: esp32 microcontroller support - requires Arduino-esp32 v1.0.5-rc6 or newer
    • New: Features for sketches:
      • ready and disabled track partition status
      • setTime() sets the panel date and time
      • pgmOutputs[] tracks the status of PGM outputs 1-14
      • timestampChanged tracks when the panel sends a timestamp
      • accessCode tracks the access code used to arm/disarm
      • resetStatus() triggers a full status update of all partitions and zones - for example, after initialization or a lost network connection.
      • pauseStatus pauses status updates if set to true - for example, holding status changes during a lost network connection
      • stop() disables the interface - for example, prior to starting OTA updates
      • appendPartition() in example sketches simplifies adding partition numbers to messages
      • panelVersion tracks the panel version number
    • New: Handle *1 bypass/re-activate used to change stay/away mode while armed
    • Updated: VirtualKeypad-Blynk and VirtualKeypad-Web display alarm memory, programming zone lights, and event buffer
    • Updated: HomeAssistant-MQTT, Homebridge-MQTT, OpenHAB-MQTT include PGM outputs 1-14 status
    • Updated: Virtual keypad writes
      • write() for multiple keys can now be set to block until the write is complete with an optional parameter if the char array is ephemeral
      • Checking writeReady is typically no longer needed in the sketch, the library will block if a previous write is in progress - this can be checked if the sketch needs to wait until the library can perform a nonblocking write
    • Updated: HomeAssistant-MQTT sketch now includes night arm and for esp8266/esp32 includes a sensor with partition status messages
    • Updated: Expanded partition state processing to improve panel state detection at startup
    • Deprecated: handlePanel() is now loop()
    • Bugfix: Resolved keypad aux/panic key, AC power, and battery status on PC585/PC1555MX
    • Bugfix: Resolved Homebridge-MQTT sketch not handling HomeKit target states
    • Bugfix: Resolved timing issues when consecutively calling write
  • 1.2
    • New: Virtual keypad web interface example, thanks to Elektrik1 for this contribution!
    • New: Support esp8266 CPU running at 160MHz - this helps sketches using TLS through BearSSL
    • Updated: HomeAssistant-MQTT example includes availability status, thanks to bjrolfe for this contribution!
    • Updated: List of tested DSC panels: PC585, PC1565, PC5005, PC1808
    • Updated: esp8266 power wiring diagrams
    • Updated: esp8266 module list
  • 1.1
    • New: Zones 33-64 tamper and fault decoding
    • New: Push notification example using Twilio, thanks to ColingNG for this contribution!
    • Bugfix: Zones 17-32 status incorrectly stored
  • 1.0
    • New: Blynk virtual keypad example sketch and app layout examples
    • New: Virtual keypad support for PGM terminals 1-4 command output
    • New: Status keybusConnected to check if data is being received from the DSC panel
    • New: Auxiliary input alarm decoding
  • 0.4
    • New: Virtual keypad support for partitions 3-8, thanks to jvitkauskas for contributing the necessary logs
    • New: Support ATmega32U4-based Arduino boards (switched to AVR Timer1)
    • Changed: Simplified example names, configurations, added version numbers
    • Bugfix: Virtual keypad writes with partitions 5-8 enabled
    • Bugfix: F/A/P alarm key writes with processModuleData disabled
    • Bugfix: HomeAssistant example configuration.yaml error for alarm_control_panel
  • 0.3
    • New: Status for partitions 2-8, zones 33-64
    • New: Virtual keypad support for partition 2
    • New: Athom Homey integration example sketch, thanks to MagnusPer for this contribution!
    • New: PCB layouts, contributed by sjlouw
    • New: Configurable number of partitions and zones to customize memory usage: dscPartitions and dscZones in dscKeybusInterface.h
    • New: KeybusReader decoding of commands 0xE6 and 0xEB
    • Changed: Split examples by platform
    • Changed: Arduino sketches no longer use pin 4 to avoid a conflict with the SD card on Ethernet shields.
    • Changed: MQTT examples updated with username and password fields
    • Changed: processRedundantData now true by default to prevent storing repetitive data, reduces memory usage.
    • Note: This release changes the library methods to accommodate multiple partitions, existing sketches will need to be updated to match the new example sketches.
  • 0.2
    • New: Status for zones 9-32
    • New: Home Assistant integration example sketch
    • New: Panel data buffering, adds dscBufferSize to dscKeybusInterface.h to allow configuration of how many panel commands are buffered to customize memory usage (uses 18 bytes of memory per command buffered).
  • 0.1 - Initial release

Examples

The included examples demonstrate how to use the library and can be used as-is or adapted to integrate with other software. Post an issue/pull request if you've developed (and would like to share) a sketch/integration that others can use.

  • Status: Processes and prints the security system status to a serial interface, including reading from serial for the virtual keypad. This demonstrates how to determine if the security system status has changed, what has changed, and how to take action based on those changes. Post an issue/pull request if you have a use for additional system states - for now, only a subset of all decoded commands are being tracked for status to limit memory usage:

    • Partitions ready
    • Partitions armed away/stay/disarmed
    • Partitions in alarm
    • Partitions exit delay in progress
    • Partitions entry delay in progress
    • Partitions fire alarm
    • Zones open/closed
    • Zones in alarm
    • PGM outputs 1-14
    • Keypad fire/auxiliary/panic alarm
    • Get/set panel date and time
    • User access code number (1-40)
    • Panel AC power
    • Panel battery
    • Panel trouble
    • Keybus connected
  • HomeKit-HomeSpan (esp32): Integrates directly with Apple HomeKit as a native accessory (for the Home app and Siri) using HomeSpan, without needing a separate service or device. Demonstrates arming/disarming partitions, zones status, fire alarms, PGM outputs status, and controlling panel command outputs.

    • For esp8266, the dscKeybusInterface-RTOS library includes a native HomeKit implementation that runs directly on the esp8266, without requiring a separate device running MQTT or Homebridge.
  • Homebridge-MQTT: Interfaces with Homebridge via MQTT to integrate with Apple HomeKit (including the iOS Home app and Siri) and Google Home. Demonstrates arming/disarming partitions and for HomeKit, viewing the status of zones, PGM outputs, and fire alarms.

  • HomeAssistant-MQTT: Interfaces with Home Assistant via MQTT. Demonstrates arming/disarming partitions and viewing the status of zones, PGM outputs, fire alarms, and trouble. For esp8266/esp32, the partition status is available as a text message for display.

  • OpenHAB-MQTT: Interfaces with OpenHAB via MQTT. Demonstrates using the panel and partitions states as OpenHAB switches and zone states as OpenHAB contacts. For esp8266/esp32, a panel status message is also sent as a string to OpenHAB. See https://github.com/jimtng/dscalarm-mqtt for an integration using the Homie convention for OpenHAB's Homie MQTT component.

  • ESPHome (esp8266): Integrates with ESPHome as a custom component - note that this example is located in the extras directory. Thanks to Dilbert66 for this contribution!

  • Homey: Integrates with Athom Homey and the Homeyduino library, including armed, alarm, and fire states (currently limited to one partition), and zone states. Thanks to MagnusPer for contributing this example!

  • Telegram (esp8266/esp32): Demonstrates sending status updates as push notifications and arming/disarming the security system via a Telegram bot. Supports iOS, Android, and macOS/Windows/Linux desktop notifications (free).

  • Pushover (esp8266/esp32): Demonstrates sending status updates as push notifications via Pushover. Supports iOS, Android, macOS native desktop notifications, and Chrome/Firefox/Safari browser popups ($4.99USD one-time purchase per client platform).

  • Pushbullet (esp8266/esp32): Demonstrates sending status updates as push notifications via Pushbullet. Supports Android, Windows desktop notifications, and Chrome/Firefox browser popups (free). Note that iOS is no longer supported.

  • Pushsafer (esp8266/esp32): Demonstrates sending status updates as push notifications via Pushsafer. Supports iOS, Android, Windows desktop notifications, and Chrome/Firefox/Edge/Opera/Yandex browser popups (€0.99EUR or less per 1000 notifications).

  • Twilio-SMS (esp8266/esp32): Demonstrates sending status updates as SMS text messages via Twilio - thanks to ColingNG for contributing this example!

  • Email (esp8266/esp32): Demonstrates sending status updates as email. Email is sent using SMTPS (port 465) with SSL for encryption - this is necessary on the esp8266/esp32 until STARTTLS can be supported. For example, this will work with Gmail after changing the account settings to allow less secure apps.

    This can be used to send SMS text messages if the number's service provider has an email to SMS gateway - examples for the US:

  • VirtualKeypad-Blynk (esp8266/esp32): Provides a virtual keypad interface for the free Blynk legacy app on iOS and Android, including viewing alarm memory, programming zone lights, and the event buffer. The newer generation Blynk app is not currently supported. Scan one of the following QR codes from within the Blynk app for an example keypad layout:

    Note: Installing Blynk as a local server is recommended to keep control of the security system internal to your network.

  • VirtualKeypad-Web (esp8266/esp32): Provides a virtual keypad web interface, using the esp8266/esp32 itself as a standalone web server, including viewing alarm memory, programming zone lights, and the event buffer. Thanks to Elektrik1 for contributing this example!

  • TimeSyncNTP: Synchronizes and maintains time on PowerSeries panels via an NTP server, including DST adjustments.

  • Unlocker: Finds the 4-digit installer code for PowerSeries panels by checking all possible codes, including handling keypad lockout if enabled. The valid code is output to serial as well as repeatedly flashed with the built-in LED. Arduino checks each code sequentially but esp8266/esp32 may find the code more quickly as they check in order of the most commonly used general 4-digit codes.

  • KeypadInterface: Interfaces directly to DSC PowerSeries and Classic series (tested with PC1500RK) keypads (without a DSC panel) to enable using these as physical inputs for any general purpose. Examples included for interfacing via serial and MQTT. Note that this uses a different wiring setup from the standard Keybus interface, refer to the wiring diagram in the example sketch.

  • KeybusReader: Decodes and prints data from the Keybus to a serial interface, including reading from serial for the virtual keypad. This can be used to help decode the Keybus protocol and is also handy as a troubleshooting tool to verify that data is displayed without errors. For esp8266/esp32, KeybusReaderIP enables connectivity over WiFi.

    See src/dscKeybusPrintData.cpp for all currently known Keybus protocol commands and messages. Issues and pull requests with additions/corrections are welcome!

More DSC projects

Wiring

DSC Aux(+) ---+--- Arduino Vin pin
              |
              +--- 5v voltage regulator --- esp8266 NodeMCU / Wemos D1 Mini 5v pin
                                            esp32 development board 5v pin

DSC Aux(-) --- Arduino/esp8266/esp32 Ground

                        Arduino        +--- dscClockPin (Arduino Uno: 3)
DSC Yellow ---+--- 15k ohm resistor ---|
              |                        +--- 10k ohm resistor --- Ground
              |
              |     esp8266/esp32      +--- dscClockPin (esp8266: D1, GPIO 5 / esp32: 18)
              +--- 33k ohm resistor ---|
                                       +--- 10k ohm resistor --- Ground

                        Arduino        +--- dscReadPin (Arduino Uno: 5)
DSC Green ----+--- 15k ohm resistor ---|
              |                        +--- 10k ohm resistor --- Ground
              |
              |     esp8266/esp32      +--- dscReadPin (esp8266: D2, GPIO 4 / esp32: 19)
              +--- 33k ohm resistor ---|
                                       +--- 10k ohm resistor --- Ground

Classic series only, PGM configured for PC-16 output:
DSC PGM ------+--- 1k ohm resistor --- DSC Aux(+)
              |
              |         Arduino        +--- dscPC16Pin (Arduino Uno: 4)
              +--- 15k ohm resistor ---|
              |                        +--- 10k ohm resistor --- Ground
              |
              |     esp8266/esp32      +--- dscPC16Pin (esp8266: D7, GPIO 13 / esp32: 17)
              +--- 33k ohm resistor ---|
                                       +--- 10k ohm resistor --- Ground

Virtual keypad (optional):
DSC Green ---- NPN collector --\
                                |-- NPN base --- 1k ohm resistor --- dscWritePin (Arduino Uno: 6 / esp8266: D8, GPIO 15 / esp32: 21)
      Ground --- NPN emitter --/
  • The DSC PowerSeries Keybus operates at ~12.6v and the Classic series operates at ~13.75v, a pair of resistors per data line will bring this down to an appropriate voltage for each microcontroller.
    • Arduino:
      • The DSC yellow (clock) line connects to a hardware interrupt pin - for the Uno, these are pins 2 or 3. The example sketches use dscClockPin: 3.
      • The DSC green (data) line can be connected to any of the remaining digital pins 2-12. The examples sketches use dscReadPin: 5 and dscWritePin: 6.
    • esp8266: connect the DSC lines to GPIO pins that are normally low to avoid putting spurious data on the Keybus: D1 (GPIO5), D2 (GPIO4) and D8 (GPIO15). The example sketches use dscClockPin: D1, dscReadPin: D2, dscWritePin: D8. For the Classic series, dscPC16Pin: D7 (GPIO 13).
    • esp32: connect the DSC lines to GPIO pins that do not send signals at boot: 4, 13, 16-39. For virtual keypad, use pins 4, 13, 16-33 - pins 34-39 are input only and cannot be used. The example sketches use dscClockPin: 18, dscReadPin: 19, dscWritePin: 21. For the Classic series, dscPC16Pin: 17.
  • Virtual keypad uses an NPN transistor and a resistor to write to the Keybus. Most small signal NPN transistors should be suitable, for example:
    • 2N3904
    • BC547, BC548, BC549
    • That random NPN at the bottom of your parts bin (my choice)
  • Power:
    • Arduino boards can be powered directly from the DSC panel
    • esp8266/esp32 development boards should use an external voltage regulator set to 5v to the 5v pin:
      • LM2596-based step-down buck converter modules are reasonably efficient and commonly available for under $1USD shipped (eBay, Aliexpress, etc) - these are the modules I use.
      • MP2307-based step-down buck converter modules (aka Mini360) are also available but some versions run hot with an efficiency nearly as poor as linear regulators.
      • Linear voltage regulators (LM7805, etc) will work but are inefficient and run hot - these may need a heatsink.
    • esp8266/esp32 boards can also use an external voltage regulator set to 3.3v to the 3.3v pin - this bypasses the module's onboard voltage regulator. For example, some Wemos D1 mini clones use low current voltage regulators that can cause stability issues. NodeMCU boards are not affected as they use the more powerful AMS1117 regulator.
  • Connections should be soldered, breadboards can cause issues.

Virtual keypad

This allows a sketch to send keys to the DSC panel to emulate the physical DSC keypads and enables full control of the panel from the sketch or other software.

Keys are sent to partition 1 by default and can be changed to a different partition. The following keys can be sent to the panel - see the examples for usage:

  • Keypad: 0-9 * #
  • Arm stay (requires access code if quick arm is disabled): s
  • Arm away (requires access code if quick arm is disabled): w
  • Arm with no entry delay (requires access code): n
  • Fire alarm: f
  • Auxiliary alarm: a
  • Panic alarm: p
  • Door chime enable/disable: c
  • Fire reset: r
  • Quick exit: x
  • Change partition: / + partition number or set writePartition to the partition number. Examples:
    • Switch to partition 2 and send keys: /2 + 1234
    • Switch back to partition 1: /1
    • Set directly in sketch: dsc.writePartition = 8;
  • Command output 1: [
  • Command output 2: ]
  • Command output 3: {
  • Command output 4: }

DSC Configuration

Panel options affecting this interface, configured by *8 + installer code - see the Unlocker sketch if your panel's installer code is unknown. Refer to the DSC installation manual for your panel to configure these options:

  • PC1555MX/5015 section 370, PC1616/PC1832/PC1864 section 377:

    • Swinger shutdown: By default, the panel will limit the number of alarm commands sent in a single armed cycle to 3 - for example, a zone alarm being triggered multiple times will stop reporting after 3 alerts. This is to avoid sending alerts repeatedly to a third-party monitoring service, and also affects this interface. As I do not use a monitoring service, I disable swinger shutdown by setting this to 000.

    • AC power failure reporting delay: The default delay is 30 minutes and can be set to 000 to immediately report a power failure.

  • PC1500/PC1550 Classic series - the following configuration is required to get the security system status:

    • Communicator: Enable in section 12, option 1 to support PC16-OUT mode
    • PC16-OUT: Enable section 13, option 4 to set the PGM output to PC16-OUT mode to send required panel status data on the Keybus.
    • PGM output: Enable section 24, option 08 to set the PGM output to trigger while the system alarm is tripped (works together with PC16-OUT mode).

Notes

  • For OTA updates on esp8266 and esp32, you may need to stop the interface using dsc.stop();:

    void setup() {
      ...
      ArduinoOTA.onStart([]() {
        dsc.stop();
      ...
    
  • Memory usage can be adjusted based on the number of partitions, zones, and data buffer size specified in src/dscKeybus.h or src/dscClassic.h. Default settings:

    • Arduino: up to 4 partitions, 32 zones, 10 buffered commands
    • esp8266/esp32: up to 8 partitions, 64 zones, 50 buffered commands
  • PCB layouts are available in extras/PCB Layouts - thanks to sjlouw for contributing these designs!

  • Support for other platforms depends on adjusting the code to use their platform-specific timers. In addition to hardware pin-change interrupts to capture the DSC clock, this library uses platform-specific timer interrupts to capture the DSC data line in a non-blocking way 250μs after the clock changes (without using delayMicroseconds()). This is necessary because the clock and data are asynchronous - I've observed keypad data delayed up to 160μs after the clock falls.

  • Resource utilization:

    • Arduino: 1 hardware interrupt digital pin, 2 digital pins (+1 for Classic series), Timer1 interrupt
    • esp8266: 3 digital pins (+1 for Classic series), timer1 interrupt
    • esp32/esp32-s2: 3 digital pins (+1 for Classic series), timer0 interrupt

Troubleshooting

If you are running into issues:

  1. Run the KeybusReader example sketch and view the serial output to verify that the interface is capturing data successfully without reporting CRC errors.
    • If data is not showing up or has errors, check the clock and data line wiring, resistors, and all connections. Breadboards can cause issues, connections should be soldered instead.
  2. For virtual keypad, run the KeybusReader example sketch and enter keys through serial and verify that the keys appear in the output and that the panel responds.
    • If keys are not displayed in the output, verify the transistor pinout, base resistor, and wiring connections.
  3. Run the Status example sketch and view the serial output to verify that the interface displays events from the security system correctly as partitions are armed, zones opened, etc.

For general discussions, feature requests, or how-to issues, you can post in Discussions, or post an Issue if it looks like an issue with the library code itself.

References

AVR Freaks - DSC Keybus Protocol: An excellent discussion on how data is sent on the Keybus.

stagf15/DSC_Panel: A library that nearly works for the PC1555MX but had timing and data errors. Writing this library from scratch was primarily a programming exercise, otherwise it should be possible to patch the DSC_Panel library.

dougkpowers/pc1550-interface: An interface for the DSC Classic series.

dsckeybusinterface's People

Contributors

aboulfad avatar bjrolfe avatar bricedet avatar colinng avatar dilbert66 avatar elektrik1 avatar juliustrafi avatar kricon avatar shafr avatar sj-louw avatar taligentx avatar uberflyx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dsckeybusinterface's Issues

Gerber and Ascii drill files

Hi,

I sent the included pcb files in the download to a manufacturer. They came back and said they cant use the files, they need the Gerber and Ascii drill files. Any chance this is available and can be sent to me please?

Installer Code unlocking - testing/feedback

Ok someone had to request this! I’ve been reading in the reference manual about keypad lockout and I can’t figure out if there’s a way to find out if it is enabled, obviously without the installer code.

So I am curious about the suggestion you make about the workaround:

...possibly automatically power-cycling the panel with a relay to skip the lockout time.

That would require knowing that a keypad lockout happened, and an event will be registered, but why do you think that it isn’t saved even if the unit power cycles?

Only one Zone Alarm reported

Only one zone is reported in alarm state, its seems it's only the first tripped zone that is reported

Partition armed away
Zone open: 9
05/17/2018 16:06 | Zone alarm: 9
05/17/2018 16:06 | Partition in alarm
Zone open: 7                              // Zone configured as door entrance delay
Zone restored: 7
Zone open: 1                              // Motion detection - sholud also be Zone alarm state ??
Zone open: 2                              // Motion detection - sholud also be Zone alarm state ??
Zone restored: 1
Zone open: 5                              // Motion detection - sholud also be Zone alarm state ??
Zone restored: 2
Zone open: 2
Zone open: 1
Zone restored: 5
Partition disarmed
Zone restored: 1
Zone restored: 2
05/17/2018 16:07 | Zone alarm restored: 9
Zone open: 7
Zone restored: 9

Log_PowerSerie832_PC5015-ALARM_OnlyOneZone_Status.txt
Log_PowerSerie832_PC5015-ALARM_OnlyOneZone_KeybusReader.txt

Missing release 1.1

Version 1.1 of this library is missing in the "Release" page. Up to 1.0 only is there.

"Web virtual keypad" doesn't work for me

Hi, sorry for my English, I'm using the google translator. I wanted to try "Web virtual keypad", but it doesn't work for me in the browser. I compile the program, but it doesn't work for me, in serial print it shows me
"........
WiFi connected
192.168.1.44
" and nothing more.
I have doubts if the libraries are being loaded correctly since in the IDE it shows me some in black, I enclose sending captures.

Captura de pantalla (1)
Captura de pantalla (2)

mqttPartitionTopic occasionally stays on "pending" (exitDelay) after arming

It's been over 6 months I interfaced POWER1864 all works like a charm. But occasionally mqttPartitionTopic topic stays "pending" and "armed_home" or "armed_away" is not published when panel is armed. Never faced problem with disarming.

runs on old arduino leonardo+eth shield.

Anyone experienced the same issue?

ESP8266 broadcasting unwanted SSID

The esp8266 sketches broadcast a unsecured network / SSID (Example: ESP_123456). This behaviour can and should probably be disabled by using WiFi.mode(WIFI_STA); in the setup routine of the sketch.

Example:

...
  WiFi.begin(wifiSSID, wifiPassword);
  WiFi.mode(WIFI_STA);
  while (WiFi.status() != WL_CONNECTED) delay(500);
...

panel pc585 pc1565 keypad FAP

the F A P buttons of the pc585 and pc1565 keypad do not send any data to the serial port when pressed for 3 seconds

in the pc1832 panel works perfectly

Redirect/replace dscKeybusPrintData stream->print to a buffer

Hi,
I would like to redirect the dscKeybusReader so I can send the print data to whatever output device: serial, file, IP (MQTT, syslog,...)

I know very little of C++, but I managed to get that stream inherits from print class, and dsc.begin sets stream output to Serial. Is there an easy way to redirect the stream to a buffer that can be accessed by a method to direct the print data to the appropriate output device?

What I have done so far is to add a new method and did a global and replace for stream->print with the new method, but realize there must be a cleaner OO way to do this. Any suggestions? Ideally the object/buffer should be accessible in the sketch so the user has control over it and use the “output” of their choice.

I think this would be interesting to add, along with OTA, one can run any example and retrieve detailed logs from the comfort of their sofa:) I’d be more than happy to continue my work and create a PR with some help/guidance.

[Question] - how to stop dscKeybusInterface

Hello! How I can stop dscKeybusInterface? I use nodemcu v3 I want to use OTA, but when my writePIN konnected to the GREEN key-bus wire I can't do OTA, it starts and failed. I my sketch without dsc.start(), keeping all wires connected to panel - ota work fine. Any ideas about it? I use last SDK & Core.

mqttPartitionTopic receives multiple "D" events

Hi,

running the esp MQTT example, I have noticed whenever the motion detectors trigger, the mqttPartitionTopic receives multiple D events (I think 4 D's per trigger). Unsure if this is the intended behaviour of the panel, dsc software or MQTT sketch ?

PS: this is from closed issue #89

mosquitto_sub -t home/dsc/Get/Zone3
0
1
0

1
0
1
0

1
0
mosquitto_sub  -t home/dsc/Get/Partition1
D
D
D
D
D
D
D

D
D
D
D
D
D
D
D
D

D
D
D
D

D
D
D
D

D

D
D
D
D

Blyn QR codes not working

Hello,

QR codes cannot be scanned nor parsed as an image from gallery. Hovering display just never scans it, opening as an image directly - blynk app errors: Not a valid blynk QR code.

Not sure if it is app issue or QR code itself. Tested using newest blynk app from google market on Android device.

Arduino freeze after long run - known problem?

Hi,

I'm using an arduino Uno for this, but after a long time (weeks if not months) it seems unresponsive and the only way to recover is to restart it with power recycle.

Is it possible that dsc.handlePanel(); never returns? I put it into my loop, but loop does not seem working any more.

A way to stop dscKeybusInterface

Hi there,
Is there is a way to stop dscKeybusInterface?
I mean, like dsc.begin but dsc.stop

I am integrating the code with a different Wifi manager (IoTWebconf instead of WiFiManager) and for some reason (that I don´t know) if dscKeybusInterface is started, it fails to connect to WiFi.
So I workarounded starting dscKeybusInterface after Wifi connection is stablished.

if (iotWebConf.getState() == IOTWEBCONF_STATE_ONLINE) {
                if (!DSCBegined){
                    // Starts the Keybus interface and optionally specifies how to print data.
                    // begin() sets Serial by default and can accept a different stream: begin(Serial1), etc.
                    dsc.begin();
                    DSCBegined = true;
                    Serial.println(F("DSC Keybus Interface is online."));
                }
        doDSC();
      }

And then it´s work fine, but if Wifi connection is lost, it will retry connecting with no success because dscKeybusInterface is begined. So I need stop dscKeybusInterface until Wifi connection is restablished and then dsc.begin again.

Can anyone suggest a way to do this?

Thanks in advance for your sugestions.
Best regards.

Issue with Blynk code scanning

Hi,
I'm trying to scan Blync code on my Android (A5 2016) and I have probles as image is very dark itself and when trying to scan from the monitor it is hardly visible, phone doesn't capture it at all.
When I try to download image and open it with Blync it says - not valid QR code.

How did you solve this issue?

Zones 17-32 not working

At first I want to thank for this work. It's exactly what I was looking for.
My alarm has 20 active zones and I found that zones over 16 were not working. After a little debugging I found a bug in the dscKeybusProcessData.cpp file.
In "processPanel_0x34()" where the panelData should be written to zones 17-24, the data are written to zones 9-16. Exactly the same happens with zones 25-32.
To solve this you must modify line 336
openZones[1] = panelData[6];
with
openZones**[2]** = panelData[6];
and line 359:
openZones[1] = panelData[6];
with
openZones**[3]** = panelData[6];

After that all seems to work OK.

Wiring for arming and disarming alarm.

Hi,
Sorry to open an issue just for a question buy I didn´t know how to contact you.
In regards of wiring... I want to arm the alarm with Home Asisstant. Do I need to make the connection with the transistor as indicated for Virtual keypad or not?

In case I need it: I see that the normal connection and the Virtual Keypad connection both uses the same green DSC wire. To use the Virtual Keypad should I replace the 10k resistor wiring with the 1k+transistor connection or should I connect both things to the same wire (leaving both connections at the same time)

Thanks in advance for your answer.

Best regards.

Soft WDT reset in HomeAssistant-MQTT

Hi, on a serial console I am observing soft WDT reset periodically, there are some articles in the net about it, eg. esp8266/Arduino#2866 which suggests issues with watchdog timer, but I don't know how to identify relevant code line for this. Any hints?

08:57:47.938 ->
WiFi connected: 192.168.1.41
08:57:48.963 -> MQTT connected: 192.168.1.30
08:57:48.963 -> DSC Keybus Interface is online.

08:59:35.135 -> Soft WDT reset
08:59:35.135 ->
08:59:35.135 -> ctx: cont
08:59:35.135 -> sp: 3ffefaf0 end: 3ffefd90 offset: 01b0
08:59:35.135 ->
08:59:35.135 -> >>>stack>>>
08:59:35.135 -> 3ffefca0: 00000007 3ffee738 3ffee610 40203ac0
08:59:35.168 -> 3ffefcb0: 3ffefcf0 3ffee610 00000000 40201ddf
08:59:35.168 -> 3ffefcc0: 3ffefcf0 00019a44 3ffee738 402051f4
08:59:35.168 -> 3ffefcd0: 00000000 3fffdad0 3ffee738 402035f2
08:59:35.168 -> 3ffefce0: 2f637364 00746553 3ffee738 40203508
08:59:35.168 -> 3ffefcf0: 514d0401 00000001 3ffe8775 3ffee73c
08:59:35.168 -> 3ffefd00: 3ffe84b4 00000000 3ffee738 40203456
08:59:35.168 -> 3ffefd10: 3fffdad0 0000001f 3ffeed3c 3ffefd40
08:59:35.204 -> 3ffefd20: 3fffdad0 00000001 3ffee738 40201f46
08:59:35.204 -> 3ffefd30: 3fffdad0 00000000 3ffeed60 40201fa8
08:59:35.204 -> 3ffefd40: 3fffdad0 3ffee80c 3ffeed3c 40204d74
08:59:35.204 -> 3ffefd50: 3fffdad0 3ffee80c 3ffeed3c 4020236c
08:59:35.204 -> 3ffefd60: 00000000 00000000 00000001 3ffeed68
08:59:35.238 -> 3ffefd70: 3fffdad0 00000000 3ffeed60 4020501c
08:59:35.238 -> 3ffefd80: feefeffe feefeffe 3ffeed70 40100718
08:59:35.238 -> <<<stack<<<

08:59:35.272 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
08:59:35.272 ->
08:59:35.272 -> load 0x4010f000, len 1384, room 16
08:59:35.272 -> tail 8
08:59:35.272 -> chksum 0x2d
08:59:35.272 -> csum 0x2d
08:59:35.272 -> v3ffe88b0
08:59:35.272 -> ~ld

08:59:35.505 ->
WiFi connected: 192.168.1.41
08:59:36.516 -> MQTT connected: 192.168.1.30
08:59:36.516 -> DSC Keybus Interface is online.

update
in tests I identified moment when it happens - each time when I try to send 1A over MQTT

Virtual keypad keys

Hi, i do not quite understand how the virtual keypad keys works ... So the code set in the virtual keyboard will put the panel under guard?

Sorry for my english, i'm using an translator

Homeassistant sketch not publishing status back to MQTT topics

For some reason I am able to arm/disarm (write to panel) via Homeassistant and Homebridge, but nothing seems to be coming into the dsc/Get/ZoneX/# mqtt topics (reading from panel then posting to these zone topics), for zone status... Do you maybe have any idea...?

Further testing seems that the Arduino reads the incoming messages in the dsc/Set topic fine. It then successfully executes the panel "A", "S" and "D" commands, but never posts the status back to the dsc/Get topic so that armed status can be read by Homeassistant/Homebridge. The same goes for the dsc/Get/ZoneX topics. The Arduino does not publish zone updates there. I am testing with the sketch in pull request: #15

HomeKit Security System Support

Hi,
this is to capture our discussion and progress on how to properly update HomeKit SecuritySystem Service when a change happens in the Alarm system (accessory to Homekit)

To prove and discover how it is supposed to work, I coded a simple HAP-Node script, that adds the SS service/acc and listens on MQTT for commands.

In order to get HomeKit SS icon to go from OFF to Arming then to Home, the sketches in this library have to send over to MQTT:

Solution 1: The "exit in progress" (not done) and then "SA" (done) as they happen on the Security Panel to mqttPartitionTopic. (In the included short video, I simulated this library sketches by sending EX for Exit delay in progress and SA for STAY ARM using mosquitto_pub.)

THEN the corresponding HomeKit script (HAP-Node, HomeBridge, MQTTThing, ...) has to handle the exit and different arming types by updating the respective SecuritySystem service characteristics [SecuritySystemCurrentState, SecuritySystemTargetState] (Issue #126 )

Solution 2 OR this library sketch publishes SA to two different MQTT topics getTargetState then to getCurrentState, first one corresponding to exit delay in progress, the second to indicate system is armed. The HomeKit script then updates the appropriate characteristics.

Depending on the chosen solution, the https://github.com/taligentx/dscKeybusInterface/blob/master/examples/esp8266/Homebridge-MQTT/Homebridge-MQTT.ino needs to send some payload to indicate there is an exit in progress. Or publish SA to those two homekit topics...

[QUESTION] support for MQTT+Openhab

I have tried to use the ESP8266 HomeAssistant-MQTT.ino and tried to connect it with OpenHab. It did not work out, I do not know why.. Would it be a lot of work to make an example code for OpenHab through MQTT?

[Enhancement] Init value for Fire and Alarm status

WAIT - I WILL INSTEAD TRY TO HAVE MY OWN INIT IN THE BEGINING OF THE LOOP, IT MAY BE BETTER IF THIS IS CONTROLLED BY RESPECTIVELY IMPLEMENTATION

Provide an init value for at least Fire and Alarm at startup, meaning let the Change flag be true once.

  • dsc.partitionAlarmChanged
  • dsc.fireStatusChanged

The logic as of today provides updates only if there has been a status change. In the Homey app there is an absence of the status in the Fire and Tamper alarm device since nothing is provided. The status change for these are quite rare!

It may be needed to have a minor delay, or trigg on another status change in order to ensure listening systems such Homey is established.

// Publish alarm status to Homey
    if (dsc.partitionAlarmChanged) {
      dsc.partitionAlarmChanged = false;  // Resets the partition alarm status flag
      if (dsc.partitionAlarm) Homey.setCapabilityValue("alarm_tamper", true);
      else Homey.setCapabilityValue("alarm_tamper", false);
    }

esp8266 KeybusReader error / BLYNK Zones 17-64 problem

Hi,

Serial output

DSC Keybus Interface is online.
3.00: [0x00] Unrecognized data[CRC OK]

all connect properly (i think) using bc547b (cross collector and emiter in ori schematic diagram) this same problem when use sketch VirtualBlynk. In serial see only DSC Keybus Interface is online or nothing. Connected with server, blynk aplication connected to server properly but nothing works when zone is open or using keyboard. Whats going on? I mistake something? I using esp 12E not nodemcu (waiting for delivery).

QR code with 64 zones didn`t working i send you PM about problem. Hope you understand.

P.S. I use PC5020 + extended zone module pc5108 ( 4 pcs conected at this moment, but have 7 or 8 pcs ) 2 x LCD keyboard and PGM 5208?

P.S 2 Today i did next module for esp8266 with bc547b all pinouts is ok, on diffrent keybus reader sketch from dj slow library in arduino works ok. I think the problem is on sketch or esp. Any ideas?

P.S. 3
No WAI! i read the sketch again and see the problem. Problem is pin configuration, i have naked esp8266 12e and change the pin configuration

#define dscClockPin 5 ( change from D1) // esp8266: D1, D2, D8 (GPIO 5, 4, 15)
#define dscReadPin 4 (change from D2) // esp8266: D1, D2, D8 (GPIO 5, 4, 15)
#define dscWritePin 15 (change from D8) // esp8266: D1, D2, D8 (GPIO 5, 4, 15)

Now it works with some problems, in 32 zones there is a little buggy for me (can`t report zone 17-32 and up like this issue #31) - only info on lcd "zones open" but no light buttons , 1-16 work ok, I need 64 zones for my alarm. Qr code in sketch for 64 zones is faulty. Please update link or clone and share good blynk with 64 zones. In blynk can i use 2 buttons next or prev?

setTime not working, triggered an alarm

UPDATE: This turned out to be a bug in dsc.write(char*). See #100 (comment) below

I am using the develop branch.

setTime doesn't seem to be working correctly. After calling it, the panel time didn't change. Example:

dsc.setTime(2019, 6, 1, 1, 1, "accesscode");

In fact, I tried this multiple times, and suddenly my alarm went off. Probably not the most popular house in the neighbourhood now.

When the alarm was blaring, I ran to the physical keypad and entered my access code once. It didn't stop the alarm. In panic I pressed Reset, and entered the access code again and again.... lol. Eventually the alarm noise stopped and the "Ready" LED was on.

I observed two problems:

  1. The alarm went off :), and the time didn't get updated.

  2. I noticed that the partition 1's alarm flag is still set to 1. It doesn't seem to have gotten reset back to 0 (like the openZone for example) after the alarm has been disarmed. Is this supposed to be reset to 0 by my sketch after reading it?

Why did my alarm go off? Was it something to do with setTime not working for me?

Have you tested setTime() on your system, e.g. repeatedly / multiple times etc?

[0x16] Unknown panel ....

Hello
some additional data for DSC PC1565 panel.
4704.33: 00010110 0 00001110 00100010 11100110 00101100 [0x16] Unknown panel | Zone wiring: EOL | *8 programming

also in installation mode in section [903] Module Supervision Field:
19035.68: 00000101 0 10000001 11101111 10010001 11000111 [0x05] Partition 1: Ready Backlight - Unrecognized data: 0xEF | Partition 2: disabled
19035.75: 00001010 0 10000001 11101111 01000001 00000000 00000000 00000000 00000000 10111011 [0x0A] Ready Backlight - Unrecognized data: 0xEF | Zone lights: 1 7

  • reports zones with broken supervising.

br
Zahari

PC1616/PC1832/PC1864 series support - data logs needed

Post logs here as captured by the KeybusReader example for the missing data listed below. In KeybusReader, set dsc.hideKeypadDigits = true; to keep access codes typed in to the panel obscured for posting publicly.

Changes:

  • 2018.07.17: Removed zones 33-64 with DEOL resistors fault and tamper
  • 2018.06.18: Removed virtual keypad partitions 3-8
  • 2018.06.10: Added zones 33-64 fault and tamper
  • 2018.06.04: Added: partitions 3-8 keypad keys. Removed zones 33-64 status, zones 33-64 alarm.
  • 2018.06.03: Removed: multiple partitions (again), fire, arrow keys.
  • 2018.05.31: Re-added multiple partitions. Added: fire, arrow keys.
  • 2018.05.23
    • Completed: PC1616/PC18x partition 1 armed, partition 1 alarm, zones 1-32 status, zones 1-32 in alarm
    • Removed: multiple partitions, zone expander decoding - these will require hands-on testing.
  • 2018.05.09: Completed: zone expander zones 9-15
  • 2018.05.07: Added zone expander request, PC1616/PC18x keypad keys

[Question] - esp8266 pin configuration

I'm a little bit confused regarding esp8266 pins to use since there is a difference in sketches vs. decriptions.
According to your description the following pins shall be used (esp8266: D1,D2,D8), but in the Status and KeybusReader sketch D9 is used!

In Status and Keybus Reader sketch
#define dscClockPin 3 //esp8266 v1.0 D9
#define dscReadPin 4 //esp8266 v1.0 D2
#define dscWritePin 5 //esp8266 v1.0 D1

In Status-MQTT-Homebridge sketch
#define dscClockPin D1
#define dscReadPin D2
#define dscWritePin D8

also - I assume it is possible to define either Dx or GPIOx, example GPIO 5 or D1

HTTP Server Example -Arm/Disarm not working

Good morning
I have (almost) successfully implemented HTTP Server example. Virtual keypad reads all messages and numeric buttons also write back into the key bus, however all the other "combo" buttons (stay arm, arm, etc. ) do not work.
When you press those buttons , it beeps on the virtual keypad and the serial output only sends open/close braces {}.
I have a PC1616 system
Thanks!

Request: pereodical status update for Home Assistant

Hello!
It's more feature request: could HASS sketch be modified to send pereodical status update to MQTT? Cause you will loose control from "alarm control panel" if HASS will be restarted after power failure (so no arm/disarm buttons).

P.S. 1:
Confirming work on PC1565

P.S. 2:
Also for Wemos D1 R1 (!) actual pins are:
D3 (5), D4 (4), D10 (15)
and board can be powered directly from AUX via Vin

P.S. 3:
what is meaning of 1kOhm resistor in connection scheme to transistor? It's also working without it (accidentally forgotten to add it when was rewiring)

Telegram bot

Hi, no one tried to use this library with the Telegram bot to control the alarm and receive the event?
I want to try, but not knowing where to start ... I am not very good at programming.

[QUESTION] Zone Expander

GREAT WORK!

Did anyone found the way to also act as a zone expander? Would be very nice to add "virtual" sensors or zones. I couldn't find any reference/information on how zones expanders work. If someone has any guess we might work on it! Thanks in advance.

[Question] - Is possible to get user id from panel?

@taligentx, can we get the user id from panel? Is it possible?
For example,
1)In panel we program user1 have code 0001, user2 have code 0002.
2)when panel is armed/disarmed access code entered

Can we by entered code or other data determinate which user armed/disarmed panel?
On real keypad entered code 0001 - we get user1, entered code 0002 - we get user2 in sketch.

Store/update panel time

Hi, do we have any possibility to read values from display.
One issue I am facing - 2x per year we are shifting from Summer to Winter time and vice verse. (Plus my clock is not accurate) I would be happy to get an access to current data/time setting and if they are shitted, then push an update to correct one

Pushbullet esp8266 more notification

Hi @taligentx ,

I upload sketch with pushbullet (change only messages to my language). It works, but i need a little more notification to add ( alarm armed, alarm disarmed, arm AWAY, arm STAY, sabotage zones. I try to add this messages, but did not work. I do not know how to add this notification properly. I try only copy paste from yours sketch and change values.

I add it like this but no working, sketch comile without problem

   if (dsc.armed[partition]) {
    dsc.armed[partition] = false;  // 

    char pushMessage[42] = "Armed partycja ";
    char partitionNumber[2];
    itoa(partition + 1, partitionNumber, 10);
    strcat(pushMessage, partitionNumber);

    if (dsc.armedChanged[partition]) sendPush(pushMessage);
    else sendPush("Dissarmed");
   }

    if (dsc.armedAway[partition]) {
    dsc.armedAway[partition] = false;  // 

    char pushMessage[44] = "AWAY ";
    char partitionNumber[2];
    itoa(partition + 1, partitionNumber, 10);
    strcat(pushMessage, partitionNumber);

    if (dsc.armedStay[partition]) sendPush(pushMessage);
    else sendPush("STAY");
   }

The next question is possible add a notification of 24 hours waterflow line, 24 hours gas line, etc.?

Edit:
I see another problem with sketch. When i lost AC power and get it again, i don`t see pushbullet notification? It works only when alarm is armed?

ESP8266 freezes after few days

I made your project (VirtualKeypad-Blynk.ino), it is very useful and powerful. I use your ESP8266 blynk example, I havent modified it. The ESP sends data to my Blynk server which is on my local area network, working on an Orange PI Zero. I have also made your pcb with a 2n2222 transistor. Everything working fine for few days, 2 or 3 days. After the ESP freezes and need to hard reset. After reset it, working again. I have made some investigation, I have added a terminal and do some printing. It say "Keybus buffer overflow". I increased the dscBufferSize in the library: src/dscKeybusInterface.h. Now I havent got buffer overflow, but it freezes as before. Does anybody have the same problem? Or yours working for months or years? I have 5v swithing regulator like this:
https://www.banggood.com/3A-UBEC-Module-Low-Ripple-Bluesky-Mini-Switch-Mode-DC-BEC-5V-12V-2-6S-Supply-p-993056.html?rmmds=search
, and I am powering the ESP on the Vin pin with 5V.

Please help me!

DSC 1832: 0xE6, 0xCE - Unrecognized data

Hello,
first, amazing work, thank you !
I have just connected my module and ran the reader sketch, I get lot's of things working but notice these two unrecognized data that I found you referenced in the below linked issue comment. Those two events seem to repeat few times during the time I connected the module I built.

FYI: my panel is connected to a monitoring company using cellular connection, has 9 zones (?) and panel model is RFK5500-433 (supports wireless RC).

I will send the entire log file if there's another run you require to debug this. Thank you again :)

  433.47: 11100110 0 00011010 01000000 00000000 00000000 00000001 00000001 00000000 00000000 01000010 [0xE6] 0x1A: Unrecognized data
  433.47: 11111111 1 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000000 [Keypad] Unrecognized key: 0xFF

...
  433.57: 11001110 0 00000001 00010000 00000000 00000000 00000000 11011111 [0xCE] Unrecognized data
  433.63: 11001110 0 01000000 11111111 11111111 11111111 11111111 00001010 [0xCE] Partition 1,2 activity

There are some other "errors":

  225.67: 00010110 0 00001110 01000001 11110101 01011010 [0x16] Unknown panel | Zone wiring: NC | Interval 4m
  191.06: 11111111 1 11111111 11111111 11111110 11111111 11111111 11111111 11111111 11111111 [Keypad] Unknown Keybus notification

I've mostly decoded 0xE6 and 0xEB and have pushed a new develop branch for feedback and testing, supporting partitions 2-8, zones 33-64, and writing to partitions 1 and 2.
...
Originally posted by @taligentx in #2 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.