Integramos el sistema de seguridad Honeywell (Ademco) VISTA 10 con la automatización del hogar Fibaro



Honeywell (Ademco) está desarrollando sistemas de seguridad VISTA populares, que van desde simples VISTA-10 hasta ricos VISTA-250. Los sistemas de seguridad multifuncionales VISTA-128/250 contienen un puerto RS232, que le permite integrarlos en cualquier otro sistema.

Me dieron la tarea: "Para integrar el sistema de seguridad VISTA-10 L en el sistema de automatización del hogar Fibaro, desde una aplicación móvil debe controlar tanto la iluminación como las puertas del garaje y armar la casa ".

Un estudio superficial de VISTA-10 L, resultó que no hay UART allí en absoluto. Afortunadamente, la compañía www.alarmdecoder.com se encontró en las extensiones de Internet estadounidense., que está desarrollando placas que simulan el funcionamiento del panel de control. La placa existe en 3 opciones de conexión: USB, RS-232, escudo UART para Raspberry Pi. Elegí el escudo AD2Pi para la Raspberry Pi.



La placa AD2Pi está conectada a los terminales del panel de control y para el sistema de seguridad se presenta como otro panel de control y visualización.


Control remoto y pantalla (panel de control)

El diagrama de conexión es simple:
AD2PiPanel de control VISTA
-4 - TECLADO TERRENO (-)
+5 - TECLADO PWD (+)
DI6 - DATOS EN EL TECLADO
Hacer7 - DATOS SALIDOS AL TECLADO





Después de conectar el AD2Pi al panel de control VISTA, procedemos a trabajar con el software. alarmdecoder le permite controlar y monitorear completamente el sistema de seguridad.

1) Instalar la biblioteca python alarmdecoder

alarmdecoder le permite recibir todos los mensajes del sistema en forma analizada, enviar comandos de control y configuración.

pip install alarmdecoder

o de git

git clone https://github.com/nutechsoftware/alarmdecoder.git
cd alarmdecoder
python setup.py install

2) Instalación de ser2sock - Redirector de serie a socket

ser2sock le permite conectarse al puerto serie de forma remota, esto es necesario para controlar el sistema de seguridad no solo con Raspberry Pi, sino también desde cualquier otra computadora / dispositivo directamente.

git clone https://github.com/nutechsoftware/ser2sock.git

Detalles de instalación aquí: https://github.com/nutechsoftware/ser2sock

3) Configuración de la placa AD2Pi

En primer lugar, debe configurar la placa AD2Pi para que nos transmita todos los eventos de interés. Conéctese al puerto serie AD2Pi a través de minicom e ingrese "!" Para ingresar al modo de configuración. Tenga en cuenta que la dirección del panel de control virtual debe ser 31, el LRR debe ser Y, y la máscara en las direcciones ffffffff, es decir Recibe mensajes de todos.

sudo minicom -d /dev/ttyAMA0



En el panel de control, debe activar la función de enviar mensajes a través de LRR / GSM, luego sabremos qué usuario ha eliminado y armado.



4) Verificación del estado del sistema

Ejecute ser2sock y escuche el puerto 10000:

sudo /etc/init.d/ser2sock start
nc localhost 10000

Debe ver los mensajes del sistema:



5) Procesar mensajes del sistema de seguridad



Script de Python para enviar mensajes desde el decodificador de alarma al controlador de automatización Home Center 2
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import base64
import time
from time import gmtime, strftime
import requests
from requests.auth import HTTPBasicAuth
from alarmdecoder import AlarmDecoder
from alarmdecoder.devices import SocketDevice

# Configuration values
HOSTNAME = 'localhost'
PORT = 10000

# Fibaro access
username = "admin"
password = "admin"

def main():
    """
    Example application that prints messages from the panel to the terminal.
    """
    try:
        # Retrieve an AD2 device that has been exposed with ser2sock on localhost:10000.
        device = AlarmDecoder(SocketDevice(interface=(HOSTNAME, PORT)))

        # Set up an event handler and open the device
        device.on_message += handle_message
        device.on_lrr_message += handle_lrr_message
        with device.open():
            while True:
                time.sleep(1)

    except Exception, ex:
        print 'Exception:', ex

