Создание отчетов о потреблении

Текущее руководство объясняет, как создавать отчеты о потреблении на основе агрегированных значений счетчиков расходных материалов. Такой отчет может суммировать почасовое/ежедневное/недельное/месячное/годовое потребление нижеперечисленных и аналогичных метрик:

  • Энергия по текущему тарифу (ватт-часы)

  • Расход (кубические метры)

  • Время работы оборудования (часы)

Подсчёт потребления энергии по текущему тарифу

Для нашего примера мы создадим Виртуальное устройство, содержащее случайную переменную, которая изменяется каждые несколько секунд.

Для наших целей мы предположим, что эта случайная величина указывает на текущее энергопотребление устройства в киловаттах. Чтобы создать отчет, показывающий уровень потребления, нам нужно получить информацию о потреблении, сгруппированную по различным периодам: дням, неделям, месяцам и годам.

Создание канала статистики

Мы будем использовать модуль управления процессами статистики, чтобы вычислить нормы потребления и агрегировать их для получения средних значений за час/день/неделю/месяц.

Прежде всего, нам нужно создать канал статистики. Он будет выполнять все расчеты норм потребления энергии. Для создания статистического канала щелкните Редактировать свойства аккаунта устройства из контекстного меню устройства, выберите вкладку Каналы статистики (1) и добавьте новую строку в таблицу каналов (2).

Назовем канал energy_consumption и выберем переменную, которую хотим отслеживать, в данном случае это Случайное значение (3). Далее открываем таблицу Параметров (4).

В диалоговом окне параметров в качестве Выражения вводим ссылку на нужное поле. Это выражение должно возвращать единственное значение, которое будет оцениваться при каждом изменении переменной (т.е. при каждом опросе устройства). В результате должно всегда получаться число. Наша случайная переменная изменяется каждую минуту и принимает значение от 0 до 10 включительно. Мы используем следующее выражение:

round({.:random$value}*10)

которое состоит из следующих частей:

  • Ссылка на нашу случайную переменную value{.:random$value}.

  • Умножаем на десять, чтобы было немного проще и интереснее {.:random$value}*10

  • Мы используем функцию round(), чтобы немного упростить задачу.

На практике мы можем использовать множество математических операторов. Если мы предположим, что наше Случайное значение выражено в киловаттах, мы можем перевести его в ватты с помощью {.:random$value}*1000. Возможно, нас интересует среднее потребление энергии нашим устройством по минутам. В этом случае мы знаем, что наше устройство обновляется каждые 60 секунд, поэтому мы можем представить наше случайное значение как "киловатт-минуты" и преобразовать его в киловатт-часы, используя правило преобразования (1 час / 60 минут), чтобы получить выражение {.:random$value} / 60

Так как кВт является мерой потребляемой мощности, мы установили статистику нашего типа канала на Индикатор. Текущий тип канала вычисляет текущую потребляемую мощность, поэтому значение по каналу будет измеряться в средних киловаттах в минуту. Если бы мы измеряли показания электросчетчика с постоянно растущим значением кВт в часах и хотели измерить "скорость изменения" счетчика, мы бы использовали тип Тип счетчика . Более подробную информацию о типах каналов статистики вы можете получить здесь.

В конечном счете, опции нашего канала выглядят примерно так:

Обратите внимание, что выбранные нами параметры Агрегации означают, что будут рассчитаны Среднее, Минимальное и Максимальное значения для каждого Периода агрегации. Периоды хранения определяют длину истории для каждого тарифа агрегации: один час ежеминутной статистики (средние показатели за последние 60 минут), один день ежечасной статистики и так далее.

Создание запроса для получения исходных данных для отчета о потреблении

Наш отчет о потреблении будет основан на запросе. Откройте контекстное меню узла Запросы в дереве Системные деревья и нажмите кнопку Создать. Создадим запрос со следующим текстом запроса:

