ندمج نظام الأمان Honeywell (Ademco) VISTA 10 مع أتمتة المنزل في فيبارو



تقوم شركة Honeywell (Ademco) بتطوير أنظمة أمان VISTA الشهيرة ، بدءًا من VISTA-10s البسيطة إلى VISTA-250s الغنية. تحتوي أنظمة الأمن VISTA-128/250 متعددة الوظائف على منفذ RS232 ، والذي يسمح لك بدمجها في أي نظام آخر.

تم تكليفي بالمهمة: " لدمج نظام الأمان VISTA-10 L في نظام أتمتة المنزل في فيبارو ، من تطبيق محمول واحد ، تحتاج إلى التحكم في كل من الإضاءة وأبواب المرآب وتسليح المنزل ."

دراسة سريعة لـ VISTA-10 L ، اتضح أنه لا يوجد UART على الإطلاق. لحسن الحظ ، تم العثور على شركة www.alarmdecoder.com على مساحات الإنترنت الأمريكية، الذي يقوم بتطوير لوحات تحاكي تشغيل لوحة التحكم. اللوحة موجودة في 3 خيارات اتصال: USB ، RS-232 ، درع UART لـ Raspberry Pi. اخترت درع AD2Pi لـ Raspberry Pi.



يتم توصيل لوحة AD2Pi بأطراف لوحة التحكم ويتم تقديمها كنظام تحكم وعرض آخر لنظام الأمان.


التحكم عن بعد والعرض (لوحة التحكم)

مخطط الاتصال بسيط:
AD2Piلوحة تحكم VISTA
-4 - لوحة المفاتيح (-)
+5 - KEYPAD PWD (+)
DI6 - البيانات في لوحة المفاتيح
افعل7 - البيانات خارج لوحة المفاتيح





بعد توصيل AD2Pi بلوحة تحكم VISTA ، ننتقل إلى العمل مع البرنامج. يسمح لك برنامج التنبيه بالتحكم الكامل ومراقبة نظام الأمان.

1) تثبيت مكتبة المبرمج بيثون التنبيه

يسمح لك alarmdecoder باستلام جميع رسائل النظام في شكل تحليل ، وإرسال أوامر التحكم والتكوين.

pip install alarmdecoder

أو من بوابة

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

2) تثبيت ser2sock - المسلسل إلى معيد التوجيه Socket

يتيح لك ser2sock الاتصال بالمنفذ التسلسلي عن بعد ، وهذا ضروري للتحكم في نظام الأمان ليس فقط مع Raspberry Pi ، ولكن أيضًا من أي جهاز كمبيوتر / جهاز آخر مباشرة.

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

تفاصيل التثبيت هنا: https://github.com/nutechsoftware/ser2sock

3) إعداد لوحة AD2Pi

بادئ ذي بدء ، تحتاج إلى تكوين لوحة AD2Pi بحيث تنقل لنا جميع الأحداث المهمة. الاتصال بالمنفذ التسلسلي AD2Pi عبر minicom وأدخل "!" للدخول إلى وضع التكوين. لاحظ أن عنوان لوحة التحكم الافتراضية يجب أن يكون 31 ، ويجب أن يكون LRR Y ، والقناع الموجود في العناوين ffffffff ، أي تلقي رسائل من الجميع.

sudo minicom -d /dev/ttyAMA0



في لوحة التحكم ، تحتاج إلى تنشيط وظيفة إرسال الرسائل عبر LRR / GSM ، ثم سنعرف أي مستخدم قام بإزالته وتسلحه.



4) التحقق من صحة النظام

قم بتشغيل ser2sock والاستماع إلى المنفذ 10000:

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

يجب أن ترى رسائل من النظام:



5) معالجة الرسائل من النظام الأمني



برنامج Python النصي لإرسال رسائل من منبهة الإنذار إلى وحدة تحكم الأتمتة في 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()


لمعالجة الرسالة ، كتبت نص ثعبان صغير وضعه في التحميل التلقائي.
يتصل البرنامج النصي بخدمة ser2sock ، ويستقبل الرسائل منه ويرسلها إلى وحدة تحكم الأتمتة في Home Center 2. على وحدة التحكم ، أقوم بمعالجة الرسائل وعرضها في جهاز ظاهري وإرسال إشعار دفع حول حالة نظام الأمان.

6) القطعة لإدارة نظام الإنذار هوم سنتر 2



في Home Center 2 ، قمت بإنشاء جهاز افتراضي يمكنك التسلح باستخدامه في أوضاع مختلفة ، ونزع سلاحه ، ويعرض حالة النظام ومعلومات حول من قام بتعيين أو نزع سلاحه.

للتسلح أو نزع السلاح ، ما عليك سوى إرسال طلب TCP مع رمز الذراع / نزع السلاح.



نص لوا لمعالجة الرسائل من التنبيه
-- 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
  


كان مطلوبًا أيضًا إنشاء العديد من المتغيرات العالمية في Home Center 2 ، التي تخزن الحالة الحالية للنظام والمستخدمين.



يمكن معالجة جميع المعلومات المعروضة على لوحة التحكم: نزع السلاح / التسلح ، وتنشيط المستشعر ، وبطارية المستشعر المنخفضة ، والتحويل إلى طاقة احتياطية ، وما إلى ذلك ، وإرسالها إلى نظام التشغيل الآلي لمزيد من الإجراءات.

يتم بث جميع أجهزة Home Center 2 إلى الجسر المنزلي ، مما يسمح لك بالتسلح والإزالة باستخدام مساعد صوت Siri.

رسوم من alarmdecoder يمكن استخدامها مع أي نظام التشغيل الآلي، وثائق مفصلة و سهلة الاستخدام API تجعل من الممكن بسهولة وبسرعة دمج النظام الأمني في أي منزل ذكي!

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


All Articles