def handle_message(sender, message):
    """
    Handles message events from the AlarmDecoder.
    """
    print message.text

    jsonData = {"value":message.text}
    requests.put('http://10.0.1.43/api/globalVariables/AlarmStatus', json = jsonData, auth=HTTPBasicAuth(username, password))

def handle_lrr_message(sender, message):
    """
    Handles message events from the AlarmDecoder.
    """
    lrr_message = message.event_data + " " + message.event_type  
    print lrr_message
    jsonData = {"value":lrr_message}
    requests.put('http://10.0.1.43/api/globalVariables/AlarmUsers', json = jsonData, auth=HTTPBasicAuth(username, password))

if __name__ == '__main__':
    main()


Para procesar el mensaje, escribí un pequeño script de Python que lo puso en carga automática.
El script se conecta al servicio ser2sock, recibe mensajes de él y los envía al controlador de automatización Home Center 2. En el controlador, proceso los mensajes, los visualizo en un dispositivo virtual y envío una notificación automática sobre el estado del sistema de seguridad.

6) Widget para administrar el sistema de alarma Home Center 2



En Home Center 2, creé un dispositivo virtual con el que puede armar en diferentes modos, desarmar y que muestra el estado del sistema e información sobre quién configuró o desarmó.

Para armar o desarmar, solo necesita enviar una solicitud TCP con el código de armado / desarmado.



Script Lua para procesar mensajes desde el decodificador de alarma
-- Check alarm status
securityStatus = fibaro:getGlobalValue('AlarmStatus')
lastSecurityStatus = fibaro:getGlobalValue('lastSecurityStatus')

-- Show messages from alarm system
if (lastSecurityStatus ~= securityStatus) then
  fibaro:call(108, "setProperty", "ui.Label1.value", os.date("%x %X ") .. securityStatus)
  fibaro:setGlobal('lastSecurityStatus',securityStatus)
  fibaro:debug(fibaro:getValue(108, 'ui.Label1.value'))
end


-- Check alarm user and event
alarmUsers = fibaro:getGlobalValue('AlarmUsers')
lastAlarmUsers = fibaro:getGlobalValue('lastAlarmUsers')

-- If security status changed then show new status and send push
if (lastAlarmUsers ~= alarmUsers) then
  fibaro:setGlobal('lastAlarmUsers',alarmUsers)
  
  userID = string.sub(alarmUsers, 3, 3)
  event =  string.sub(alarmUsers, 5)
  
  -- set user name
  if userID == "4" then
      userID = "Raspberry"
  elseif userID == "3" then
      userID = ""
  elseif userID == "2" then
      userID = ""
  end
  
  -- set translated event
  if event == "ARM_AWAY" then
      event = "  "
  elseif event == "ARM_STAY" then
      event = "   "
  elseif event == "OPEN" then
      event = "  "
  end
  
  fibaro:call(108, "setProperty", "ui.Label2.value", event .. " " .. userID)
  fibaro:debug(fibaro:getValue(108, 'ui.Label2.value'))
  fibaro:call(100, "sendPush", fibaro:getValue(108, 'ui.Label2.value'))
  fibaro:call(25, "sendPush", fibaro:getValue(108, 'ui.Label2.value'))
end
  


También fue necesario crear varias variables globales en Home Center 2, que almacenan el estado actual del sistema y los usuarios.



Toda la información que se muestra en el panel de control: desarmado / armado, activación del sensor, batería baja del sensor, cambio a energía de respaldo, etc., puede procesarse y enviarse al sistema de automatización para acciones adicionales.

Todos los dispositivos Home Center 2 se transmiten a homebridge , lo que le permite armar y quitar usando el asistente de voz de Siri.

¡Las placas de alarmdecoder se pueden usar con cualquier sistema de automatización, la documentación detallada y una API conveniente le permiten integrar de manera conveniente y rápida el sistema de seguridad en cualquier hogar inteligente!

Source: https://habr.com/ru/post/es399833/


All Articles