SELECT 
stats.statistics$context as "Device Context",
stats.statistics$end as "Period",
stats.statistics$average * 60 as "Average kW per hour"
FROM
utilities:statistics("users.admin.devices.virtual", "energy_consumption", null, "hour") as stats

Текущий запрос вызывает функцию статистики из контекста Утилиты для получения статистических данных о расходе энергии. Текущий запрос пропустит следующие параметры в эту функцию:

  • "users.admin.devices.virtual" - путь к вашему устройству,

  • "energy_consumption" - имя нашего канала статистики,

  • "null" - ключ ряда, в нашем случае не используется,

  • "hour" - коэффициент агрегации (запрос выдаст непустые результаты, если с момента создания нашего статистического канала прошло более часа, но для отладки и более раннего просмотра результатов можно временно использовать значение "минут").

Запрос выбирает три поля из результата функции:

  • stats.statistics$context - контекст устройства,

  • stats.statistics$end - временная метка окончания каждого периода агрегации,

  • stats.statistics$average * 60 - среднее значение минутного потребления, умноженное на 60 минут в течение часа.

Здесь находится окно настройки запроса:

Когда создание запроса будет завершено, вы можете выполнить его, щелкнув на запросе в Системном дереве.

Вы должны увидеть агрегированную таблицу потребления.

Создание инструментальной панели отчета о потреблении

Мы создадим простую инструментальную панель для отображения данных из нашего запроса. Чтобы создать новую панель, откройте контекстное меню узла Инструментальная панель в Системном дереве и нажмите кнопку Создать. Введите Имя и Описание в диалоге свойств.

Новая Инструментальная панель должна быть видна в Системном дереве под узлом Инструментальные панели. Откройте конструктор инструментальных панелей, открыв контекстное меню новой инструментальной панели и выбрав Редактировать панель инструментов.

В редакторе Инструментальной панели выберите Палитру компонентов (1) и перетащите компонент Таблица с данными в первую ячейку сетки (2). В левом нижнем углу нового компонента (3) можно изменить размер таблицы, чтобы она занимала несколько больше места.

Сейчас, когда у нас есть компонент для отображения данных, нам нужно создать привязку для сбора и вставки данных в таблицу. Откройте вкладку Дерево компонентов (1) и выберите компонент Корневая панель (2). Это основной компонент инструментальной панели, на котором расположены остальные компоненты. На вкладке Привязки (3) откройте таблицу Все привязки (4).

В таблице Привязки добавьте строку (1) и выберите опцию "При запуске" (2) в качестве триггера для запуска нашей привязки. На следующих шагах мы определим нашу таблицу в качестве цели (3) для наших данных и определим Выражение расширенного поиска (4), которое активирует запрос и получит данные из запроса, который мы определили выше.

Определение цели

В окне Выберите цель мы выбираем опцию Свойства (1), где мы можем найти наш корень и все компоненты нашей Инструментальной панели. Мы расширяем компонент DataTableEditor0 (2), чтобы открыть связанные с ним переменные. Наконец, мы выбираем переменную Таблица с данными (dataTable) (3) в качестве места, куда мы хотим отправить данные нашего запроса.

Определение выражения

Из окна Конструктора выражений мы переходим к узлу Запросы и расширяем его, чтобы найти наш ранее определенный запрос на потребление энергии. Расширяя узел, находим функцию Выполнить запрос и вставляем ее в выражение, нажав кнопку {>} . В результате в наш конструктор будет вставлено следующее выражение.

{users.admin.queries.energy_consumption:execute()}

Мы можем нажать кнопку Вычислить, чтобы увидеть, каким будет результат выражения при его оценке. Если всё правильно, мы нажимаем OK.

Создав привязку, мы сохраняем изменения (1) и запускаем нашу инструментальную панель в режиме предварительного просмотра (2) .

Инструментальная панель должна выглядеть примерно так, как показано ниже. Сейчас у нас есть таблица, показывающая средний уровень потребления энергии нашим устройством. Вы можете рассмотреть возможность добавления меток и других элементов дизайна, чтобы улучшить пользовательское восприятие вашего отчета.