Explore the demo · Run & import data · Understand the model
Pyra is a solar-plant operations and maintenance console. It brings expected-versus-actual production, modeled energy losses, equipment faults, and maintenance priorities into one desktop workspace.
Built for the Energy × AI Hackathon (EnerParc) with Next.js, Python, scikit-learn, pvlib, and an optional Claude-powered copilot.
| View | Question it helps answer |
|---|---|
| Plant Map & Inverter Inspector | Which equipment is underperforming, and when did it change? |
| Loss Ledger | How much energy and tariff-valued revenue does the model estimate was lost? |
| Fault Timeline & DC Diagnostics | Which errors, disconnections, or string-level patterns coincide with the loss? |
| Fault Economics & Fleet Risk | Which issues deserve closer investigation? |
| What-if Simulator | How much modeled loss might an intervention recover? |
| Soiling | What does the available soiling dataset suggest? |
| O&M Copilot & Executive Report | How can the evidence be explained and communicated? |
Interactive charts and linked windows let you move from the plant overview to an individual inverter's history.
flowchart LR
RAW["PV monitoring data"] --> ING["Normalize inputs<br/>detect available signals"]
ING --> MODEL["Expected-power model<br/>per inverter"]
MODEL --> GAP["Compare with actual output"]
GAP --> LOSS["Exclude curtailment<br/>estimate energy & tariff loss"]
LOSS --> DESK["Pyra desktop"]
ING --> FAULT["Faults · DC diagnostics<br/>risk · what-if"]
FAULT --> DESK
DESK --> COP["Optional copilot<br/>grounded in artifacts"]
classDef solar fill:#f8e6b2,color:#493817,stroke:#be9842;
class MODEL,GAP,LOSS solar;
The Python pipeline produces compact JSON artifacts. The website reads those results; it does not retrain a model every time you open a chart. Methods and interpretation →
Use Node.js 20.9+ and npm. Python and the restricted source dataset are not needed to view the bundled demo.
git clone https://github.com/DocMorphic/pyra.git
cd pyra
npm ci
npm run devOpen localhost:3000. Anonymized derived artifacts are committed under public/artifacts/. The original monitoring files are restricted and are not included.
To enable the optional copilot, copy .env.example to .env.local and add your own ANTHROPIC_API_KEY. All other demo views can read the bundled artifacts without that key.
flowchart LR
U["Upload CSV / Parquet / XLSX"] --> M["Review detected column mapping"]
M --> P["Run Python pipeline<br/>stream progress"]
P --> C{"Required signals present?"}
C -->|"Yes"| A["Show supported analysis"]
C -->|"Missing or insufficient"| N["Explain what is unavailable"]
Run the app on a persistent Node host with Python installed. Data → Add dataset supports column mapping and per-session analysis. Features depend on the signals and history you provide: missing DC telemetry cannot produce string diagnostics, and a short record cannot establish a long-term degradation trend.
| Environment | Bundled dashboard | Copilot | Upload + Python analysis |
|---|---|---|---|
| Local Node + Python | Yes | With API key | Yes, for supported input mappings. |
| Vercel | Yes | With API key | Not supported by this deployment path. |
Python setup, pipeline order, and data locations →
Expected production is a model baseline, not a direct measurement of what the plant would have produced without faults. Loss valuation depends on telemetry quality, curtailment exclusions, interval duration, tariff data, and model fit. What-if recovery and fleet risk are investigation aids, not guaranteed revenue or calibrated failure probabilities.
The first operating year supplies the usual training baseline, with a fallback for sparse inputs. Some evaluation overlaps the baseline period. Exact method and limitations →
| Path | Contains |
|---|---|
pipeline/ |
Ingestion, expected power, losses, faults, DC diagnostics, risk, and scenarios. |
components/apps/ |
The analysis windows and copilot. |
lib/artifacts.ts |
Shared result types. |
lib/pipeline.ts |
Local Python process orchestration. |
app/api/ |
Dataset detection, analysis streaming, artifact serving, and copilot routes. |
public/artifacts/ |
Bundled anonymized demonstration results. |
npm run lint
npm run build
npm startRaw datasets and uploaded sessions remain separate from the public demo. Their data-use restrictions still apply. No repository-wide software license is currently declared; dataset rights are separate from source-code availability.
Good maintenance starts with an explanation you can inspect.