- PVSM.RU - https://www.pvsm.ru -

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 1Компания Honeywell (Ademco) разрабатывает популярные охранные системы VISTA, начиная от простых VISTA-10 до богатых функционалом VISTA-250. Многофункциональные охранные системы VISTA-128/250 содержат порт RS232, что позволяет интегрировать их в любую другую систему.
Мне была поставлена задача: "Интегрировать охранную систему VISTA-10 L в систему домашней автоматизации Fibaro, из одного мобильного приложения нужно управлять и освещением и гаражными воротами и ставить дом на охрану".

При беглом изучении VISTA-10 L, выяснилось, что никакого UART там нет и в помине. К счастью на просторах американского интернета была найдена компания www.alarmdecoder.com [1], которая занимается разработкой плат имитирующих работу пульта управления. Плата существует в 3-х вариантах подключения: USB, RS-232, UART шилд для Raspberry Pi. Я выбрал шилд AD2Pi для Raspberry Pi.
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 2
Плата AD2Pi подключается к клеммам пульта управления и для охранной системы представляется, как еще один пульт управления и индикации.
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 3
Пульт управления и индикации (control panel)

Схема подключения проста:

AD2Pi VISTA контрольная панель
- 4 — KEYPAD GROUND (-)
+ 5 — KEYPAD PWD (+)
DI 6 — DATA IN TO KEYPAD
DO 7 — DATA OUT TO KEYPAD

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 4
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 5
После подключения AD2Pi к контрольной панели VISTA, переходим к работе с софтом. alarmdecoder позволяет полностью управлять и мониторить охранную систему.

1) Установка python библиотеки alarmdecoder

alarmdecoder позволяет принимать все системные сообщения в распарсенном виде, отправлять команды управления и настройки.

pip install alarmdecoder

или из git

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

2) Установка ser2sock — Serial to Socket Redirector

ser2sock позволяет подключиться к serial порту удаленно, это нужно чтобы управлять охранной системой не только с Raspberry Pi, но и с любого другого компьютера/устройства напрямую.

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

Подробности установки тут: https://github.com/nutechsoftware/ser2sock [2]

3) Настройка платы AD2Pi

Первым делом нужно настроить плату AD2Pi, чтобы оно передавала нам все интересующие события. Подключитесь к serial порту AD2Pi через minicom и для входа в режим настройки введите "!". Обратите внимание, что адрес виртуальной панели управления должен быть 31, LRR должен быть Y, и маска по адресам ffffffff, т.е. получать сообщения от всех.

sudo minicom -d /dev/ttyAMA0

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 6
На пульте управления нужно активировать функцию отправки сообщений через LRR/GSM, тогда мы будем знать какой пользователь снял и поставил на охрану.
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 7

4) Проверка работоспособности системы

Запускаем ser2sock и слушаем порт 10000

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

Должны увидеть сообщения от системы
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 8

5) Обработка сообщений от охранной системы

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 9

Python cкрипт отправки сообщений от alarmdecoder на контроллер автоматизации 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()

Для обработки сообщения я написал небольшой python скрипт, который поставил в автозагрузку.
Скрипт подключается к сервису ser2sock, получает от него сообщения и отправляет их на контроллер автоматизации Home Center 2. На контроллере я обрабатываю сообщения, отображаю их в виртуальном устройстве и отправляю push notification о статусе охранной системы.

6) Виджет для управления охранной системой Home Center 2

Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 10
На Home Center 2 я создал виртуальное устройство, с помощью которого можно ставить на охрану в разных режимах, снимать с охраны и на который выводится статус системы и информация о том кто поставил или снял с охраны.
Чтобы поставить или снять с охраны, нужно всего лишь отправить TCP запрос с кодом постановки/снятия.
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 11

Lua скрипт для обработки сообщений от 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
  

Также потребовалось завести несколько глобальный переменных на Home Center 2, которые хранят текущее состояние системы и пользователей.
Интегрируем охранную систему Honeywell (Ademco) VISTA 10 с домашней автоматизацией Fibaro - 12

Всю информация, которая выводится на панель управления: снято/поставлено на охрану, сработка датчика, низкий заряд батареи датчика, переход на резервное питание и др, можно обрабатывать и отправлять в систему автоматизации для дальнейших действий.
Все устройства Home Center 2 транслируются в homebridge [3], что позволяет ставить на охрану и снимать с помощью голосового ассистента Siri.
Платы от alarmdecoder можно использовать с любой системой автоматизации, подробная документация [4] и удобный API [5] позволяют удобно и быстро интегрировать охранную систему в любой умный дом!

Автор: aivs

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/232826

Ссылки в тексте:

[1] www.alarmdecoder.com: http://http:www.alarmdecoder.com/

[2] https://github.com/nutechsoftware/ser2sock: https://github.com/nutechsoftware/ser2sock

[3] homebridge: https://geektimes.ru/post/276706/

[4] подробная документация: http://www.alarmdecoder.com/wiki/index.php/Protocol

[5] удобный API: http://alarmdecoder.readthedocs.io/en/latest/

[6] Источник: https://geektimes.ru/post/283568/