Wir integrieren das Sicherheitssystem Honeywell (Ademco) VISTA 10 in die Fibaro-Hausautomation



Honeywell (Ademco) entwickelt beliebte VISTA-Sicherheitssysteme, die von einfachen VISTA-10 bis hin zu umfangreichen VISTA-250 reichen. Multifunktionale Sicherheitssysteme VISTA-128/250 enthalten einen RS232-Anschluss, über den Sie sie in jedes andere System integrieren können.

Ich erhielt die Aufgabe: "Um das Sicherheitssystem VISTA-10 L in das Hausautomationssystem Fibaro zu integrieren, müssen Sie von einer mobilen Anwendung aus sowohl die Beleuchtung als auch die Garagentore steuern und das Haus scharf schalten ."

Bei einer flüchtigen Untersuchung von VISTA-10 L stellte sich heraus, dass es dort überhaupt keinen UART gibt. Glücklicherweise wurde die Firma www.alarmdecoder.com in den Weiten des amerikanischen Internets gefunden, das Karten entwickelt, die den Betrieb des Bedienfelds simulieren. Die Karte ist in 3 Anschlussoptionen erhältlich: USB, RS-232, UART-Abschirmung für Raspberry Pi. Ich habe das AD2Pi-Schild für den Raspberry Pi gewählt.



Die AD2Pi-Karte ist mit den Anschlüssen des Bedienfelds verbunden und wird für das Sicherheitssystem als weiteres Bedien- und Anzeigefeld dargestellt.


Fernbedienung und Anzeige (Bedienfeld)

Der Anschlussplan ist einfach:
AD2PiVISTA-Bedienfeld
- -4 - TASTATURBODEN (-)
+5 - TASTATUR PWD (+)
DI6 - DATEN IN DIE TASTATUR
TUN7 - DATEN AUSGABE AUF TASTATUR





Nachdem Sie den AD2Pi an das VISTA-Bedienfeld angeschlossen haben, arbeiten wir mit der Software. Mit dem Alarmdecoder können Sie das Sicherheitssystem vollständig steuern und überwachen.

1) Installieren Sie die Python Alarmdecoder-Bibliothek

Mit dem Alarmdecoder können Sie alle Systemmeldungen in analysierter Form empfangen, Steuerungs- und Konfigurationsbefehle senden.

pip install alarmdecoder

oder von git

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

2) Installieren von ser2sock - Serial to Socket Redirector

Mit ser2sock können Sie eine Remote- Verbindung zur seriellen Schnittstelle herstellen. Dies ist erforderlich, um das Sicherheitssystem nicht nur mit Raspberry Pi, sondern auch direkt von jedem anderen Computer / Gerät aus zu steuern.

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

Installationsdetails hier: https://github.com/nutechsoftware/ser2sock

3) Einrichtung der AD2Pi-Karte

Zunächst müssen Sie die AD2Pi-Karte so konfigurieren, dass sie uns alle Ereignisse von Interesse übermittelt. Stellen Sie über minicom eine Verbindung zur seriellen AD2Pi-Schnittstelle her und geben Sie "!" Ein, um den Konfigurationsmodus aufzurufen. Es ist zu beachten, dass die Adresse des virtuellen Bedienfelds 31 sein muss, das LRR Y sein muss und die Maske an den Adressen ffffffff, d.h. Empfangen Sie Nachrichten von allen.

sudo minicom -d /dev/ttyAMA0



Auf dem Bedienfeld müssen Sie die Funktion zum Senden von Nachrichten über LRR / GSM aktivieren. Dann wissen wir, welcher Benutzer entfernt und scharfgeschaltet wurde.



4) Überprüfen des Systemzustands

Führen Sie ser2sock aus und hören Sie Port 10000 ab:

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

Nachrichten vom System müssen angezeigt werden:



5) Verarbeiten von Nachrichten aus dem Sicherheitssystem



Python-Skript zum Senden von Nachrichten vom Alarmdecoder an den Home Center 2-Automatisierungscontroller
#!/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()


Um die Nachricht zu verarbeiten, habe ich ein kleines Python-Skript geschrieben, das sie automatisch lädt.
Das Skript stellt eine Verbindung zum ser2sock-Dienst her, empfängt Nachrichten von diesem und sendet sie an den Home Center 2-Automatisierungscontroller. Auf dem Controller verarbeite ich die Nachrichten, zeige sie auf einem virtuellen Gerät an und sende eine Push-Benachrichtigung über den Status des Sicherheitssystems.

6) Widget zur Verwaltung des Alarmsystems Home Center 2



In Home Center 2 habe ich ein virtuelles Gerät erstellt, mit dem Sie in verschiedenen Modi aktivieren und deaktivieren können und das den Status des Systems sowie Informationen darüber anzeigt, wer eingestellt oder deaktiviert hat.

Zum Aktivieren oder Deaktivieren müssen Sie lediglich eine TCP-Anforderung mit dem Aktivierungs- / Deaktivierungscode senden.



Lua-Skript zur Verarbeitung von Nachrichten vom 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
  


Außerdem mussten in Home Center 2 mehrere globale Variablen erstellt werden, in denen der aktuelle Status des Systems und der Benutzer gespeichert ist.



Alle Informationen, die auf dem Bedienfeld angezeigt werden: unscharf / scharfgeschaltet, Sensoraktivierung, schwache Sensorbatterie, Umschalten auf Notstrom usw., können verarbeitet und zur weiteren Bearbeitung an das Automatisierungssystem gesendet werden.

Alle Home Center 2-Geräte werden an Homebridge gesendet, sodass Sie sie mit Siris Sprachassistent aktivieren und entfernen können.

Boards von Alarmdecoder können mit jedem Automatisierungssystem verwendet werden. Eine detaillierte Dokumentation und eine praktische API ermöglichen es Ihnen, das Sicherheitssystem bequem und schnell in jedes Smart Home zu integrieren!

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


All Articles