Энергетика · Возобновляемая генерация

Панель оператора вместо отчёта:
BI для солнечной и ветровой генерации

Крупный оператор солнечных электростанций и ветропарка получил в Glarus BI операторские дашборды, которые в любой момент дня отвечают на три вопроса: сколько выработано, сколько должно быть выработано к текущему часу и где именно возникло отставание — по компании, станции или отдельной турбине. Штатные диаграммы такую панель не воспроизводят, поэтому визуализации собраны как свои виджеты на чистом JavaScript.

6 дашбордоврабочие панели по солнечной и ветровой генерации
>15 типоввиджетов на чистом JS без внешних библиотек
20,3 с → 0,06 сускорение тяжёлого запроса после оптимизации
каждые 15 минплан выработки обновляется автоматически
2 темытёмная и светлая, всегда синхронно + мобильная версия
О клиенте и задаче

Не отчёт в конце суток, а картина на текущий час

Клиент — крупный оператор солнечной и ветровой генерации: парк солнечных электростанций и ветропарк с разной физикой выработки. Телеметрия непрерывно пишется в MS SQL и ClickHouse, данных достаточно — не хватало панелей, которые превращают эти данные в решение прямо во время смены.

Ключевое требование — сравнивать факт не с планом на конец суток, а с планом на текущий час: только так видно, укладывается станция в график или уже отстаёт. Отдельно шло оформление: заказчик передал не текстовое ТЗ, а макет — тёмные плитки, накопительные шкалы, отметку текущего времени на оси, статусы турбин цветом.

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

Почему не штатные графики

Свои виджеты на чистом JavaScript

Штатные типы диаграмм такую панель не воспроизводят — ни по компоновке, ни по логике сравнения: план требовалось сопоставлять не с концом суток, а с текущим часом.

В Glarus BI есть механизм пользовательских визуализаций: виджет — это отдельный JS-плагин, который платформа отрисовывает в изолированном iframe и передаёт ему результат SQL-запроса. Внешние библиотеки в песочницу не загружаются, поэтому весь код написан на чистом JavaScript без зависимостей — включая отрисовку графиков и анимацию.

  • Логика сравнения с текущим часом — план и факт совмещены на одной оси суток с отметкой «сейчас».
  • Компоновка по макету заказчика — тёмные плитки, накопительные шкалы, статусы цветом.
  • Свой рендеринг — графики, анимация и адаптив реализованы внутри плагина.

Готовые виджеты для типовых задач

Кастомные визуализации под конкретный проект — это верхний уровень. Базовый набор интерактивных виджетов на Apache ECharts доступен в каталоге и ставится в инстанс в один клик.

Открыть магазин виджетов
Как устроены дашборды

Два актива — две панели

Выберите актив, чтобы увидеть состав виджетов и логику каждой панели. Все графики — рабочие виджеты на живых данных телеметрии.

01

Ветропарк

Панель оператора ветропарка: выработка за сутки против плана, ключевые показатели с поверкой на текущий час и статусы всего парка турбин со сквозным фильтром по группам.

Виджеты панели

  • График выработки за сутки — ось всегда охватывает полные сутки, 00:00–24:00: пунктир — план, сплошная линия — факт. Ниже — накопительные итоги за месяц и за год в формате «факт / план» и отклонение от плана на текущую дату.
  • KPI-сетка — выработка, активная мощность, КИУМ и пиковая мощность. Каждый показатель сравнивается с планом на текущий час — только так видно, укладывается станция в график.
  • Панель турбин — статусы всего парка с разбивкой по группам и подсветкой проблемной группы, скорость и направление ветра. Выбор группы работает как фильтр и перестраивает остальные виджеты дашборда.

Ценность для оператора

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

02

Солнечные станции

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

Виджеты панели

  • График выработки — по всему парку с итогами за сутки и за месяц, план и факт на одной оси.
  • Спидометр выполнения плана — сводный процент выполнения в целом по компаниям одним взглядом.
  • Карта станций — станции сгруппированы по компаниям: размер плитки соответствует объёму выработки, цвет — проценту выполнения плана. Отстающая компания видна сразу.
  • Разрезы «компании и станции» и «план / факт» — те же данные в виде списков, когда нужны точные значения, плюс тренд выработки за сегодня.

