Está en la página 1de 31

taligentx / Interfaz dscKeybus Público

Código Problemas 17 Solicitudes de extracción 2 Discusiones Comportamiento Seguridad Perspectivas


Maestro
Ir al archivo Código Sobre

Una biblioteca

Clon Arduino/esp8266/esp32 para
versión 3.0 de taligentx … on 18 Mar
397
interactuar directamente con los
HTTPS CLI de GitHub
ejemplos Versión 3.0 hace 3 meses sistemas de seguridad DSC.

extras Agregue archivos gerber para Wemos D1 Mini shield hace 2 años
https://github.com/taligentx/dscKeybusInte #
automatización del hogar
#
iot
#
arduino

Use Git o pague con SVN usando la URL web. #


esp8266
#
Telegram-bot
#
puente de origen
origen Versión 3.0 hace 3 meses
#
esp32
#
arduino-biblioteca
#
dsc
LICENCIA Compromiso inicial Abrir con GitHub Desktop hace 4 años
#
asistente de hogar
#
openhab

LÉAME.md Versión 3.0 hace 3 meses #


Página principal de Google
#
kit de casa
Descargar ZIP
palabras clave.txt KeypadInterface: agregar compatibilidad con teclado d… hace 16 meses #
parpadear
#
hogareño
#
esp8266-arduino

#
sistema de seguridad
#
seguridad de casa
biblioteca.json Versión 3.0 hace 3 meses
#
esp32-arduino
#
esfoma

biblioteca.propiedades Versión 3.0 hace 3 meses



Léame


Licencia GPL-3.0


345 estrellas


50 viendo
Interfaz de bus de teclado DSC
95 tenedores
Lanzamientos
7

3.0 Más reciente


on 18 Mar

+ 6 lanzamientos

Colaboradores 12

Esta biblioteca conecta directamente los microcontroladores Arduino, esp8266, esp32 y


esp32-s2 con los sistemas de seguridad de la serie DSC PowerSeries y Classic para la
integración con la automatización del hogar, control remoto como un teclado virtual,
notificaciones sobre eventos de alarma, desbloqueo de códigos de instalador y emulación de
Idiomas
paneles DSC para use teclados DSC como dispositivos de entrada de propósito general.

Esto permite que las instalaciones de sistemas de seguridad DSC existentes conserven las C++ 97,4%
C 2,6%

funciones y la confiabilidad de un sistema cableado mientras se integran con dispositivos y


software modernos por menos de $5 USD en componentes.

Los ejemplos incorporados se pueden usar tal cual o como base para adaptarse a otros usos:

Integración domótica: Home Assistant , Apple HomeKit y Siri , Google Home , OpenHAB ,
Athom Homey
Control remoto: interfaz web, aplicación móvil Blynk , bot de Telegram (con
activación/desactivación remota a través de chat)
Notificaciones: Pushover , PushBullet , Pushsafer , Twilio SMS , TinyGSM SMS , correo
electrónico
Interfaz de teclado: emula un panel DSC para conectar teclados DSC como dispositivos
de entrada físicos para cualquier propósito general, sin un panel DSC.
Desbloqueo del código de instalador: búsqueda automática de códigos para
desbloquear paneles con códigos de instalador desconocidos

Ejemplos de integraciones:

Casa de Apple y Siri :

Asistente de hogar :

OpenHAB MQTT:

Teclado virtual de la aplicación Blynk :

Teclado virtual web:

robot de telegrama :

Inicio rápido
1. Instale la biblioteca de la interfaz Keybus de DSC:
Arduino IDE: Buscar DSC en el Administrador de bibliotecas - Sketch > Include
Library > Manage Libraries

PlatformIO IDE: busque DSC en el registro de la biblioteca de PlatformIO

PlataformaIO CLI: platformio lib install "dscKeybusInterface"


Alternativamente, git clone o descargue el repositorio .zip en el directorio de la
biblioteca Arduino/PlatformIO para realizar un seguimiento de los últimos cambios.
2. Seleccione, configure y cargue uno de los bocetos de ejemplo en el microcontrolador:

3. Conecte el microcontrolador al Keybus DSC según el diagrama de cableado con las


resistencias adecuadas (y un transistor si desea controlar el sistema).

¿Por qué?
Tenía : Un sistema de seguridad DSC que no estaba siendo monitoreado por un servicio de
terceros.

Quería : Notificación si se activa la alarma.

