MiroxMirox
  • Platform

    • Philosophy
    • Platform Overview
    • Platform Resources
  • Mirox-Cloud

    • Cloud Overview
    • Connected Microservices
  • Mirox-Agent

    • Agent Overview
    • Deployment Options
    • Data Scraper
    • Digital Twin
  • Technical Details

    • Metric Collection
  • Information

    • Supported Plants
  • Plant Types

    • Solar Plants
    • Wind Plants
    • Battery Storage
    • Alarm System
  • Monitoring & Visualization

    • Real-time Monitoring
    • Digital Twin
    • Component States
    • Inverter Status Codes
    • Inverter Events
    • Loss Detection
    • Power Limits & Curtailment
    • Efficiency Detection
    • KPI Dashboard
  • Data Management

    • Events
    • Tickets
    • Forecasts
    • Reports
    • Metrics
  • Integration & Sharing

    • Cooperations
    • API Tokens
    • VPN
    • Proxy
  • AI

    • AI Assistant & Wizards
    • Agentic Access (MCP)
  • Billing

    • Market & Tariffs
    • Accounting & Billing
  • Collaboration

    • Invitations
  • Security

    • Authentication
    • Account Lockout
    • Permission System
    • Network Segmentation
    • Cooperation Restrictions
    • Access Audit Logging
    • Activity & Audit Trail
  • Nodes

    • mrxnode
  • Application

    • Door Control
    • Generic Relay
  • Edge Cluster

    • Orchestration
  • Getting Started

    • Onboarding
    • Setup
  • Personal

    • Using the VPN
    • Using the Proxy
    • Two-Factor Authentication
    • Sessions
    • API Tokens
    • Notifications
    • Connect Microsoft Teams
  • Per Park

    • Contacts
    • Network Devices
    • Data Loggers
    • Components
    • Direct VPN (per Agent)
    • Data Volume
    • History Import
  • Organization

    • Member Permissions
    • Cooperations
    • File Storage
    • VPN Services
  • Data Export

    • Export Metric API
    • MiroxQL Query Language
    • External Report Generation
    • Grafana
    • Grafana Dashboards
    • API Overview
  • Support

    • Request an Integration
  • mrxnode

    • Overview
    • How-To Guide
    • Container Deployment
    • Command Cheatsheet
    • Troubleshooting
  • Reporting

    • External Report Generator
    • Raw Data Export for Excel
  • Remote Access
  • AI in Mirox
  • History Import
  • English
  • Deutsch
  • Español
  • Français
  • Português
  • Italiano
  • English
  • Platform

    • Philosophy
    • Platform Overview
    • Platform Resources
  • Mirox-Cloud

    • Cloud Overview
    • Connected Microservices
  • Mirox-Agent

    • Agent Overview
    • Deployment Options
    • Data Scraper
    • Digital Twin
  • Technical Details

    • Metric Collection
  • Information

    • Supported Plants
  • Plant Types

    • Solar Plants
    • Wind Plants
    • Battery Storage
    • Alarm System
  • Monitoring & Visualization

    • Real-time Monitoring
    • Digital Twin
    • Component States
    • Inverter Status Codes
    • Inverter Events
    • Loss Detection
    • Power Limits & Curtailment
    • Efficiency Detection
    • KPI Dashboard
  • Data Management

    • Events
    • Tickets
    • Forecasts
    • Reports
    • Metrics
  • Integration & Sharing

    • Cooperations
    • API Tokens
    • VPN
    • Proxy
  • AI

    • AI Assistant & Wizards
    • Agentic Access (MCP)
  • Billing

    • Market & Tariffs
    • Accounting & Billing
  • Collaboration

    • Invitations
  • Security

    • Authentication
    • Account Lockout
    • Permission System
    • Network Segmentation
    • Cooperation Restrictions
    • Access Audit Logging
    • Activity & Audit Trail
  • Nodes

    • mrxnode
  • Application

    • Door Control
    • Generic Relay
  • Edge Cluster

    • Orchestration
  • Getting Started

    • Onboarding
    • Setup
  • Personal

    • Using the VPN
    • Using the Proxy
    • Two-Factor Authentication
    • Sessions
    • API Tokens
    • Notifications
    • Connect Microsoft Teams
  • Per Park

    • Contacts
    • Network Devices
    • Data Loggers
    • Components
    • Direct VPN (per Agent)
    • Data Volume
    • History Import
  • Organization

    • Member Permissions
    • Cooperations
    • File Storage
    • VPN Services
  • Data Export

    • Export Metric API
    • MiroxQL Query Language
    • External Report Generation
    • Grafana
    • Grafana Dashboards
    • API Overview
  • Support

    • Request an Integration
  • mrxnode

    • Overview
    • How-To Guide
    • Container Deployment
    • Command Cheatsheet
    • Troubleshooting
  • Reporting

    • External Report Generator
    • Raw Data Export for Excel
  • Remote Access
  • AI in Mirox
  • History Import
  • English
  • Deutsch
  • Español
  • Français
  • Português
  • Italiano
  • English
  • Getting Started

    • Onboarding
    • Setup
  • Personal

    • Using the VPN
    • Using the Proxy
    • Setting Up Two-Factor Authentication
    • Managing Your Sessions
    • API Tokens
    • Notifications
    • Connect Microsoft Teams
  • Per Park

    • Managing Plant Contacts
    • Managing Network Devices
    • Configuring Data Loggers
    • Configuring Components
    • Configuring VPN Servers per Agent (Direct VPN)
    • Data Volume per Plant
    • Importing a Plant's History
  • Organization

    • Managing Member Permissions
    • Creating Cooperations
    • Using File Storage
    • Organization VPN Services
  • Data Export

    • Export Metric API
    • MiroxQL Query Language
    • External Report Generation
    • Using Grafana as an External Read Platform
    • Building Your Own Grafana Dashboards
    • API Overview
  • Support

    • Request an Integration
  • mrxnode

    • mrxnode Overview
    • mrxnode How-To Guide
    • Container Deployment
    • mrxnode Command Cheatsheet
    • Troubleshooting

