Helio: lost energy and money in a PV system
One inverter stood idle for 132 days and cost at least 2,246 PLN. Helio found it in inverter data; every report number shows its query.
- Type
- Our own project
- Who it is for
- PV farm owners and the companies that run them
- Built
- 2026
- Similar project
- Data analysis and report: 8,500 PLN net. Studio pricing and contact
- 5.05 MWh
- of real losses in 2015, a lower bound
- 2,272 PLN
- at least, at an assumed price of 450 PLN/MWh
- 98.8%
- of that loss is one outage: an inverter idle for 132 days
Data: the public NREL PVDAQ dataset, system 1204, CC BY 4.0. Method: each inverter against the median of its neighbours. Sources: “Details” at the foot of the page.
The outage is in the data, not in money
2015: inverter inv4 is down from 22 April to the end of its data on 1 September, 132 days. The other seven inverters run all year.
From inverter data to a report
Inverter data
A CSV export from a SCADA or the Zabbix API. Demo: 8 inverters, a reading every 5 minutes.
Loss detection
Each inverter against the median of its neighbours: outage, underperformance, no data.
Order ledger
Simulated orders on real production, with the days left to each deadline.
AI report
83 numbers, each with its own SQL query. The AI computes nothing.
Losses by cause
- Inverter outage4.99 MWh · 2,246 PLN
- Underperformance58.8 kWh · 26 PLN
- Curtailment (simulated)5.96 MWh · 2,684 PLN
Two duties, two deadlines
- Notice to the operator14 days from the order
- Compensation request180 days from month end
What the detector found on labelled faults
- Alerts that hit a real fault9 of 9
- Real faults the detector found6 of 31
- Those with 1 hour of sun6 of 8
Helio on your farm
Data export
A CSV from a SCADA or the inverter portal. From Zabbix, Helio pulls the history itself.
Losses from your data
The same rules as in the demo, in MWh and PLN.
A dashboard for you alone
A standing connection over Modbus or Zabbix is settled at rollout.
For engineers: the technology stack
| Layer | Choice | What it does |
|---|---|---|
| Engine | Python 3.13, DuckDB | Findings are computed deterministically from data in one database file, so the same data always gives the same result. |
| AI access | MCP server (the official Python SDK) | It accepts one SELECT query, has row and time limits, and logs every call. |
| Report | SQL queries with citations | A script checks that every number in the report stands in the result of the query it cites. |
| Dashboard | Next.js 16 (static export), TypeScript, Tailwind v4 | The dashboard reads ready-made JSON files, so it opens at once and needs no application server. |
Sources, assumptions and limits
Installation data
The demo runs on two public datasets. It counts losses on one installation from the public NREL PVDAQ dataset: system 1204, a 78.6 kWp rooftop, 9 inverters of which 8 have data, readings every 5 minutes over 2015. Deline, C., Perry, K., Deceglie, M., Muller, M., Sekulic, W., Jordan, D. (2021), Photovoltaic Data Acquisition (PVDAQ) Public Datasets, NREL / OEDI, doi:10.25984/1846021 (opens in a new tab), licence CC BY 4.0. The 5.05 MWh is a lower bound: the data of inverter inv4 ends on 1 September 2015, while the outage was still on.
The price of 450 PLN/MWh
It is an assumption, not a quote: it sits inside the range of the monthly volume-weighted day-ahead averages TGE published for 2025 (357 PLN/MWh in April, 557 PLN/MWh in November).
Simulated orders
The 78 orders are a simulation: 5.96 MWh and 2,684 PLN of curtailment on real production. No operator issued them, so they are not part of the real loss. The share of energy cut in June (14.2%) comes from Forum Energii data on PSE redispatch in June 2026 (via gramwzielone.pl) and applies to large-scale PV. Carrying it over to a rooftop is a modelling choice, and the other months are assumptions. On the demo screen every order carries the word “simulated” and a hatched pattern.
The AI report and its check
Each language version of the report has 83 numbers. Each one names the read-only SQL query that produced it. A check replays all 18 queries and compares the hashes of their results. The data does not say why an inverter stopped: Helio shows where and how much, and the cause has to be found on site. The demo shows the losses and the report. A live chat with the data goes through a read-only server with row and time limits that logs every query.
Deadlines: the law and its limits
14 days: the information for the operator on whether and what part of the curtailed energy to settle in the support scheme, from the date the order was issued (art. 93 para. 18 of the Renewable Energy Sources Act, ustawa o OZE). For installations in a support scheme: the act says “the given support scheme”, and whether that means the auction only is worth checking with a lawyer. Without it the curtailed energy does not count towards the obligation under that scheme. 180 days: the request for compensation, from the end of the month in which the order was carried out (art. 9c para. 7k of the Energy Law, Prawo energetyczne). The act also refers to the deadline and conditions in the operator's instruction: check its text with the operator before you file a request. According to gramwzielone.pl of 8 October 2026, PSE sets no cut-off date for requests in its procedure but recommends acting without delay. The author adds that this does not mean a claim has no time limit. We do not settle that difference. This is the wording of the law and a press report, not legal advice. Helio does not tell whether a farm is in a support scheme: check that yourself and, if in doubt, with a lawyer. Sources: Renewable Energy Sources Act, Dz.U. 2026 item 68 (in Polish) (opens in a new tab), Energy Law, Dz.U. 2026 item 43 (in Polish) (opens in a new tab), gramwzielone.pl, 8 October 2026 (in Polish) (opens in a new tab).
Accuracy: method and limits
Test set: the FHC twin plants, 4 strings, readings every 30 seconds over 25 days within 17 June to 15 July 2025. 9 of 9 detector windows overlap a labelled fault run (95% Wilson confidence interval: 70% to 100%). The detector found 6 of 31 labelled fault runs, including 6 of 8 where the sun was up for at least an hour. Most of the rest are sensor errors and disturbances shorter than an hour: the detector looks for lost energy, so by design it does not catch them. A window counts when it overlaps a labelled run in time; the labels name no string, so a window on another string counts too. These are small samples (the Zenodo record lists 30 segments). The FHC set is single 400 W modules, while the demo installation has 8 kW inverters, so neither result carries over to the other set. That is why we give no single accuracy figure. Data: Bradl, H., Hofer-Schmitz, K., Grippa, P., Hofer, G. (2026), Zenodo, doi:10.5281/zenodo.18979877 (opens in a new tab), licence CC BY 4.0.
A pilot from Zabbix
Helio pulls the history from Zabbix itself, through a read-only token. Zabbix keeps 31 days of history by default, so a year or a quarter needs an export.