Estaba interesado en encontrar una solución que accediera directamente al par de líneas de
datos que usa DSC para su protocolo propietario Keybus para enviar datos entre el panel, los
teclados y otros módulos (en lugar de usar el módulo serial DSC IT-100). Aprovechar las
líneas de datos es una tarea ideal para un microcontrolador y también presentó una
oportunidad para trabajar con las plataformas Arduino y FreeRTOS (a través de esp-open-rtos
).

Si bien ha habido una excelente discusión sobre el protocolo DSC Keybus y varios proyectos
existentes, hubo algunos problemas que quedaron sin resolver:
Captura de datos Keybus propensa a errores.
Decodificación de datos limitada: hubo un buen progreso para los estados
armado/desarmado y el estado de zona parcial para una sola partición, pero por lo
demás, la mayoría de los datos no se descodificaron (en particular, faltaba el estado
activado por alarma).
Solo lectura: no se puede controlar el Keybus para que actúe como un teclado virtual.
No hay implementaciones para hacer un trabajo útil con los datos.

Esta biblioteca utiliza una combinación de interrupciones de hardware y temporizador para


capturar con precisión los datos de Keybus y ha llevado a la ingeniería inversa de gran parte
del protocolo Keybus.

Características
Supervise el estado de todas las particiones:
Activación de alarma, armado/desarmado, retardo de entrada/salida, activación de
incendio, teclas de pánico del teclado
Supervisar el estado de las zonas:
Zonas abiertas/cerradas, zonas en alarma
Supervisar el estado del sistema:
Listo, problema, alimentación de CA, batería
Monitorear el estado de las salidas PGM 1-14
Teclado virtual:
Escribir claves en el panel para todas las particiones
Salidas de comando del panel de activación
Interfaz de teclado:
Emula un panel DSC para usar los teclados de las series DSC PowerSeries y Classic
como dispositivos de entrada físicos para cualquier propósito general, sin necesidad
de un panel DSC.
Hora del panel: recupere la fecha/hora actual del panel y configure una nueva
fecha/hora (incluido un ejemplo con sincronización NTP)
Desbloqueo del código de instalador del panel: determine el código de instalador del
panel de 4 dígitos
Expansor de zona virtual: la rama del expansor puede emular un módulo expansor de
zona DSC para agregar zonas al sistema de seguridad que son manejadas por el
microcontrolador. ¡Gracias a Dilbert66 por esta contribución!
Interfaz Keybus directa:
No requiere la interfaz serial DSC IT-100 .
Diseñado para una decodificación de datos y un rendimiento fiables:
Interrupciones de pin GPIO de hardware e interrupciones de temporizador para una
sincronización precisa de la captura de datos
Almacenamiento en búfer de datos: ayuda a evitar la pérdida de datos de Keybus si
el boceto está ocupado
Amplia decodificación de datos: la mayoría de los datos de Keybus, como se ve en la
guía del desarrollador de la interfaz de datos DSC IT-100, se han diseñado de forma
inversa y se han documentado en formato src/dscKeybusPrintData.cpp .
Código sin bloqueo: permite que los bocetos se ejecuten lo más rápido posible sin
usar delay o delayMicroseconds
Sistemas de seguridad soportados:
DSC PowerSeries : todos los paneles son compatibles, probados con: PC585,
PC1555MX, PC1565, PC1565-2P, PC5005, PC5010, PC5015, PC5020, PC1616, PC1808,
PC1832, PC1864
Serie clásica DSC : PC1500, PC1550, PC2550
Requiere configurar el panel a través de la programación *8 para habilitar PC16-
OUT: sección 19, opción 4.
PC2500 y PC3000 no se han probado, publique un problema si puede probar
estos paneles.
El DSC PowerSeries renombrado (como algunos sistemas ADT) también debería
funcionar con esta interfaz.
Sistemas de seguridad no soportados:
DSC Alexor (PC9155) es completamente inalámbrico y no tiene una interfaz Keybus
accesible.
La serie DSC Neo utiliza un protocolo de datos cifrados de mayor velocidad (Corbus)
que actualmente no es compatible.
Otras marcas (que no son sistemas DSC renombrados) usan protocolos diferentes y
no son compatibles.
Para Honeywell Ademco Vista 15P/20P, consulte el proyecto esphome-vistaECP
de Dilbert66
Para los sistemas Paradox, consulte el proyecto paradox-esp8266 de liaan
Microcontroladores compatibles:
Arduino :
Tableros: Uno, Mega, Leonardo, Mini, Micro, Nano, Pro, Pro Mini
Placas basadas en ATmega328P, ATmega2560 y ATmega32U4 a 16Mhz
esp8266:
Placas de desarrollo: NodeMCU v2 o v3, Wemos D1 Mini, etc.
Incluye soporte de marco Arduino y WiFi por ~ $ 3 USD enviados.
esp32:
Placas de desarrollo: NodeMCU ESP-32S, Doit ESP32 Devkit v1, Wemos Lolin
D32, etc.
Incluye compatibilidad con el marco Arduino (se requiere v2.0.2 o más
reciente), dos núcleos, Wi-Fi y Bluetooth por ~$5 USD enviados.
esp32-s2:
Incluye compatibilidad con el marco Arduino (se requiere v2.0.2 o posterior) y
WiFi.
Características posibles (¡PRs bienvenidos!):
Emulación DSC IT-100
Desbloquear códigos de instalador de 6 dígitos

