A BESS desk the shift
can dispatch against
This write-up describes the operations desk we ship for battery storage, PV inverters and the DC strings that have to sit on one picture. The live interface below is a deterministic simulator — not a named plant. Every number you see is a simulation parameter.
What this case actually covers
Named client write-ups wait for approval. This page is the reference implementation: the same six sections, written against a desk you can click through.
Context and constraints
A hybrid plant the control room cannot see as one picture: three LFP banks (3000 + 3000 + 5000 kWh = 11 MWh), 18 inverters, 90 DC strings and four EVSE chargers on the same AC bus. The constraint is not “more charts” — it is one operator layer for energy flow, SOC/SOH and string health, with a 750 kW export limit and a 500 kW import limit.
What was actually built
A monitoring desk with the surfaces an operator actually uses: energy-flow topology, per-bank SOC/SOH, a peak-shave schedule, string-level diagnostics, alarms with source attribution, a 24-hour power chart, weather, and hourly grid exchange. Four EVSE units, seven CCS2 connectors, sit on the same bus.
Architecture decisions
The public page is a deterministic simulator so it is crawlable and clickable without a plant feed. Production would add Modbus, SunSpec and IEC 61850 polling, an EMS dispatch loop and a historian — we are not inventing protocol versions here. “Solterra Hybrid Park” is a simulator label only.
Technology stack
React 19, TypeScript and the same design-system primitives as the rest of the site: Card, Table, Tabs, Dialog, Badge, Progress. Production builds add a Node.js integration layer. The demo does not call those services.
Verified outcome
There is no named-client outcome on this page. What you can verify is the interface: three banks totalling 11 MWh, bank power 1500 + 1500 + 2500 kW, 18 inverters, 90 DC strings, clock at ~120× (2 s tick = 4 simulated minutes). If a later client write-up reuses this desk, it will say so and only publish numbers they confirm.
What we would change
The demo still has no live Modbus or OCPP session, no real EMS and no historian. In a delivery we would surface those as first-class screens — a protocol adapter log and a replayable dispatch tape — instead of leaving them in the architecture section.
The desk, running
Simulator parameters: 11 MWh across three LFP banks, 18 inverters, 90 DC strings, four EVSE / seven CCS2 connectors, export 750 kW, import 500 kW, clock ~120×. No live plant, no Modbus, no OCPP, no historian.
Conditions driving irradiance, panel derating and charging demand
- Cloud cover
- 29 %
- Wind
- 15 km/h
- Humidity
- 69 %
- PV potential
- 1681 kW
- 14:0025°1.7M
- 15:0025°1.5M
- 16:0024°919
- 17:0023°668
- 18:0022°636
- 19:0022°539
- 20:0021°223
- 21:0019°0
Single-line diagram with live power on every branch. Animation direction follows the actual direction of energy.
3 MWh · 1.5 MW · LFP 1P416S
- Power
- 360 kW
- Available
- 2.02 MWh
- SOH
- 98.2 %
- Cycles
- 412
- Cell temp.
- 26.0 °C
- C-rate
- 0.12 C
3 MWh · 1.5 MW · LFP 1P416S
- Power
- 234 kW
- Available
- 1.63 MWh
- SOH
- 96.4 %
- Cycles
- 688
- Cell temp.
- 28.1 °C
- C-rate
- 0.08 C
5 MWh · 2.5 MW · LFP 2P416S
- Power
- 703 kW
- Available
- 3.67 MWh
- SOH
- 99.1 %
- Cycles
- 214
- Cell temp.
- 29.7 °C
- C-rate
- 0.14 C
Generation, load, battery power and grid exchange over the simulated day. The vertical marker shows the current moment.
- PV generation
- Site load
- EV charging
- Battery (+ discharge / − charge)
- Grid (+ import / − export)
- State of charge
500 kW import connection and 750 kW export limit, metered hour by hour at the interconnection point
- Import
- Export
- Imported today
- 1.90 MWh Peak 500 kW · of 500 kW
- Exported today
- 0.00 MWh Peak 24 kW · of 750 kW
- Net balance
- -1.89 MWh Busiest hour in 448 kWh · out 617 kWh
- Peak shaved by BESS
- 4 kWh Battery covers demand above the 500 kW import cap
18 string inverters rated 100–125 kW, grouped into three blocks. The bar under each card shows load against nameplate rating, the segments below show per-string health.
Reading this case
Send the brief. Estimate in 24 hours.
Describe the banks, the inverters and the telemetry you already have. We map an operator layer within one business day.