Формат данных событий не зависит от типа устройства.
<event name="programstart" objectid="0000000000" src="" ts="2007-06-29 10:20:03" />
Запуск программы. Происходит один раз при запуске АРМ. По данному событию можно сделать принудительный опрос устройства для приведения данных в актуальное состояние.
<event name="time" objectid="0000000000" src="" ts="2007-06-29 10:20:03" time="10:20:03"/>
Текущее время. Происходит один раз в секунду. По данному событию можно сделать принудительный опрос состояния устройства в заданное время суток. Или автоматический переход в режим охраны вечером.
<event name="tag" objectid="0000000000" tag="state" ts="2007-06-29 10:20:03" value="1" text="Режим наблюдения" range=""/>
Изменение состояния переменной объекта. Может использоваться для создания таймеров, счетчиков, реакции на пропадание связи и т.п. Подробнее об отом в разделе «Переменные объекта»
<event name="sms" objectid="0000000000" phone="+79163456789" text="1:N(00,00) 2:A(05,10) 3:N(00,00) 4:N 5:N 6:A 7:N Up(08,00)" />
Пришла SMS. В данном событии текст SMS представлен в том виде в каком он пришел, без какого-либо анализа. Если SMS пришла от неизвестного абонента objectid="", но указано свойство phone. Если абонент известен phone не задается. Это событие может использоваться анализа нестандартных сообщений от объектовых приборов, например если в качестве объектового прибора используется обычный мобильный телефон.
<event name="income_voice_call" objectid="0000000000" src="Modem1" />
Входящий голосовой звонок от объекта. Обработчик должен выдать соотв. команду разрешения или запрета соединения. Если обработчик не выдал никакой команды - соединение запрещается.
<event name="button" signal="name_of_button" objectid="0000000000" src="ModemID" />
Нажатие на определенную пользователем кнопку, либо выбор пункта в контестном меню. Свойство signal содержит заданный при описании кнопки идентификатор. Если кнопка находится в диалоговом окне входящих или исходящих звонков свойство src содержит идентификатор модема.
<?xml version="1.0" encoding="windows-1251" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Пример скрипта для обработки универсальных событий --> <!-- Главный шаблон --> <xsl:template match="/"> <commands> <xsl:apply-templates select="/tmp/event[@name='programstart']"/> <xsl:apply-templates select="/tmp/event[@name='time']"/> <xsl:apply-templates select="/tmp/event[@name='tag']"/> <xsl:apply-templates select="/tmp/event[@name='sms']"/> <xsl:apply-templates select="/tmp/event[@name='income_voice_call']"/> <xsl:apply-templates select="/tmp/event[@name='button']"/> </commands> </xsl:template> <!-- Шаблон обработки события programstart --> <xsl:template match="event[@name='programstart']"> <xsl:variable name="tprefix"><xsl:value-of select="/tmp/config/db/@tableprefix"/></xsl:variable> <!-- Устанавливаем черный цвет --> <COLOR color="black"/> <!-- Устанавливаем состояние связи и объекта = неизвестно --> <SET tag="linkstatus" value="0"/> <SET tag="state" value="0"/> <!-- Пишем в таблицу tracker_start сообщение --> <SQL query="insert into {$tprefix}_start(ts,objetctid,comment) values('{@ts}','{@objectid}','Объект {/tmp/object/@name} успешно запущен')"/> </xsl:template> <!-- Шаблон обработки события time --> <xsl:template match="event[@name='time']"> <!-- Проверяем время. Если 10 часов или 18 часов ровно посылаем объекту SMS с запросом состояния и выдаем сообщение оператору--> <xsl:if test="@time='10:00:00' or @time='18:00:00'"> <SEND_SMS text="SENDME_STATE" /> <MSG text="Запущен опрос объекта {/tmp/object/@name}" /> </xsl:if> <!-- Проверяем время. Если 19 часов ровно посылаем объекту SMS с командой перехода в режим охраны и выдаем сообщение оператору--> <xsl:if test="@time='19:00:00'"> <SEND_SMS text="ARM" /> <MSG text="Объекту {/tmp/object/@name} отправлена команда перехода в режим охраны" /> </xsl:if> </xsl:template> <!-- Шаблон обработки события tag --> <xsl:template match="event[@name='tag']"> <!-- При пропадании/ восстановлении связи выдаем оператору сообщение --> <xsl:if test="@tag='linkstatus'"> <xsl:if test="@range='ll'"> <MSG text="Неизвестно состояние связи с объектом {/tmp/object/@name}" /> </xsl:if> <xsl:if test="@range='lo'"> <MSG text="Нет связи с объектом {/tmp/object/@name}" /> </xsl:if> <xsl:if test="@range=''"> <MSG text="Восстановлена связь с объектом {/tmp/object/@name}" /> </xsl:if> </xsl:if> </xsl:template> <!-- Шаблон обработки события sms --> <xsl:template match="event[@name='sms']"> <LOG cat="SMS" pri="0" msg="Объект {/tmp/object/@name}: {@text}"/> <MSG text="Объект {/tmp/object/@name}: {@text}"/> <SEND_SMS text="Текст SMS: {@text}" /> </xsl:template> <!-- Шаблон обработки события входящий звонок --> <xsl:template match="event[@name='income_voice_call']"> <INCOMECALL enable="1" src="{@src}"/> </xsl:template> <!-- Шаблон обработки события нажата кнопка --> <xsl:template match="event[@name='button']"> <MSG text="Нажата кнопка {@signal}" /> <!-- кнопкаACCEPT в окне входящих звонков --> <xsl:if test="@signal='ACCEPT'"> <DTMF cmd="*123#" src="{@src}"/> </xsl:if> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="windows-1251"?> <commands> <COLOR color="black"/> <SET tag="linkstatus" value="0"/> <SET tag="state" value="0"/> <SQL query="insert into tracker_start(ts,objectid,comment) values('2007-06-30 16:14:10','0000000000','Объект Третий успешно запущен')"/> <LOG cat="ЗАПУСК" pri="0" msg="Объект Третий запущен"/> </commands>
При обработке событий может потребоваться значение свойства tableprefix тега db, которое содержит префикс имени таблиц. Выражение XPath для доступа к данному свойству будет выглядеть так {/tmp/config/db/@tableprefix}
Если планируется выполнить несколько запросов к БД, или использовать несколько таблиц можно написать так:
<xsl:variable name="tprefix"><xsl:value-of select="/tmp/config/db/@tableprefix"/></xsl:variable>
И затем использовать выражение {$tprefix}
Сообщение от AT-200 может иметь следующий вид:
1:N(00,00) 2:A(05,10) 3:N(00,00) 4:N 5:N 6:A 7:N Up(08,00)
Преобразуется следующим образом:
<event name="AT200" objectid="0000000000"> <property name="1" value="N" secondvalue="00.00"/> <property name="2" value="A" secondvalue="05.10"/> <property name="3" value="N" secondvalue="00.00"/> <property name="4" value="N"/> <property name="5" value="N"/> <property name="6" value="A"/> <property name="7" value="N"/> <property name="Up" value="08.00"/> </event>
Другие типы сообщений от AT-200:
Состояние: Покой Событие: Старт
Состояние: Покой
Ошибка
Преобразуется следующим образом:
<event name="AT200" objectid="0000000000"> <state name="Покой"/> <ev name="Старт"/> </event> <event name="AT200" objectid="0000000000"> <state name="Покой"/> </event> <event name="sms" objectid="0000000000" text="Ошибка" />
Пример SMS сообщения
22:02 ALARM BATTERY 0% SENSOR4 050 ON
Будет преобразовано следующим образом:
<event objectid='352540003439295' name='CCU6225' type='0'> <alarm/> <property name='BATTERY' value='0%'/> <property name='SENSOR4' value='050'> <subproperty number='1' value='ON'/> </property> </event>
Для сообщений переданных через модемное соединение создаются следующие события:
<event name='CCU6225' type='2' objectid='352540003439295' src=''> <nogps/> /// Если нет данных с GPS <thesamegps/> /// Данные не изменились <gps lat='54.950262' lon='73.421151' ts='2007-07-13 00:02:38' speed='10' course='100'/> </event> <event name='CCU6225' type='3' objectid='352540003439295' src=''> <in name='DI1' value='1' alarm='1'/> ... <in name='DI8' value='0'/> <in name='dibattery' value='0'/> <in name='power' value='0'/> <in name='AI1' value='250'/> ... <in name='AI8' value='50'/> <out name='DO1' value='1'/> ... <out name='DO8' value='1'/> <in name='aibattery' value='14'/> <disarm src='TOUCHMEMORY_1234567890123456'/> /// src м.б. DTMF SMS BUTTON <arm src='BUTTON'/> /// src м.б. DTMF SMS BUTTON </event>
Сообщения от FM-3101 поступающие по каналу GPRS преобразуются следующим образом (исходный формат имеет сложную бинарную структуру и не показан):
<event name="FM3101_gprs" objectid="352540003439295"> <timestamp> <receive time="2007-07-14 18:28:16" /> </timestamp> <avl_data_array codecid="1"> <avldata priority="10"> <timestamp> <send time="2007-07-13 00:02:38" /> </timestamp> <gps longitude="73.421151" latitude="54.950262" altitude="149" angle="300" speed="0" sattelites="5" /> <io> <property name="di7" value="1" type="int"/> <property name="di8" value="1" type="int"/> <property name="di9" value="1" type="int"/> <property name="di10" value="1" type="int"/> <property name="do6" value="0" type="int"/> <property name="do7" value="1" type="int"/> <property name="do8" value="0" type="int"/> <property name="do9" value="0" type="int"/> <property name="ai1" value="4" type="int"/> <property name="ai2" value="4" type="int"/> <property name="ai3" value="4" type="int"/> <property name="di5" value="1" type="int"/> <property name="di6" value="1" type="int"/> <property name="di11" value="1" type="int"/> <property name="do2" value="1" type="int"/> <property name="do3" value="0" type="int"/> <property name="do4" value="0" type="int"/> <property name="do5" value="1" type="int"/> <property name="property64" value="0" type="int"/> <property name="property66" value="16680" type="int"/> <property name="property67" value="9607" type="int"/> <property name="property68" value="1" type="int"/> <property name="property69" value="0" type="int"/> <property name="property70" value="36" type="int"/> <property name="property76" value="0" type="int"/> </io> </avldata> ... <avldata priority="10"> ... </avldata> </avl_data_array> </event>