Notas de lanzamiento
3.0
Nuevo: Soporte de panel de la serie DSC Classic: PC1500, PC1550, PC2550
Nuevo: KeypadInterface y KeypadInterface-MQTT bocetos de ejemplo: emule un
panel DSC para conectar teclados DSC PowerSeries y Classic como dispositivos de
entrada físicos para cualquier propósito general, sin necesidad de un panel DSC.
Nuevo: HomeKit-HomeSpan boceto de ejemplo (esp32): integre directamente con
Apple HomeKit como un accesorio independiente nativo usando HomeSpan
Nuevo: Bocetos de ejemplo de notificaciones Pushover y Pushsafer para
esp8266/esp32
Nuevo: compatibilidad con microcontrolador esp32-s2
Nuevo: el código se reestructuró para admitir nuevas funciones a partir de bocetos
utilizando indicadores #define: habilita la compatibilidad con la serie Classic y
KeypadInterface .

Actualizado: Homebridge-MQTT admite cambiar los modos armados mientras está


armado
Actualizado: se agregó el certificado raíz TLS a Twilio-SMS
Actualizado: eliminado en desuso handlePanel()
Corrección de errores: VirtualKeypad-Web notas actualizadas para cambiar a esta
bifurcación de ESPAsyncWebServer para resolver bloqueos con clientes iOS y
macOS.
Corrección de errores: Pushbullet boceto de ejemplo actualizado con la huella
digital del certificado de seguridad TLS
Corrección de errores: solución para el problema de protocolo de enlace TLS esp32
ascendente que impide establecer una conexión TLS más de una vez.
Corrección de errores: se corrigieron Homebridge-MQTT los estados de retraso de
salida de manejo mientras se están armando varias particiones
Corrección de errores: los códigos de acceso resueltos no se actualizan al desarmar,
se cambiaron los códigos de acceso de armado para que se actualicen antes de que
cambie el estado de armado
2.0
Nuevo: boceto de ejemplo de bot de Telegram
Nuevo: boceto de ejemplo de integración de OpenHAB usando MQTT
Nuevo: Unlocker boceto de ejemplo: determina el código del instalador del panel
Nuevo: TimeSyncNTP boceto de ejemplo: utiliza NTP para establecer
automáticamente la hora del panel
Nuevo: ejemplo de integración ESPHome (ubicado en el extras directorio) -
¡gracias a Dilbert66 por esta contribución!
Nuevo: TinyGSM-SMS boceto de ejemplo: envía el estado por SMS con un módem
GSM. ¡Gracias a jvitkauskas por esta contribución!
Nuevo: el KeybusReaderIP boceto de ejemplo permite el acceso a datos de Keybus a
través de IP, ¡gracias a aboulfad por esta contribución!
Nuevo: compatibilidad con microcontrolador esp32: requiere Arduino-esp32 v1.0.5-
rc6 o posterior
Nuevo: Funciones para bocetos:
ready y disabled rastrear el estado de la partición

setTime() establece la fecha y la hora del panel


pgmOutputs[] rastrea el estado de las salidas PGM 1-14

timestampChanged realiza un seguimiento cuando el panel envía una marca de


tiempo
accessCode rastrea el código de acceso utilizado para armar/desarmar

resetStatus() desencadena una actualización de estado completa de todas las


particiones y zonas, por ejemplo, después de la inicialización o una conexión de
red perdida.
pauseStatus pausa las actualizaciones de estado si se establece en true , por
ejemplo, retener los cambios de estado durante una conexión de red perdida
stop() desactiva la interfaz, por ejemplo, antes de iniciar las actualizaciones
OTA
appendPartition() en bocetos de ejemplo simplifica la adición de números de
partición a los mensajes
panelVersion rastrea el número de versión del panel

Nuevo: manija *1 bypass/re-activate utilizada para cambiar el modo


