Формат данных событий не зависит от типа устройства.
<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>