Building Your Own Grafana Dashboards

The provisioned Grafana is not read-only. Every portfolio has its own Grafana workspace in which you can build dashboards on the same raw time series the platform records — as long as you keep one rule: the overview dashboard Mirox provides is managed and gets replaced on every version rollout, so build your own dashboards as copies, never by editing it. This guide explains how Grafana is structured, what you may change, and how the platform's time series have to be read to give correct numbers.

If you only want to open the provided dashboard, see Using Grafana as an External Read Platform. For the metric catalogue, see Metric Collection.

How Grafana Is Structured

One Grafana organization per portfolio

Mirox provisions one Grafana organization per portfolio, named <organization> - <portfolio>. Everything inside it is shared by the portfolio's members:

  • One data source (<organization> - <portfolio>), scoped to the plants of that portfolio. Every query you write runs against this data source and can only ever see the portfolio's plants — there is nothing to configure and nothing to leak.
  • One managed dashboard, Portfolio Overview - <portfolio>, provided by Mirox (see below).
  • Your own dashboards and folders, visible to everyone who can see the portfolio.

Because a portfolio is the unit of resource sharing, a plant that belongs to several portfolios is reachable from each of their Grafana organizations, and a dashboard you build in one portfolio does not appear in another. Put a dashboard where the people who need it are members.

Who can view and who can edit

Grafana membership follows the platform's permissions and is refreshed automatically whenever they change — there is no separate Grafana user management:

Platform roleGrafana roleCan
Any user who can see the portfolioViewerOpen every dashboard of the portfolio, change time range and variables, explore queries
Job roles Operator and Technical manager on the portfolio (or on a plant of it), organization admins and ownersEditorAdditionally create, edit, import and delete dashboards and folders in the portfolio's organization

Membership and roles are synced when a permission is granted or revoked; an open Grafana session is refreshed so that a newly promoted editor does not need to log out and in again.

The Managed Overview Dashboard