presente/ausente mientras está armado
Actualizado: VirtualKeypad-Blynk y VirtualKeypad-Web muestra la memoria de
alarma, las luces de zona de programación y la memoria de eventos
Actualizado: HomeAssistant-MQTT, Homebridge-MQTT, OpenHAB-MQTT incluye el estado
de las salidas PGM 1-14
Actualizado: escrituras de teclado virtual
write() para múltiples claves ahora se puede configurar para bloquear hasta
que la escritura se complete con un parámetro opcional si la matriz de
caracteres es efímera
Por lo general, ya no es necesario verificar writeReady en el boceto, la
biblioteca se bloqueará si hay una escritura anterior en curso; esto se puede
verificar si el boceto necesita esperar hasta que la biblioteca pueda realizar una
escritura sin bloqueo.
Actualizado: HomeAssistant-MQTT Sketch ahora incluye brazo nocturno y para
esp8266/esp32 incluye un sensor con mensajes de estado de partición
Actualizado: procesamiento de estado de partición ampliado para mejorar la
detección del estado del panel al inicio
En desuso: handlePanel() ahora loop()
Corrección de error: Se resolvió la tecla auxiliar/pánico del teclado, la alimentación
de CA y el estado de la batería en PC585/PC1555MX
Corrección de errores: el boceto resuelto Homebridge-MQTT no maneja los estados de
destino de HomeKit
Corrección de errores: problemas de tiempo resueltos al llamar
consecutivamente write
1.2
Nuevo: Ejemplo de interfaz web de teclado virtual, ¡gracias a Elektrik1 por esta
contribución!
A partir de esp8266 Arduino Core 2.5.1, es posible que deba actualizar
manualmente el complemento esp8266FS para cargar SPIFFS.
Nuevo: admite CPU esp8266 que se ejecuta a 160MHz; esto ayuda a los bocetos que
usan TLS a través de BearSSL
Actualizado: el ejemplo de HomeAssistant-MQTT incluye el estado de
disponibilidad, ¡gracias a bjrolfe por esta contribución!
Actualizado: Lista de paneles DSC probados: PC585, PC1565, PC5005, PC1808
Actualizado: diagramas de cableado de alimentación esp8266
Actualizado: lista de módulos esp8266
1.1
Nuevo: Zonas 33-64 sabotaje y decodificación de fallas
Nuevo: ejemplo de notificación push usando Twilio , ¡gracias a ColingNG por esta
contribución!
Corrección de error: el estado de las zonas 17-32 se almacenó incorrectamente
1.0
Nuevo: ejemplo de boceto de teclado virtual Blynk y ejemplos de diseño de
aplicaciones
Nuevo: soporte de teclado virtual para salidas de comando de terminales PGM 1-4
Nuevo: Estado keybusConnected para verificar si se están recibiendo datos del panel
DSC
Nuevo: decodificación de alarma de entrada auxiliar
0.4
Nuevo: soporte de teclado virtual para las particiones 3-8, gracias a jvitkauskas por
contribuir con los registros necesarios
Nuevo: Admite placas Arduino basadas en ATmega32U4 (cambiadas a AVR Timer1)
Cambiado: nombres de ejemplo simplificados, configuraciones, números de versión
agregados
Corrección de error: el teclado virtual escribe con las particiones 5-8 habilitadas
Corrección de error: la tecla de alarma F/A/P escribe con
processModuleData deshabilitado

Corrección de errores: error de ejemplo de HomeAssistant


configuration.yaml para alarm_control_panel

0.3
Nuevo: Estado para particiones 2-8, zonas 33-64
Nuevo: soporte de teclado virtual para la partición 2
Nuevo: boceto de ejemplo de integración de Athom Homey , ¡gracias a MagnusPer
por esta contribución!
Nuevo: diseños de PCB, aportados por sjlouw
Nuevo: Número configurable de particiones y zonas para personalizar el uso de la
memoria: dscPartitions y dscZones en dscKeybusInterface.h
Nuevo: KeybusReader decodificación de comandos 0xE6 y 0xEB
Cambiado: Dividir ejemplos por plataforma
Cambiado: los bocetos de Arduino ya no usan el pin 4 para evitar un conflicto con la
tarjeta SD en los protectores de Ethernet.
Cambiado: ejemplos de MQTT actualizados con campos de nombre de usuario y
contraseña
Cambiado: processRedundantData ahora verdadero de forma predeterminada para
evitar el almacenamiento de datos repetitivos, reduce el uso de memoria.
Nota: Esta versión cambia los métodos de la biblioteca para adaptarse a múltiples
particiones, los bocetos existentes deberán actualizarse para que coincidan con los
nuevos bocetos de ejemplo.
0.2
Nuevo: Estado para las zonas 9-32
Nuevo: boceto de ejemplo de integración de Home Assistant
Nuevo: almacenamiento en búfer de datos del panel, se agrega dscBufferSize para
dscKeybusInterface.h permitir la configuración de cuántos comandos del panel se
almacenan en el búfer para personalizar el uso de la memoria (usa 18 bytes de
memoria por comando almacenado en el búfer).
0.1 - Versión inicial

