Kami mengintegrasikan sistem keamanan VISTA 10 Honeywell (Ademco) dengan otomatisasi rumah Fibaro



Honeywell (Ademco) sedang mengembangkan sistem keamanan VISTA yang populer, mulai dari VISTA-10 sederhana hingga VISTA-250 yang kaya. VISTA-128/250 sistem keamanan multifungsi berisi port RS232, yang memungkinkan Anda untuk mengintegrasikannya ke sistem lain.

Saya diberi tugas: "Untuk mengintegrasikan sistem keamanan VISTA-10 L ke dalam sistem otomasi rumah Fibaro, dari satu aplikasi seluler Anda perlu mengontrol pencahayaan dan pintu garasi serta mempersenjatai rumah ."

Sebuah studi sepintas VISTA-10 L, ternyata tidak ada UART sama sekali. Untungnya, perusahaan www.alarmdecoder.com ditemukan di hamparan Internet Amerika, yang mengembangkan papan mensimulasikan operasi panel kontrol. Papan ada dalam 3 opsi koneksi: USB, RS-232, perisai UART untuk Raspberry Pi. Saya memilih perisai AD2Pi untuk Raspberry Pi.



Papan AD2Pi terhubung ke terminal panel kontrol dan untuk sistem keamanan ditampilkan sebagai kontrol lain dan panel display.


Remote control dan display (panel kontrol)

Diagram koneksi sederhana:
AD2PiPanel kontrol VISTA
-4 - KEYPAD GROUND (-)
+5 - KEYPAD PWD (+)
DI6 - DATA IN KE KEYPAD
LAKUKAN7 - DATA OUT KEYPAD





Setelah menghubungkan AD2Pi ke panel kontrol VISTA, kami melanjutkan bekerja dengan perangkat lunak. alarmdecoder memungkinkan Anda untuk sepenuhnya mengontrol dan memantau sistem keamanan.

1) Instal perpustakaan python alarmdecoder

alarmdecoder memungkinkan Anda untuk menerima semua pesan sistem dalam bentuk parsing, mengirim kontrol dan perintah konfigurasi.

pip install alarmdecoder

atau dari git

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

2) Memasang ser2sock - Serial to Socket Redirector

ser2sock memungkinkan Anda untuk terhubung ke port serial dari jarak jauh, ini diperlukan untuk mengontrol sistem keamanan tidak hanya dengan Raspberry Pi, tetapi juga dari komputer / perangkat lain secara langsung.

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

Detail instalasi di sini: https://github.com/nutechsoftware/ser2sock

3) pengaturan papan AD2Pi

Pertama-tama, Anda perlu mengonfigurasi papan AD2Pi agar dapat menyampaikan kepada kami semua acara yang menarik. Hubungkan ke port serial AD2Pi via minicom dan masukkan "!" Untuk masuk ke mode konfigurasi. Perhatikan bahwa alamat panel kontrol virtual harus 31, LRR harus Y, dan mask di alamat ffffffff, mis. Terima pesan dari semua orang.

sudo minicom -d /dev/ttyAMA0



Pada panel kontrol, Anda perlu mengaktifkan fungsi pengiriman pesan melalui LRR / GSM, maka kita akan tahu pengguna mana yang telah dihapus dan dipersenjatai.



4) Memeriksa kesehatan sistem

Jalankan ser2sock dan dengarkan port 10000:

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

Harus melihat pesan dari sistem:



5) Memproses pesan dari sistem keamanan



Skrip python untuk mengirim pesan dari alarmdecoder ke pengontrol otomatisasi 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()


Untuk memproses pesan, saya menulis skrip python kecil yang meletakkannya di autoload.
Script terhubung ke layanan ser2sock, menerima pesan darinya dan mengirimkannya ke pengontrol otomasi Home Center 2. Pada pengontrol, saya memproses pesan, menampilkannya di perangkat virtual dan mengirim pemberitahuan push tentang status sistem keamanan.

6) Widget untuk mengelola sistem alarm Home Center 2



Di Home Center 2, saya membuat perangkat virtual yang dengannya Anda dapat mempersenjatai dalam berbagai mode, melucuti, dan yang menampilkan status sistem dan informasi tentang siapa yang mengatur atau melucuti senjata.

Untuk mempersenjatai atau melucuti senjata, Anda hanya perlu mengirim permintaan TCP dengan kode lengan / melucuti senjata.



Script Lua untuk memproses pesan dari 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
  


Itu juga diperlukan untuk membuat beberapa variabel global di Home Center 2, yang menyimpan keadaan sistem dan pengguna saat ini.



Semua informasi yang ditampilkan pada panel kontrol: dilucuti / dipersenjatai, aktivasi sensor, baterai sensor rendah, beralih ke daya cadangan, dll., Dapat diproses dan dikirim ke sistem otomasi untuk tindakan lebih lanjut.

Semua perangkat Home Center 2 disiarkan ke perangkat rumah , yang memungkinkan Anda untuk mempersenjatai dan menghapus menggunakan asisten suara Siri.

Papan dari alarmdecoder dapat digunakan dengan sistem otomasi apa pun, dokumentasi terperinci , dan API yang nyaman memungkinkan Anda untuk dengan mudah dan cepat mengintegrasikan sistem keamanan ke rumah pintar mana pun!

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


All Articles