Ценность для оператора

Карта станций заменяет пролистывание таблиц: проблемная компания подсвечена цветом и размером, а списки рядом дают точные цифры план / факт для разбора.

Инженерная часть

Четыре нестандартные задачи

Почти ни одна из них не решалась штатными настройками платформы — каждую пришлось довести до работы у заказчика.

Производительность
20,3 с → 0,06 с

Запрос, который не успевал отрисоваться

Фильтр по группам турбин обрушил производительность графика: запрос выполнялся двадцать секунд, виджет не успевал отрисоваться. Причина оказалась не в индексах — SQL Server пересчитывал общее табличное выражение при каждом обращении, а внутри был миллион строк телеметрии.

Промежуточный результат материализовали в табличную переменную — и 20,3 секунды сократились до 0,06.

Источники данных

Данные, которых не было в источнике

Фильтр по группам требовал разбивки по отдельным турбинам, тогда как телеметрия поступала агрегированной по станции — восстановить детализацию постфактум было невозможно.

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

Автоматизация

План, который обновляется сам

План выработки приходит по электронной почте. n8n забирает его из письма и пишет в ClickHouse; далее по расписанию сервис раз в 15 минут встраивает актуальную почасовую кривую плана в манифест плагина, публикует новую версию виджета и переключает на неё карточку. Участие человека не требуется.

У схемы есть обратная сторона — она отказывает бесшумно. Однажды доступ сменился, автообновление трое суток не отрабатывало, и линия плана исчезла с графика при внешне исправном дашборде. Теперь результат каждой публикации проверяется автоматически, и о сбое мы узнаём раньше заказчика.

Адаптив и темы

Мобильная версия и светлая тема

Оператор работает с ноутбука, руководитель — с телефона, и на телефоне дашборд должен оставаться рабочим инструментом. Каждый виджет сам измеряет свой контейнер и выбирает раскладку: блоки выстраиваются друг под другом, шрифты пересчитываются, подписи осей прореживаются — и всё это, не изменив десктопную версию ни на пиксель.

По той же логике сделаны темы: у каждого виджета есть тёмная и светлая версия, обе поддерживаются в едином состоянии — изменение публикуется сразу в две.

Процесс сборки

Почему виджетов так много

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

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

220отдельных плагинов в реестре
613версий плагинов
26карточек на дашбордах
~7 000строк JS без зависимостей
Инфраструктура

Работа в закрытом контуре заказчика

  • Self-hosted в Docker: стек из Glarus BI, PostgreSQL, ClickHouse и n8n во внутренней сети.
  • Доступ через RDP-шлюз с подтверждением на телефон и далее по SSH — любое изменение проходит через эту цепочку.
  • Управление версией платформы: обновление с 52 на 57 нарушило отрисовку кастомных виджетов — откатили и зафиксировались на 52.
  • Причину передали в разработку платформы вместе с воспроизведением на демо-стенде — для адаптации системы под проект.

Что мы вынесли из проекта

Практически ни одна задача не решалась штатными настройками. Не было нужной визуализации — разработали свою. Платформа не передавала настройки в виджет — выстроили процесс сборки и публикации вокруг этого ограничения. Запрос выполнялся двадцать секунд — переписали так, что он стал выполняться за доли секунды. Не хватало данных в источнике — подготовили техническое задание на доработку базы. Обновление платформы нарушило работу виджетов — откатили, установили причину и передали её в разработку.

Задача считается решённой, когда она работает у заказчика, а не когда исчерпаны штатные возможности инструмента. Ограничения платформы для нас — условия работы, а не основание сказать «так нельзя».

Нужна такая панель под вашу генерацию?

Развернём Glarus BI в вашем контуре, подключим телеметрию и соберём операторские дашборды с собственными виджетами под ваши требования. Проведём демонстрацию и пилот на ваших данных.