Ejemplos
Los ejemplos incluidos demuestran cómo usar la biblioteca y pueden usarse tal cual o
adaptarse para integrarse con otro software. Publique un problema/solicitud de extracción si
ha desarrollado (y le gustaría compartir) un boceto/integración que otros puedan usar.
Estado : procesa e imprime el estado del sistema de seguridad en una interfaz serial,
incluida la lectura de serial para el teclado virtual. Esto demuestra cómo determinar si el
estado del sistema de seguridad ha cambiado, qué ha cambiado y cómo tomar medidas
en función de esos cambios. Publique un problema/solicitud de extracción si tiene un
uso para estados adicionales del sistema; por ahora, solo se rastrea un subconjunto de
todos los comandos decodificados para el estado para limitar el uso de la memoria:

Particiones listas
Particiones armadas fuera/en casa/desarmadas
Particiones en alarma
Retardo de salida de particiones en progreso
Retraso de entrada de particiones en progreso
Alarma contra incendios para mamparas
Zonas abiertas/cerradas
Zonas en alarma
Salidas PGM 1-14
Teclado de alarma de fuego/auxiliar/pánico
Obtener/establecer la fecha y hora del panel
Número de código de acceso de usuario (1-40)
Alimentación de CA del panel
bateria panel
Problema del panel
Keybus conectado
HomeKit-HomeSpan (esp32): Se integra directamente con Apple HomeKit como un
accesorio nativo (para la aplicación Home y Siri) usando HomeSpan , sin necesidad de un
servicio o dispositivo por separado. Demuestra el armado/desarmado de particiones,
estado de zonas, alarmas de incendio, estado de salidas PGM y salidas de comando del
panel de control.

Para esp8266, la biblioteca dscKeybusInterface-RTOS incluye una implementación


nativa de HomeKit que se ejecuta directamente en el esp8266, sin necesidad de un
dispositivo independiente que ejecute MQTT o Homebridge.

Homebridge-MQTT : interactúa con Homebridge a través de MQTT para integrarse con


Apple HomeKit (incluida la aplicación iOS Home y Siri) y Google Home . Demuestra el
armado/desarmado de particiones y para HomeKit, viendo el estado de zonas, salidas
PGM y alarmas de incendio.

HomeAssistant-MQTT : Interfaces con Home Assistant a través de MQTT. Demuestra el


armado/desarmado de particiones y la visualización del estado de zonas, salidas PGM,
alarmas de incendio y problemas. Para esp8266/esp32, el estado de la partición está
disponible como mensaje de texto para mostrar.

OpenHAB-MQTT : Interfaces con OpenHAB a través de MQTT. Demuestra el uso de los


estados del panel y las particiones como conmutadores OpenHAB y los estados de zona
como contactos OpenHAB. Para esp8266/esp32, también se envía un mensaje de estado
del panel como una cadena a OpenHAB. Consulte https://github.com/jimtng/dscalarm-
mqtt para ver una integración usando la convención Homie para el componente Homie
MQTT de OpenHAB.

ESPHome (esp8266): se integra con ESPHome como un componente personalizado;


tenga en cuenta que este ejemplo se encuentra en el extras directorio. ¡Gracias a
Dilbert66 por esta contribución!
Homey : se integra con Athom Homey y la biblioteca Homeyduino , incluidos los estados
de armado, alarma e incendio (actualmente limitado a una partición) y estados de zona.
¡Gracias a MagnusPer por contribuir con este ejemplo!

Telegram (esp8266/esp32): demuestra el envío de actualizaciones de estado como


notificaciones automáticas y el armado/desarmado del sistema de seguridad a través de
un bot de Telegram . Admite notificaciones de escritorio de iOS, Android y
macOS/Windows/Linux (gratis).

Pushover (esp8266/esp32): demuestra el envío de actualizaciones de estado como


notificaciones push a través de Pushover . Admite notificaciones de escritorio nativas de
iOS, Android, macOS y ventanas emergentes de navegador Chrome/Firefox/Safari
(compra única de $4,99 USD por plataforma de cliente).

