×

Формирование отчетов HTML

запрос: /entek/api/report/history
Запрос предназначен для формирования отчетов в фромате html из шаблона. Запрос должен содержать обязательные параметры запроса:
  • start_time - начало интервала отчета
  • end_time - конец интервала отчета
  • templ - название файла шаблона с расширением html
  • utc - часовой пояс для отчета. Если параметр не уканаз, то отчет формирутеся при utc=0
Шаблоны необходимо разместить в корне проекта в папке /reports/templates/
Шаблон должен быть валидным xml файлом, т.е. все открывающие ноды должны быть закрыты. Генерация данных происходит в элементе таблицы, вне этого элемента доступно два параметра начало и конец интервала отчета, которые можно указать подставив в текст переменные {@timeStart} и {@timeEnd} соответственно.
 
<br>Report interval from {@timeStart} to {@timeEnd}</br>
Таблица должна содержать два элемента thead для заголовка таблицы и tbody для тела, в котором будут генерироваться данные, также есть обязательный блок scada с настройками таблицы. В ноде scada указываются параметры, которые будут запрашиваться в базе данных, а также тип отчета, шаг, с которым отображаются данные, количество знаков после запятой, количество строк и режим сортировки.
Атрибуты доступные для ноды scada:
  • type - тип отчета. Доступные значения: values - отчет из базы данных истории; events - отчет из базы данные событий, которая установлена по умолчанию
  • step - шаг запроса данных. Доступные значения: указывается число секунды или минут, а после числа указывается s/sec или m/min соответственно (только для типа отчета история).
  • decimal - количесвто знаков после запятой у значений, которые будут генерироваться (только для типа отчета история).
  • dataCount - количество выводимых записей при запросе без шага или колиство последних записей истории событий, в рабочем режиме (если параметр не задан, то ограничение 30 записей).
  • sort - сортировка записей по временной метке. asc - сортировка по возрастанию (по умолчанию); desc - сортировка по убыванию
  • lastData - запрос последних записей из базы данных событий (допустимые значение 1 - использовать / 0 - не использовать). Применяется вместе с атрибутом dataCount для того, чтобы указать количество последних записей. Является приоритетным атрибутом, при его использовании не учитывается передаваемый временной интервал и тип сортировки (только для типа отчета событий).
  • useColors - использование цвета фона и шрифта из настроек событий (допустимые значение 1 - использовать / 0 - не использовать) (только для типа отчета событий).
Внутри ноды scada перечисляются параметры в нодах value с обязательными атрибутами name - пользовательское наименование переменной, которое будет подставляться в теле таблицы; addr - код параметра для запросов к базе данных для запроса истории или код поля событий для запроса событий. Также при запросе истории для параметров опционально можно задать доступные алгоритмы для обработки данных (sum - сумма, average-sum - среднее значение), для них предусмотрен атрибут algorithm, в котором можно перечислить, разделяя строго только запятой, все нобходимые алгоритмы для каждого параметра. Для запроса событий можно задать группы событий в ноде groups, перечисляя их через символ ';', группы должны быть указаны в верхнем регистре. А также можно указать станции и контроллеры для поиска событий в ноде controllers, id контроллеров указываются числом в значении ноды, а станции в ее атрибуте stId.
Пример перечисления групп событий
 
<groups>DASERVERGROUP;STARTSTOPGROUP</group>
Пример перечисления контроллеров и станции
 
<controllers stId="0;1">0;1</controllers>
Пример ноды scada:
 
<scada type="values" step="1m" decimal="3">
        <value name="V1P" addr="EnLogic.St0.T222.Grp0.Id91"></value>
        <value name="V1Q" addr="EnLogic.St0.T222.Grp0.Id92" algorithm="sum,average-sum"></value>
        <value name="V1I" addr="EnLogic.St0.T222.Grp0.Id93" algorithm="average-sum"></value>
</scada>
Допустимые коды полей событий:
имя параметра
описание
group_name
название группы событий
client_id
ip-адресс клиента
event_time
временная метка события
event_text
текст события
event_number
номер события
event_type
тип события
comment
комментарий
user
имя пользователя
station_id
id станции
group_id
id контроллера
passp_type
тип параметра
passp_id
id параметра
passp_time
временная метка значения
passp_val
значение параметра
alarm_priority
приоритет
alarm_ack
квитирование аларма
alarm_ack_user
пользователь, заквитировавший аларм
alarm_ack_time
время квитирования
alarm_end_time
время окончания аларма
alarm_set_val
значение аларма
Внутри ноды tbody в ноде tr с атрибутом gen="true" указываются параметры, которые будут генерироваться. Параметры указываются в фигурных скобках и перед пользовательским названием ставится символ @ (Пример: {@V1P}). Также достуны функция формирования метки интервала, для этого указывается переменная timestamp, а через точку указывается тип временной метки Date - для даты, Time - для времени, если ничего не указать то формат будет содержать дату и время, а для временной метки событий необходимо использовать поле event_time, которое перед этим необходимо указать в ноде value в секции scada. Функция genNum предназначена для подстановки номера строки таблицы.
А для вызова результата алгоритма в таблице надо указать его название из атрибута name и через точку указать название алгоритма (доступно только для статических строк без атрибута gen="true").
Пример ноды tbody:
 
