Integramos o sistema de segurança VISTA 10 da Honeywell (Ademco) com a automação residencial Fibaro



A Honeywell (Ademco) está desenvolvendo sistemas populares de segurança VISTA, variando de simples VISTA-10s a ricos VISTA-250s. Os sistemas de segurança multifuncional VISTA-128/250 contêm uma porta RS232, que permite integrá-los a qualquer outro sistema.

Foi-me dada a tarefa: "Para integrar o sistema de segurança VISTA-10 L ao sistema de automação residencial Fibaro, a partir de um aplicativo móvel, você precisa controlar a iluminação e as portas da garagem e armar a casa ".

Um estudo superficial do VISTA-10 L revelou que não existe UART. Felizmente, a empresa www.alarmdecoder.com foi encontrada nas extensões da Internet americana, que está desenvolvendo placas que simulam a operação do painel de controle. A placa existe em 3 opções de conexão: USB, RS-232, blindagem UART para Raspberry Pi. Eu escolhi o escudo AD2Pi para o Raspberry Pi.



A placa AD2Pi é conectada aos terminais do painel de controle e, para o sistema de segurança, é apresentada como outro painel de controle e exibição.


Controle remoto e display (painel de controle)

O diagrama de conexão é simples:
AD2PiPainel de controle VISTA
-4 - TERRA DO TECLADO (-)
+5 - PWD COM TECLADO (+)
DI6 - DADOS NO TECLADO
FAZER7 - DADOS PARA O TECLADO





Depois de conectar o AD2Pi ao painel de controle VISTA, continuamos a trabalhar com o software. O alarmdecoder permite controlar e monitorar totalmente o sistema de segurança.

1) Instale a biblioteca python alarmdecoder

O alarmdecoder permite que você receba todas as mensagens do sistema em formato analisado, envie comandos de controle e configuração.

pip install alarmdecoder

ou do git

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

2) Instalação do ser2sock - redirecionador serial para soquete

O ser2sock permite conectar-se à porta serial remotamente, isso é necessário para controlar o sistema de segurança não apenas com o Raspberry Pi, mas também diretamente em qualquer outro computador / dispositivo.

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

Detalhes da instalação aqui: https://github.com/nutechsoftware/ser2sock

3) Configuração da placa AD2Pi

Primeiro de tudo, você precisa configurar a placa AD2Pi para que ela nos transmita todos os eventos de interesse. Conecte-se à porta serial AD2Pi via minicom e digite "!" Para entrar no modo de configuração. Observe que o endereço do painel de controle virtual deve ser 31, o LRR deve ser Y e a máscara nos endereços ffffffff, ou seja, Receba mensagens de todos.

sudo minicom -d /dev/ttyAMA0



No painel de controle, você precisa ativar a função de enviar mensagens via LRR / GSM, para saber qual usuário foi removido e armado.



4) Verificando a integridade do sistema

Execute ser2sock e ouça a porta 10000:

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

É necessário ver as mensagens do sistema:



5) Processando mensagens do sistema de segurança



Script Python para enviar mensagens do alarmdecoder para o controlador de automação do 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 processar a mensagem, escrevi um pequeno script python que o colocou no carregamento automático.
O script se conecta ao serviço ser2sock, recebe mensagens dele e as envia para o controlador de automação do Home Center 2. No controlador, eu processo as mensagens, as mostro em um dispositivo virtual e envio uma notificação por push sobre o status do sistema de segurança.

6) Widget para gerenciar o sistema de alarme do Home Center 2



No Home Center 2, criei um dispositivo virtual com o qual você pode armar em diferentes modos, desarmar e exibir o status do sistema e informações sobre quem configurou ou desarmou.

Para armar ou desarmar, basta enviar uma solicitação TCP com o código armar / desarmar.



Script Lua para processar mensagens do alarmdecoder
-- 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
  


Também foi necessário criar várias variáveis ​​globais no Home Center 2, que armazenam o estado atual do sistema e dos usuários.



Todas as informações exibidas no painel de controle: desarmadas / armadas, ativação do sensor, bateria fraca do sensor, mudança para energia de reserva, etc., podem ser processadas e enviadas ao sistema de automação para ações adicionais.

Todos os dispositivos do Home Center 2 são transmitidos para homebridge , o que permite armar e remover usando o assistente de voz da Siri.

As placas do decodificador de alarme podem ser usadas com qualquer sistema de automação, documentação detalhada e uma API conveniente, permitindo a integração rápida e conveniente do sistema de segurança em qualquer casa inteligente!

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


All Articles