Pushbullet (esp8266/esp32): demuestra el envío de actualizaciones de estado como


notificaciones automáticas a través de Pushbullet . Admite Android, notificaciones de
escritorio de Windows y ventanas emergentes de navegador Chrome/Firefox (gratis).
Tenga en cuenta que iOS ya no es compatible.

Pushsafer (esp8266/esp32): demuestra el envío de actualizaciones de estado como


notificaciones automáticas a través de Pushsafer . Admite notificaciones de escritorio de
iOS, Android, Windows y ventanas emergentes de navegador
Chrome/Firefox/Edge/Opera/Yandex (0,99 EUR o menos por 1000 notificaciones).

Twilio-SMS (esp8266/esp32): demuestra el envío de actualizaciones de estado como


mensajes de texto SMS a través de Twilio . ¡ Gracias a ColingNG por contribuir con este
ejemplo!
Correo electrónico (esp8266/esp32): demuestra el envío de actualizaciones de estado
como correo electrónico. El correo electrónico se envía mediante SMTPS (puerto 465)
con SSL para el cifrado; esto es necesario en el esp8266/esp32 hasta que se admita
STARTTLS. Por ejemplo, esto funcionará con Gmail después de cambiar la configuración
de la cuenta para permitir aplicaciones menos seguras .

Esto se puede usar para enviar mensajes de texto SMS si el proveedor de servicios del
número tiene una puerta de enlace de correo electrónico a SMS ; ejemplos para EE. UU.:

T-móvil: 5558675309@tmomail.net
Verizon: 5558675309@vtext.com
AT&T: 5558675309@txt.att.net

VirtualKeypad-Blynk (esp8266/esp32): proporciona una interfaz de teclado virtual para


la aplicación heredada gratuita Blynk en iOS y Android, incluida la visualización de la
memoria de alarmas, la programación de luces de zona y la memoria de eventos. La
aplicación Blynk de nueva generación no es compatible actualmente. Escanee uno de los
siguientes códigos QR desde la aplicación Blynk para ver un diseño de teclado de
ejemplo:

Teclado virtual con 16 zonas


Teclado virtual con 32 zonas
Teclado virtual con 8 zonas y registro de eventos

Nota: Se recomienda instalar Blynk como un servidor local para mantener el control del
sistema de seguridad interno de su red.

VirtualKeypad-Web (esp8266/esp32): proporciona una interfaz web de teclado virtual,


utilizando el propio esp8266/esp32 como un servidor web independiente, incluida la
visualización de la memoria de alarmas, la programación de luces de zona y la memoria
de eventos. ¡Gracias a Elektrik1 por contribuir con este ejemplo!
TimeSyncNTP : sincroniza y mantiene la hora en los paneles PowerSeries a través de un
servidor NTP, incluidos los ajustes de horario de verano.

Desbloqueador : encuentra el código de instalador de 4 dígitos para los paneles


PowerSeries al verificar todos los códigos posibles, incluido el manejo del bloqueo del
teclado si está habilitado. El código válido se emite en serie y parpadea repetidamente
con el LED incorporado. Arduino comprueba cada código de forma secuencial, pero
esp8266/esp32 puede encontrar el código más rápidamente, ya que comprueban el
orden de los códigos generales de 4 dígitos más utilizados .

KeypadInterface : se conecta directamente a los teclados DSC PowerSeries y Classic


series (probados con PC1500RK) (sin un panel DSC) para permitir su uso como entradas
físicas para cualquier propósito general. Ejemplos incluidos para la interfaz a través de
serie y MQTT. Tenga en cuenta que esto utiliza una configuración de cableado diferente
de la interfaz Keybus estándar, consulte el diagrama de cableado en el esquema de
ejemplo.

KeybusReader : Decodifica e imprime datos desde Keybus a una interfaz serial, incluida
la lectura de serial para el teclado virtual. Esto se puede usar para ayudar a decodificar el
protocolo Keybus y también es útil como herramienta de solución de problemas para
verificar que los datos se muestren sin errores. Para esp8266/esp32,
KeybusReaderIP habilita la conectividad a través de WiFi.

Consulte src/dscKeybusPrintData.cpp todos los comandos y mensajes del protocolo


Keybus actualmente conocidos. ¡Los problemas y solicitudes de incorporación de
cambios con adiciones/correcciones son bienvenidos!

Más proyectos DSC


dscalarm-mqtt : implementación de la convención Homie MQTT
esphome-dsckeybus : implementación de esta biblioteca como un componente
personalizado de ESPHome
PC1500KeybusReader : ejemplo de MQTT HomeKit para PC1500 y ESP32 usando la
interfaz dougkpowers/pc1550