<tbody>
        <tr gen="true">
               <td>{@timestamp.Date}</td>
               <td>{@timestamp.Time}</td>
               <td>{@V1P}</td>
               <td>{@V1Q}</td>
               <td>{@V1I}</td>
        </tr>
</tbody>
Пример использования алгоритма в сроке таблицы:
 
<tr>
        <td>Average</td>
        <td></td>
        <td></td>
        <td>{@V1Q.average-sum}</td>
        <td>{@V1I.average-sum}</td>
</tr>
Пример полного шаблона отчета истории:
 
<html>
        <body>
               <br>SCADA report</br>
               <br>from {@timeStart} to {@timeEnd}</br>
               <table id="table1" cols="23" border="1" cellspacing="0" cellpadding="2" width="100%%">
                  
                       <scada type="values" step="1m" decimal="3">
                         <value name="V1P" addr="EnLogic.St0.T222.Grp0.Id91"></value>
                                 <value name="V1Q" addr="EnLogic.St0.T222.Grp0.Id92" algorithm="sum,average-sum"></value>
                                 <value name="V1I" addr="EnLogic.St0.T222.Grp0.Id93" algorithm="average-sum"></value>
                   </scada>
                      
                       <thead>
                               <tr align="center">
                                      <th>Num</th>
                                      <th>Date</th>
                                      <th>Time</th>
                                      <th>Q, kVA</th>
                                      <th>I, A</th>
                               </tr>
                       </thead>
                       <tbody>
                               <tr gen="true">
                                      <td>{@genNum}</td>
                                      <td>{@timestamp.Date}</td>
                                      <td>{@timestamp.Time}</td>
                    <td>{@V1P}</td>
                                      <td>{@V1Q}</td>
                                       <td>{@V1I}</td>
                               </tr>
                               <tr>
                                      <td>Total</td>
                                      <td></td>
                                      <td></td>
                                      <td>{@V1Q.sum}</td>
                                      <td></td>
                               </tr>
                               <tr>
                                      <td>Average</td>
                                      <td></td>
                                      <td></td>
                                      <td>{@V1Q.average-sum}</td>
                                      <td>{@V1I.average-sum}</td>
                               </tr>
                       </tbody>
               </table>
        </body>
</html>
Пример полного шаблона отчета событий:
 
<html>
        <body>
               <br>SCADA report</br>
               <br>from {@timeStart} to {@timeEnd}</br>
               <table id="table1" cols="23" border="1" cellspacing="0" cellpadding="2" width="100%%">
                       <scada type="events" sort="desc" dataCount="100" lastData="1" useColors="1">
                                 <groups>DASERVERGROUP;STARTSTOPGROUP</groups>
                                 <controllers stId="0">0;1</controllers>
                         <value name="group_name" addr="group_name"></value>
                                 <value name="client_id" addr="client_id"></value>
                                 <value name="event_time" addr="event_time"></value>
                                 <value name="event_text" addr="event_text"></value>
                                 <value name="comment" addr="comment"></value>
                                 <value name="station_id" addr="station_id"></value>
                                 <value name="group_id" addr="group_id"></value>
                                 <value name="passp_type" addr="passp_type"></value>
                   </scada>
                       <thead>
                               <tr align="center">
                                      <th>Num</th>
                                      <th>Date</th>
                                      <th>Group</th>
                                      <th>Client</th>
                                      <th>Event</th>
                                      <th>Comment</th>
                                      <th>Station</th>
                                      <th>controller</th>
                                      <th>Passp type</th>
                               </tr>
                       </thead>
                       <tbody>
                               <tr gen="true">
                                      <td>{@genNum}</td>
                                      <td>{@event_time}</td>
                                      <td>{@group_name}</td>
                                      <td>{@client_id}</td>
                                      <td>{@event_text}</td>
                                      <td>{@comment}</td>
                                      <td>{@station_id}</td>
                                      <td>{@group_id}</td>
                                      <td>{@passp_type}</td>
                               </tr>
                       </tbody>
               </table>
        </body>
</html>
---