Nous intégrons le système de sécurité Honeywell (Ademco) VISTA 10 à la domotique Fibaro



Honeywell (Ademco) développe des systèmes de sécurité VISTA populaires, allant des simples VISTA-10 aux riches VISTA-250. Les systèmes de sécurité multifonction VISTA-128/250 contiennent un port RS232, qui vous permet de les intégrer dans n'importe quel autre système.

On m'a confié la tâche: "Pour intégrer le système de sécurité VISTA-10 L dans le système domotique Fibaro, à partir d'une seule application mobile, vous devez contrôler à la fois l'éclairage et les portes de garage et armer la maison ."

Une étude superficielle de VISTA-10 L, il s'est avéré qu'il n'y a aucun UART là-bas. Heureusement, la société www.alarmdecoder.com a été trouvée sur les étendues de l'Internet américain, qui développe des cartes simulant le fonctionnement du panneau de commande. La carte existe en 3 options de connexion: USB, RS-232, blindage UART pour Raspberry Pi. J'ai choisi le bouclier AD2Pi pour le Raspberry Pi.



La carte AD2Pi est connectée aux bornes du panneau de commande et pour le système de sécurité, elle est présentée comme un autre panneau de commande et d'affichage.


Télécommande et affichage (panneau de commande)

Le schéma de connexion est simple:
AD2PiPanneau de contrôle VISTA
-4 - MISE À LA TERRE DU CLAVIER (-)
+5 - CLAVIER PWD (+)
DI6 - DONNÉES DANS LE CLAVIER
Faire7 - DONNÉES SUR LE CLAVIER





Après avoir connecté l'AD2Pi au panneau de contrôle VISTA, nous continuons à travailler avec le logiciel. alarmdecoder vous permet de contrôler et de surveiller entièrement le système de sécurité.

1) Installer la bibliothèque python alarmdecoder

alarmdecoder vous permet de recevoir tous les messages du système sous forme analysée, d'envoyer des commandes de contrôle et de configuration.

pip install alarmdecoder

ou de git

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

2) Installation de ser2sock - Serial to Socket Redirector

ser2sock vous permet de vous connecter à distance au port série, cela est nécessaire pour contrôler le système de sécurité non seulement avec Raspberry Pi, mais aussi à partir de tout autre ordinateur / appareil directement.

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

Détails d'installation ici: https://github.com/nutechsoftware/ser2sock

3) Configuration de la carte AD2Pi

Tout d'abord, vous devez configurer la carte AD2Pi pour qu'elle nous transmette tous les événements d'intérêt. Connectez-vous au port série AD2Pi via minicom et entrez "!" Pour entrer dans le mode de configuration. Notez que l'adresse du panneau de commande virtuel doit être 31, le LRR doit être Y et le masque aux adresses ffffffff, c'est-à-dire Recevez des messages de tout le monde.

sudo minicom -d /dev/ttyAMA0



Sur le panneau de commande, vous devez activer la fonction d'envoi de messages via LRR / GSM, puis nous saurons quel utilisateur a supprimé et armé.



4) Vérification de la santé du système

Exécutez ser2sock et écoutez le port 10000:

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

Doit voir les messages du système:



5) Traitement des messages du système de sécurité



Script Python pour envoyer des messages de alarmdecoder au contrôleur d'automatisation 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()


Pour traiter le message, j'ai écrit un petit script python qui l'a mis en chargement automatique.
Le script se connecte au service ser2sock, en reçoit des messages et les envoie au contrôleur d'automatisation Home Center 2. Sur le contrôleur, je traite les messages, les affiche dans un périphérique virtuel et envoie une notification push sur l'état du système de sécurité.

6) Widget pour la gestion du système d'alarme Home Center 2



À Home Center 2, j'ai créé un appareil virtuel avec lequel vous pouvez armer dans différents modes, désarmer et qui affiche l'état du système et des informations sur qui a configuré ou désarmé.

Pour armer ou désarmer, il vous suffit d'envoyer une requête TCP avec le code d'armement / désarmement.



Script Lua pour le traitement des messages de 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
  


Il était également nécessaire de créer plusieurs variables globales sur Home Center 2 qui stockent l'état actuel du système et des utilisateurs.



Toutes les informations affichées sur le panneau de commande: désarmé / armé, déclenchement du capteur, batterie faible du capteur, passage à l'alimentation de secours, etc., peuvent être traitées et envoyées au système d'automatisation pour d'autres actions.

Tous les appareils Home Center 2 sont diffusés sur homebridge , ce qui vous permet d'armer et de supprimer à l'aide de l'assistant vocal de Siri.

Les cartes alarmdecoder peuvent être utilisées avec n'importe quel système d'automatisation, une documentation détaillée et une API pratique vous permettent d'intégrer facilement et rapidement le système de sécurité dans n'importe quelle maison intelligente!

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


All Articles