Alambrado

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 --/

El Keybus DSC PowerSeries opera a ~12.6v y la serie Classic opera a ~13.75v, un par de
resistencias por línea de datos reducirá esto a un voltaje apropiado para cada
microcontrolador.
Arduino:
La línea amarilla DSC (reloj) se conecta a un pin de interrupción de hardware :
para el Uno, estos son los pines 2 o 3. Los bocetos de ejemplo usan
dscClockPin: 3.
La línea verde DSC (datos) se puede conectar a cualquiera de los pines digitales
restantes 2-12. Los bocetos de ejemplo usan dscReadPin: 5 y dscWritePin: 6.
LÉAME.md
esp8266: conecte las líneas DSC a los pines GPIO que normalmente son bajos para
evitar poner datos falsos en el Keybus: D1 (GPIO5), D2 (GPIO4) y D8 (GPIO15). Los
bocetos de ejemplo utilizan dscClockPin: D1, dscReadPin: D2, dscWritePin: D8. Para
la serie Classic, dscPC16Pin: D7 (GPIO 13).
esp32: conecte las líneas DSC a los pines GPIO que no envían señales en el
arranque: 4, 13, 16-39. Para el teclado virtual, use los pines 4, 13, 16-33; los pines 34-
39 son solo de entrada y no se pueden usar. Los bocetos de ejemplo usan
dscClockPin: 18, dscReadPin: 19, dscWritePin: 21. Para la serie Classic, dscPC16Pin:
17.
El teclado virtual usa un transistor NPN y una resistencia para escribir en el Keybus. La
mayoría de los transistores NPN de señal pequeña deberían ser adecuados, por ejemplo:
2N3904
BC547, BC548, BC549
Ese NPN aleatorio en la parte inferior de su contenedor de piezas (mi elección)
Energía:
Las placas Arduino se pueden alimentar directamente desde el panel DSC
Las placas de desarrollo esp8266/esp32 deben usar un regulador de voltaje externo
configurado en 5v al pin de 5v:
Los módulos convertidores reductores reductores basados ​en LM2596 son
razonablemente eficientes y comúnmente disponibles por menos de $ 1 USD
enviados (eBay, Aliexpress, etc.): estos son los módulos que uso.
Los módulos convertidores reductores reductores basados ​en MP2307 (también
conocidos como Mini360) también están disponibles, pero algunas versiones se
calientan con una eficiencia casi tan pobre como la de los reguladores lineales.
Los reguladores de voltaje lineal (LM7805, etc.) funcionarán, pero son
ineficientes y se calientan; es posible que necesiten un disipador de calor.
Las placas esp8266/esp32 también pueden usar un regulador de voltaje externo
establecido en 3.3v al pin de 3.3v; esto evita el regulador de voltaje integrado del
módulo. Por ejemplo, algunos mini clones Wemos D1 usan reguladores de voltaje
de baja corriente que pueden causar problemas de estabilidad. Las placas
NodeMCU no se ven afectadas ya que utilizan el regulador AMS1117 más potente.
Las conexiones deben soldarse, las placas de prueba pueden causar problemas.
Teclado virtual
Esto permite que un boceto envíe teclas al panel DSC para emular los teclados DSC físicos y
permite el control total del panel desde el boceto u otro software.

Las claves se envían a la partición 1 de forma predeterminada y se pueden cambiar a una


partición diferente. Las siguientes teclas se pueden enviar al panel; consulte los ejemplos de
uso:

Teclado: 0-9 * #
Armado fijo (requiere código de acceso si el armado rápido está deshabilitado): s
Armado total (requiere código de acceso si el armado rápido está deshabilitado): w
Armar sin demora de entrada (requiere código de acceso): n
Alarma de incendios: f
Alarma auxiliar: a
Alarma de pánico: p
Habilitar/deshabilitar timbre de puerta: c
Restablecimiento de fuego: r
Salida rápida: x
Cambiar partición: / + partition number o establecer writePartition el número de
partición. Ejemplos:
Cambiar a la partición 2 y enviar claves: /2 + 1234
Vuelva a la partición 1: /1
Establecer directamente en el croquis: dsc.writePartition = 8;
Salida de comando 1: [
Salida de comando 2: ]
Salida de comando 3: {
Salida de comando 4: }

Configuración DSC
Opciones del panel que afectan a esta interfaz, configuradas por *8 + installer code :
consulte el Unlocker esquema si no conoce el código de instalación de su panel. Consulte el
manual de instalación de DSC de su panel para configurar estas opciones:

