События

Универсальные события

Формат данных событий не зависит от типа устройства.


	<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 содержит идентификатор модема.

Пример XSLT скрипта для обработки описанных событий


<?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

Сообщение от 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

CCU-6225

Пример 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>

 
	

FM3101 (GPRS)

Сообщения от 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>
 

Примечания

  • Элемент avl_data_array как правило содержит несколько элементов avldata
  • Событие содержит общую временную метку (когда оно было принято) и индивидуальную метку в каждом элементе avldata (когда событие возникло в устройстве). События не обязательно поступают в порядке их возникновения.

Соответствие названий свойств (аттрибут name тэга property)

  • Nokia12 digital input 5,6,7,8,9,10,11 = di5,di6,di7,di8,di9,di10,di11
  • Nokia12 digital output 2,3,4,5,6,7,8,9 = do2,do3,do4,do5,do6,do7,do8,do9
  • Nokia12 analog input 1,2,3 = ai1,ai2,ai3
  • Прочие (виртуальные) свойства = property+номер свойства, например property76