Portfolio Overview - <portfolio> is rendered by Mirox from a published template version. The dashboard's tags carry the version (mirox-template-v<N>) and its description names the exact published content. Mirox administrators roll new versions out from the platform's admin area, and a rollout deletes and re-creates the dashboard — this is what keeps every portfolio on a known, tested template.

Never edit the managed dashboard

Any change you make to Portfolio Overview - <portfolio> — a new panel, a changed query, a different layout — is lost the next time a template version is applied to the portfolio. Grafana's own version history does not protect it either: the rollout replaces the dashboard as a whole.

What to do instead:

  1. Open the managed dashboard, then use Edit → Save as copy (or Export → Export as JSON and Import) to create your own copy with a new name. Put it in a folder of your own.
  2. Build on the copy: add panels, change queries, add variables. Your copy is yours — no rollout touches it.
  3. After a new template version is rolled out, open the managed dashboard once to see whether it gained panels you want to carry over to your copy.

The same applies to every dashboard you create from scratch: anything that is not the managed overview is left alone by the platform.

Start from the template's variables

The managed dashboard's park variable lists the portfolio's plants by name and hands the plant identifier to the queries; group selects a plant's sub-groups; inverter and gak are populated from the data. A copy keeps these variables, so the fastest way to a working custom dashboard is to copy the overview and remove what you do not need.

Reading the Time Series Correctly

Grafana shows you whatever a query returns, so a wrong reading looks exactly like a right one. The rules below are the ones the platform itself follows in its reports; a custom dashboard that follows them prints the same numbers as the report pages.

Labels: what a series is

Every series is identified by its metric name plus its labels. The labels you will filter and group by:

LabelMeaning
parkThe plant identifier (the 12-character plant UID). Always filter on it — the park variable of the managed dashboard provides it as ${park}
groupThe plant's sub-group (segments of a plant with separate feed-in)
inverter_id, gak_id, string_numberComponent identities: an inverter, a combiner box under it, a string under that
turbine_idA wind turbine
idA feed-in meter, an irradiance sensor or another standalone device
phaseL1, L2, L3 on per-phase electrical series
sensor, blade, positionInstance labels on multi-instance series (turbine temperatures, blade pitch, sensor position)
box, storage, module, cell, pcsThe battery hierarchy
boot_timePresent on the platform's own energy counters — one series per agent start (see below)
segment_idPresent on per-segment duplicates of source-derived series; segment_id!~".+" selects the plant-level series
clipping, pr, variant, modelLane selectors on the analytics families: which model lane (clipping="considered"), whether the PR is applied (pr="valid" / pr="none"), the clean PR (variant="clean"), the satellite model (model="eumetsat_sarah3")

Two things are deliberately not labels: component names (see the next section) and units — every value is stored in base SI units: W, Wh, V, A, Hz, °C, W/m², Wh/m². Set the Grafana unit to watt / watt-hour and let Grafana scale to kW / MWh; never divide in the query.

Showing current component names

Telemetry carries component identifiers, not names: a rename in Mirox must not split a series into "before" and "after". The current names are published as their own info series — powerplant_inverter_info, powerplant_gak_info, powerplant_string_info, powerplant_feedin_info, powerplant_turbine_info — keyed exactly like the telemetry and carrying the name as a label (inverter_name, gak_name, string_name, meter_name, turbine_name). Join them onto the telemetry with the following pattern (this is what the managed dashboard does):

sum by (inverter_id, inverter_name) (
  (
    powerplant_inverter_power_ac{park="${park}"}
    * on (park, inverter_id) group_left(inverter_name)
    sgn(topk_last(1, last_over_time(powerplant_inverter_info{park="${park}"}[7d] @ (now()))) by (park, inverter_id))
  )
  or on (park, inverter_id) powerplant_inverter_power_ac{park="${park}"}
)

How it works: last_over_time(...[7d] @ (now())) picks the newest info point for each component as of now, so a rename is reflected on every time range; sgn() turns it into a 1 that the multiplication keeps; group_left(inverter_name) copies the name onto the telemetry; and the or on (...) branch keeps a component visible (by its id) if it has no info series yet. For a combiner box join on (park, inverter_id, gak_id) with gak_name; for a string on (park, inverter_id, gak_id, string_number) — the info series only carries gak_id when the string sits behind a combiner box, mirroring the telemetry. Never chart, sum or alert on an info series itself.