Sección PC1555MX/5015 370 , sección PC1616/PC1832/PC1864 377 :

Swinger shutdown: De forma predeterminada, el panel limitará a 3 el número de


comandos de alarma enviados en un solo ciclo de armado; por ejemplo, una alarma
de zona que se activa varias veces dejará de informar después de 3 alertas. Esto es
para evitar enviar alertas repetidamente a un servicio de monitoreo de terceros y
también afecta esta interfaz. Como no uso un servicio de monitoreo, deshabilito el
apagado del swinger configurando esto en 000 .

Demora de informe de falla de energía de CA: la demora predeterminada es de 30


minutos y se puede configurar para 000 informar inmediatamente una falla de
energía.

Serie PC1500/PC1550 Classic: se requiere la siguiente configuración para obtener el


estado del sistema de seguridad:

Comunicador: habilite en la sección 12 , opción 1 para admitir el modo PC16-OUT


PC16-OUT: sección Habilitar 13 , opción 4 para configurar la salida PGM en el
modo PC16-OUT para enviar los datos de estado del panel requeridos en el Keybus.
Salida PGM: Habilitar sección 24 , opción 08 para configurar la salida PGM para
que se dispare mientras la alarma del sistema está disparada (funciona junto con el
modo PC16-OUT).
notas
Para actualizaciones OTA en esp8266 y esp32, es posible que deba detener la interfaz
usando dsc.stop(); :

void setup() {

...

ArduinoOTA.onStart([]() {

dsc.stop();

...

El uso de la memoria se puede ajustar en función del número de particiones, zonas y


tamaño del búfer de datos especificado en src/dscKeybus.h o src/dscClassic.h .
Configuración por defecto:

Arduino: hasta 4 particiones, 32 zonas, 10 comandos almacenados en búfer


esp8266/esp32: hasta 8 particiones, 64 zonas, 50 comandos en búfer

Los diseños de PCB están disponibles en : ¡ extras/PCB Layouts gracias a sjlouw por
contribuir con estos diseños!

El soporte para otras plataformas depende de ajustar el código para usar sus
temporizadores específicos de la plataforma. Además de las interrupciones de cambio de
pin de hardware para capturar el reloj DSC, esta biblioteca utiliza interrupciones de
temporizador específicas de la plataforma para capturar la línea de datos DSC sin
bloqueo 250 μs después de que cambia el reloj (sin usar delayMicroseconds() ). Esto es
necesario porque el reloj y los datos son asíncronos: he observado que los datos del
teclado se retrasan hasta 160 μs después de que cae el reloj.

Utilización de recursos:
Arduino: 1 pin digital de interrupción de hardware, 2 pines digitales (+1 para la serie
Classic), interrupción Timer1
esp8266: 3 pines digitales (+1 para la serie Classic), interrupción del temporizador 1
esp32/esp32-s2: 3 pines digitales (+1 para la serie Classic), interrupción timer0

Solución de problemas
Si tiene problemas:

1. Ejecute el KeybusReader boceto de ejemplo y vea la salida en serie para verificar que la
interfaz esté capturando datos correctamente sin informar errores de CRC.
Si los datos no aparecen o tienen errores, verifique el reloj y el cableado de la línea
de datos, las resistencias y todas las conexiones. Las placas de prueba pueden
causar problemas, las conexiones deben soldarse en su lugar.
2. Para el teclado virtual, ejecute el KeybusReader boceto de ejemplo e ingrese las teclas a
través de la serie y verifique que las teclas aparezcan en la salida y que el panel
responda.
Si las teclas no se muestran en la salida, verifique la distribución de pines del
transistor, la resistencia base y las conexiones de cableado.
3. Ejecute el Status boceto de ejemplo y vea la salida en serie para verificar que la interfaz
muestre correctamente los eventos del sistema de seguridad a medida que se arman las
particiones, se abren las zonas, etc.

Para debates generales, solicitudes de funciones o problemas de procedimientos, puede


publicar en Discusiones o publicar un Problema si parece un problema con el código de la
biblioteca en sí.

Referencias
AVR Freaks - DSC Keybus Protocol : una excelente discusión sobre cómo se envían los datos
en el Keybus.

stagf15/DSC_Panel : una biblioteca que casi funciona para PC1555MX pero tenía errores de
tiempo y datos. Escribir esta biblioteca desde cero fue principalmente un ejercicio de
programación; de lo contrario, debería ser posible parchear la biblioteca DSC_Panel.

dougkpowers/pc1550-interface : una interfaz para la serie DSC Classic.

También podría gustarte