The four shapes of a series

The report engine reads every series in one of four ways. Use the same reading and your dashboard agrees with the report pages.

ShapeWhat it isRead it with
Counter (energy register)A cumulative Wh / Wh/m² counter, monotonicsum(increase(<metric>{...}[$__interval])) for a bar per bucket; running_sum(sum(increase(<metric>{...}[$__interval]))) for a cumulative curve; sum(increase(<metric>{...}[$__range])) for the period total
Minute gaugeA value per minute (power, voltage, temperature)avg_over_time(<metric>{...}[$__interval]), summed (sum(...)) across a plant or averaged (avg by (...)) per component
Quarter-hour laneOne value per 15 minutes, stamped at the quarter (limits, settled curtailment, weather forecast, market prices)last_over_time(<metric>{...}[15m]) — a quarter-hour bucket is the sample itself; never average it into finer steps
Trailing-day ratioA ratio the platform recomputes daily as a trailing mean (performance ratio)avg_over_time(<metric>{variant="clean"}[7d]) — never sum, never increase

Energy is a register, not an integrated power curve

Never compute energy by integrating a power series yourself. Every energy quantity has its own cumulative counter, and the counter is what the platform reads. Two consequences:

  • The platform's own counters (powerplant_grid_energy_total, powerplant_inverter_energy_total, every *_expected_energy_total, *_radiation_energy_total, *_curtailment_*_energy_total, …) carry a boot_time label — one series per agent start. Always read them as sum(increase(...)): the increase is taken per series and only then added, so a restart never produces a spike or a drop. For the current value of such a counter use max without (boot_time) (...).
  • Raw device counters (powerplant_energy_grid_total, powerplant_inverter_energy_ac_total) exist once per meter or inverter. sum(increase(...)) adds them correctly; a bare sum(...) of the raw values is only meaningful while every device reports.

Plant totals versus components

Source-derived analytics series (models, expected power, performance ratio, curtailment) exist at plant level and once per segment. Select the plant-level series with segment_id!~".+" or a segmented plant reads N + 1 times. The same applies to onshore wind settlement: per-turbine points carry turbine_id, the park sum carries none — use turbine_id!~".+" for the park lane.

For per-component panels group by the identity labels and, where you want names, join the info series as shown above. Per-component modelled power and PR (powerplant_<source>_inverter_power, powerplant_<source>_inverter_pr, and the gak / string twins) exist for the pyranometer and weather sources.

Status codes and states

powerplant_inverter_vendor_status, powerplant_turbine_vendor_status, battery_*_vendor_status are the maker's own codes: a gap means "not read", and the value is a code, never a quantity — do not sum or average them. powerplant_inverter_operating_state and powerplant_turbine_operating_state are the platform's standard states (0 unknown … 8 fault), numbered so that max by (inverter_id) reads as "the worst state in the bucket". Show them with a Grafana value mapping rather than as a line.

Common pitfalls

  • last_over_time(...[30y]) to fetch "the latest value" scans the whole retention on every refresh. Use a window that matches the series cadence — [1h] for a minute gauge, [1d] for a daily value, [7d] for the info series.
  • Filtering on names (inverter_name="WR 01") stops working after a rename. Filter on inverter_id and show the name through the info-series join.
  • Mixing lanes: powerplant_pyranometer_power without clipping / pr pins returns several lanes of the same quantity. Pin the lane you mean — the table below names the pins the reports use.
  • Multi-meter plants: powerplant_power_grid is one series per meter. sum(...) them, or read powerplant_grid_power, which is already the summed, minute-aligned plant series.
  • Timezone: series are stored in UTC and Grafana displays them in the browser's timezone. Daily values (configured facts, daily verdicts) are stamped at the plant's local midnight, so set the dashboard timezone to the plant's when you compare days.

The Report Series Catalogue

The platform's report and export pages are built from a fixed catalogue of series, each with a defined reading. The table lists every item with the metric it reads, the shape it is read as (see above), the label pins the reports apply, and the level (plant, per inverter, per combiner box, per string, per segment). Items marked solar are only emitted for solar plants; the report unit is the unit the report pages display — the stored series is always in base units (Wh, W, Wh/m²). A pin period="<YYYY-MM>" selects the delivery month of a settled lane.

Meters and production counters
SeriesMetricShapeLabel pinsLevelReport unit
Grid feed-inpowerplant_energy_grid_totalCounter—PlantkWh
Grid consumptionpowerplant_energy_consumed_totalCounter—PlantkWh
Grid reactive energypowerplant_grid_energy_total_reactiveCounter—PlantkVArh
Inverter AC production, sum (solar)powerplant_inverter_energy_ac_totalCounter—PlantkWh
Inverter energy, integrated (solar)powerplant_inverter_energy_totalCounter—PlantkWh
DC energy, sum of combiner boxes (solar)powerplant_gak_energy_totalCounter—PlantkWh
DC energy, sum of strings (solar)powerplant_string_energy_totalCounter—PlantkWh
Plant power
SeriesMetricShapeLabel pinsLevelReport unit
Grid feed-in powerpowerplant_power_gridMinute gauge—PlantW
Grid reactive powerpowerplant_grid_power_reactiveMinute gauge—Plantvar
Grid apparent powerpowerplant_grid_power_apparentMinute gauge—PlantVA
Inverter AC power, sum (solar)powerplant_inverter_powerMinute gauge—PlantW
DC power, sum of combiner boxes (solar)powerplant_gak_powerMinute gauge—PlantW
DC power, sum of strings (solar)powerplant_string_powerMinute gauge—PlantW
Plant-plane radiation
SeriesMetricShapeLabel pinsLevelReport unit
Plant-plane radiation, pyranometer (solar)powerplant_pyranometer_radiation_energy_totalCounter—PlantkWh/m²
Plant-plane radiation, satellite (seamless) (solar)powerplant_satellite_radiation_energy_totalCountermodel!="eumetsat_sarah3"PlantkWh/m²
Plant-plane radiation, satellite (SARAH-3) (solar)powerplant_satellite_radiation_energy_totalCountermodel="eumetsat_sarah3"PlantkWh/m²
Plant-plane radiation, weather model (solar)powerplant_weather_radiation_energy_totalCounter—PlantkWh/m²
Plant-plane irradiance, pyranometer (solar)powerplant_pyranometer_radiation_powerMinute gaugesegment_id!~".+"PlantW/m²
Plant-plane irradiance, satellite (seamless) (solar)powerplant_satellite_radiation_powerMinute gaugemodel!="eumetsat_sarah3", segment_id!~".+"PlantW/m²
Plant-plane irradiance, satellite (SARAH-3) (solar)powerplant_satellite_radiation_powerQuarter-hour lanemodel="eumetsat_sarah3", segment_id!~".+"PlantW/m²
Plant-plane irradiance, weather model (solar)powerplant_weather_radiation_powerQuarter-hour lanesegment_id!~".+"PlantW/m²
Modelled, expected and clear-sky production
SeriesMetricShapeLabel pinsLevelReport unit
Expected production (pyranometer) (solar)powerplant_pyranometer_expected_energy_totalCounterclipping="considered", pr="valid", segment_id!~".+"PlantkWh
Expected production (satellite) (solar)powerplant_satellite_expected_energy_totalCounterclipping="considered", pr="valid", segment_id!~".+"PlantkWh
Expected production (weather model) (solar)powerplant_weather_expected_energy_totalCounterclipping="considered", pr="valid", segment_id!~".+"PlantkWh
Radiation model (pyranometer) (solar)powerplant_pyranometer_energy_totalCountersegment_id!~".+"PlantkWh
Radiation model (satellite) (solar)powerplant_satellite_energy_totalCountermodel!="eumetsat_sarah3", segment_id!~".+"PlantkWh
Radiation model (weather model) (solar)powerplant_weather_energy_totalCountersegment_id!~".+"PlantkWh
Clear-sky production (solar)powerplant_clearsky_energy_totalCounterpr="none", clipping="considered", segment_id!~".+"PlantkWh
Expected power (pyranometer) (solar)powerplant_pyranometer_expected_powerMinute gaugeclipping="considered", pr="valid", segment_id!~".+"PlantW
Expected power (satellite) (solar)powerplant_satellite_expected_powerMinute gaugeclipping="considered", pr="valid", segment_id!~".+"PlantW
Expected power (weather model) (solar)powerplant_weather_expected_powerMinute gaugeclipping="considered", pr="valid", segment_id!~".+"PlantW
Radiation model power (pyranometer) (solar)powerplant_pyranometer_powerMinute gaugesegment_id!~".+", clipping="considered"PlantW
Radiation model power (satellite) (solar)powerplant_satellite_powerMinute gaugemodel!="eumetsat_sarah3", segment_id!~".+", clipping="considered"PlantW
Radiation model power (weather model) (solar)powerplant_weather_powerMinute gaugesegment_id!~".+", clipping="considered"PlantW
Clear-sky power (solar)powerplant_clearsky_powerMinute gaugepr="none", clipping="considered", segment_id!~".+"PlantW
Performance ratio
SeriesMetricShapeLabel pinsLevelReport unit
Performance ratio (pyranometer) (solar)powerplant_pyranometer_prTrailing-day ratiovariant="clean", boot_time!~".+", segment_id!~".+"Plant%
Performance ratio (satellite) (solar)powerplant_satellite_prTrailing-day ratiovariant="clean", boot_time!~".+", segment_id!~".+"Plant%
Performance ratio (weather model) (solar)powerplant_weather_prTrailing-day ratiovariant="clean", boot_time!~".+", segment_id!~".+"Plant%
On-site sensors
SeriesMetricShapeLabel pinsLevelReport unit
Ambient temperature, site sensorpowerplant_ambient_temperatureMinute gauge—Plant°C
Module temperature, site sensorpowerplant_module_temperatureMinute gauge—Plant°C
Wind speed, site sensorpowerplant_wind_speedMinute gauge—Plantm/s
Wind direction, site sensorpowerplant_wind_directionMinute gauge—Plant°
Humidity, site sensorpowerplant_humidityMinute gauge—Plant%
Power limits
SeriesMetricShapeLabel pinsLevelReport unit
Power limit by grid operatorpowerplant_max_power_by_gridQuarter-hour lane—Plant%
Power limit by direct marketerpowerplant_max_power_by_externalQuarter-hour lane—Plant%
Settled curtailment
SeriesMetricShapeLabel pinsLevelReport unit
Curtailment energy, grid operator — Spitz (solar)powerplant_pyranometer_curtailment_grid_energy_totalCountersegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"PlantkWh
Curtailment power, grid operator — Spitz (solar)powerplant_pyranometer_curtailment_grid_powerQuarter-hour lanesegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"PlantW
Curtailment energy, grid operator — Spitz light (solar)powerplant_satellite_curtailment_grid_energy_totalCountersegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"PlantkWh
Curtailment power, grid operator — Spitz light (solar)powerplant_satellite_curtailment_grid_powerQuarter-hour lanesegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"PlantW
Curtailment energy, grid operator — Pauschal (solar)powerplant_fixed_curtailment_grid_energy_totalCountersegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"PlantkWh
Curtailment power, grid operator — Pauschal (solar)powerplant_fixed_curtailment_grid_powerQuarter-hour lanesegment_id!~".+", marketer_limit="considered", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"PlantW
Curtailment energy, direct marketer — Spitz (solar)powerplant_pyranometer_curtailment_marketer_energy_totalCountersegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"Per segmentkWh
Curtailment power, direct marketer — Spitz (solar)powerplant_pyranometer_curtailment_marketer_powerQuarter-hour lanesegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"Per segmentW
Curtailment energy, direct marketer — Spitz light (solar)powerplant_satellite_curtailment_marketer_energy_totalCountersegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"Per segmentkWh
Curtailment power, direct marketer — Spitz light (solar)powerplant_satellite_curtailment_marketer_powerQuarter-hour lanesegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"Per segmentW
Curtailment energy, direct marketer — Pauschal (solar)powerplant_fixed_curtailment_marketer_energy_totalCountersegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem", period="<YYYY-MM>"Per segmentkWh
Curtailment power, direct marketer — Pauschal (solar)powerplant_fixed_curtailment_marketer_powerQuarter-hour lanesegment_id!~".+", marketer_limit!~".+", negative_price_rule!~".+", turbine_id!~".+", method="bilarem"Per segmentW
Inverters
SeriesMetricShapeLabel pinsLevelReport unit
AC production per inverter (solar)powerplant_inverter_energy_ac_totalCounter—Per inverterkWh
AC power per inverter (solar)powerplant_inverter_power_acMinute gauge—Per inverterW
DC input per inverter (solar)powerplant_inverter_energy_dc_totalCounter—Per inverterkWh
DC power per inverter (solar)powerplant_inverter_power_dcMinute gauge—Per inverterW
Reactive power per inverter (solar)powerplant_inverter_power_reactiveMinute gauge—Per invertervar
Phase voltages per inverter (solar)powerplant_inverter_voltage_ac__phase__L1_L2Minute gauge—Per inverterV
Phase currents per inverter (solar)powerplant_inverter_current_ac__phase__L1Minute gauge—Per inverterA
Grid frequency per inverter (solar)powerplant_inverter_frequencyMinute gauge—Per inverterHz
Power factor per inverter (solar)powerplant_inverter_cosMinute gauge—Per invertercos φ
Temperature per inverter (solar)powerplant_inverter_temperatureMinute gauge—Per inverter°C
Insulation resistance per inverter (solar)powerplant_inverter_resistance_isoMinute gauge—Per inverterΩ
Operating state per inverter (solar)powerplant_inverter_operating_stateQuarter-hour lane—Per inverter—
Radiation-based power per inverter (pyranometer) (solar)powerplant_pyranometer_inverter_powerQuarter-hour lane—Per inverterW
Performance ratio per inverter (pyranometer) (solar)powerplant_pyranometer_inverter_prTrailing-day ratiovariant="clean"Per inverter%
Radiation-based power per inverter (weather model) (solar)powerplant_weather_inverter_powerQuarter-hour lane—Per inverterW
Performance ratio per inverter (weather model) (solar)powerplant_weather_inverter_prTrailing-day ratiovariant="clean"Per inverter%
Combiner boxes
SeriesMetricShapeLabel pinsLevelReport unit
DC energy per combiner box (solar)powerplant_gak_energy_totalCounter—Per combiner boxkWh
DC power per combiner box (solar)powerplant_gak_powerMinute gauge—Per combiner boxW
Temperature per combiner box (solar)powerplant_gak_temperatureMinute gauge—Per combiner box°C
Radiation-based power per combiner box (pyranometer) (solar)powerplant_pyranometer_gak_powerQuarter-hour lane—Per combiner boxW
Performance ratio per combiner box (pyranometer) (solar)powerplant_pyranometer_gak_prTrailing-day ratiovariant="clean"Per combiner box%
Radiation-based power per combiner box (weather model) (solar)powerplant_weather_gak_powerQuarter-hour lane—Per combiner boxW
Performance ratio per combiner box (weather model) (solar)powerplant_weather_gak_prTrailing-day ratiovariant="clean"Per combiner box%
Strings
SeriesMetricShapeLabel pinsLevelReport unit
DC energy per string (solar)powerplant_string_energy_totalCounter—Per stringkWh
DC power per string (solar)powerplant_string_powerMinute gauge—Per stringW
Voltage per string (solar)powerplant_string_voltageMinute gauge—Per stringV
Current per string (solar)powerplant_string_currentMinute gauge—Per stringA
Radiation-based power per string (pyranometer) (solar)powerplant_pyranometer_string_powerQuarter-hour lane—Per stringW
Performance ratio per string (pyranometer) (solar)powerplant_pyranometer_string_prTrailing-day ratiovariant="clean"Per string%
Radiation-based power per string (weather model) (solar)powerplant_weather_string_powerQuarter-hour lane—Per stringW
Performance ratio per string (weather model) (solar)powerplant_weather_string_prTrailing-day ratiovariant="clean"Per string%
Battery
SeriesMetricShapeLabel pinsLevelReport unit
Charged energybattery_box_energy_dc_in_totalCounter—PlantkWh
Discharged energybattery_box_energy_dc_out_totalCounter—PlantkWh
Battery DC powerbattery_box_power_dcMinute gauge—PlantW
Battery DC voltagebattery_box_voltage_dcMinute gauge—PlantV
Battery DC currentbattery_box_current_dcMinute gauge—PlantA
Battery AC frequencybattery_box_frequencyMinute gauge—PlantHz
State of chargebattery_box_socMinute gauge—Plant%
State of healthbattery_box_sohMinute gauge—Plant%
Stored energybattery_box_energy_chargedMinute gauge—PlantkWh
Battery temperaturebattery_box_temperatureMinute gauge—Plant°C
Setpoints receivedpowerplant_battery_setpoint_externalMinute gauge—Plant%
Weather
SeriesMetricShapeLabel pinsLevelReport unit
Air temperature (2 m)weather_temperatureQuarter-hour laneheight="2m"Plant°C
Dew point (2 m)weather_dew_pointQuarter-hour laneheight="2m"Plant°C
Apparent temperatureweather_apparent_temperatureQuarter-hour lane—Plant°C
Relative humidity (2 m)weather_humidityQuarter-hour laneheight="2m"Plant%
Cloud coverweather_cloudsQuarter-hour lane—Plant%
Wind speed (10 m)weather_wind_speedQuarter-hour laneheight="10m"Plantm/s
Wind gusts (10 m)weather_wind_gustsQuarter-hour laneheight="10m"Plantm/s
Wind direction (10 m)weather_wind_directionQuarter-hour laneheight="10m"Plant°
Precipitationweather_precipitationQuarter-hour lane—Plantmm
Rainweather_rainQuarter-hour lane—Plantmm
Snowfallweather_snowfallQuarter-hour lane—Plantcm
Snow depthweather_snow_depthQuarter-hour lane—Plantm
Visibilityweather_visibilityQuarter-hour lane—Plantm
Global horizontal irradiance (W/m²)weather_shortwave_radiationQuarter-hour lane—PlantW/m²
Diffuse horizontal irradiance (W/m²)weather_diffuse_radiationQuarter-hour lane—PlantW/m²
Direct normal irradiance (W/m²)weather_direct_normal_irradianceQuarter-hour lane—PlantW/m²
Extraterrestrial irradiance (W/m²)weather_terrestrial_radiationQuarter-hour lane—PlantW/m²
Market prices
SeriesMetricShapeLabel pinsLevelReport unit
Day-ahead spot price (DE-LU)market_spot_priceQuarter-hour lanezone="DE-LU", sequence="1", source="entsoe"PlantEUR/MWh
Mischpreis (official)market_price_mischpreisQuarter-hour lanesource="netztransparenz", unit="eur_mwh"PlantEUR/MWh
Infrastructure
SeriesMetricShapeLabel pinsLevelReport unit
Data completeness (solar)powerplant_inverter_data_completeMinute gauge—Plantratio 0..1
Agent tunnelagent_saas_vpn_connectedMinute gaugeservicetype="data-scraper"Plantratio 0..1
Logger health, worstscraper_health_stateQuarter-hour lane—Plant—

Related Documentation

  • Using Grafana as an External Read Platform — reaching the provisioned Grafana and the managed dashboard
  • Metric Collection — the complete metric catalogue with units and labels
  • MiroxQL Query Language — the same series, queried from the platform and turned into custom metrics for reports
  • Metrics Export API — cleaned, aggregated metrics as CSV or JSON
Prev
Using Grafana as an External Read Platform
Next
API Overview
© 2026 Mirox Verwaltungs GmbH. All rights reserved. | Privacy Policy