Availability: BESS
Battery availability answers: when we asked the battery to move power, did it?
This is a dispatch question, not an uptime question. A battery sitting idle because nothing was asked of it is neither available nor unavailable β those periods leave the calculation entirely.
enSights reports two battery availability figures. They answer different questions, they will disagree, and neither can be derived from the other.
Metric | Question | Level |
|---|---|---|
Rack Availability | Did each rack carry its share of the command? | Per rack, per timestamp |
Discharge Availability | Did the battery as a whole do what it was told? | Per site, per timestamp |
A battery meeting a command below nameplate with three dead racks reads 100% on Discharge Availability and roughly 89% on Rack Availability. Both are correct.
Rack Availability
Evaluated one rack at one timestamp, every 5 minutes β 288 slices per rack per day. Everything above it (container, PCS, site, day, month) is an aggregation of these results.
Step 1 β Was anything commanded?
Site setpoint | Result |
|---|---|
No setpoint resolved | Not counted |
Exactly zero | Not counted (site idle) |
Non-zero | Continue |
Nothing commanded means nothing to measure. The slice leaves both sides of the fraction β it never counts as a failure.
Step 2 β Split the command down
The site command is divided equally across every leaf in the battery:
rack setpoint = site setpoint Γ· (PCS count Γ BMS per PCS Γ racks per BMS)Sign convention: positive = discharge, negative = charge.
Step 3 β Can we trust the telemetry?
The slice is not counted when the owning PCS is disconnected, the rack reports itself disconnected, or voltage, current or state of charge is missing. Unknown is neither healthy nor faulted.
Step 4 β Did it perform?
actual kW = voltage Γ current Γ· 1000
| actual kW |
ratio = βββββββββββββββββββ
| rack setpoint |
The rack is available when ratio β₯ 0.50 and the power flows in the commanded direction.
The 50% tolerance is deliberately loose. Rack power is measured DC while the command is an AC target, and the equal split in step 2 is an approximation, so the ratio carries conversion losses and dispatch skew. This check is designed to catch gross failures β dead racks, wiring inversions β not marginal underperformance.
Step 5 β Is there an excuse?
State of charge is the only accepted excuse.
Condition | Result |
|---|---|
Commanded to discharge and SOC β€ 3% | Available β the battery is empty |
Commanded to charge and SOC β₯ 97% | Available β the battery is full |
Anything else | Unavailable |
Communication faults, thermal derates, inverter maintenance and grid curtailment all count as unavailable, undifferentiated.
Rolling up to a period
Ξ£ (available Γ weight)
Availability = βββββββββββββββββββββββββ Γ 100
Ξ£ (valid Γ weight)
weight = 1 Γ· (PCS count Γ BMS per PCS Γ racks per BMS)
Weighting makes every PCS contribute equally, regardless of how many racks it holds. The weight is recalculated from each record's own topology rather than stored, so historical numbers stay correct after a site is reconfigured.
A period with no valid slices returns "β", never 0%. A battery that was never asked to do anything has no availability figure. Reporting it as 0% would turn "we didn't ask" into "it failed", which is the exact misreading this metric exists to avoid.
Discharge Availability
The same question asked once per timestamp, at site level, comparing AC against AC:
| battery power |
ratio = βββββββββββββββββββββ
| battery setpoint |
Available when ratio β₯ 0.95 and the direction matches.
The tolerance is tight here β 95% against the rack metric's 50% β because there is no equal-split approximation and no DC-to-AC conversion in the ratio. On real data this lands within a percent of 1.0.
Steps 1, 3 and 5 work exactly as they do for a rack: idle slices are excluded, unreadable slices are excluded, and state of charge is the only excuse. There is no step 2 β nothing is allocated down, the command is compared whole.
Reading the two together
Rack | Discharge | Reading |
|---|---|---|
High | High | Healthy battery, fully dispatching |
Low | High | Racks are down but the battery still met its command β spare headroom is absorbing the loss. Fix before the commands get bigger. |
High | Low | Racks are individually fine but the site is not delivering β look at the PCS, the grid connection or the command path. |
Low | Low | Real capability loss. |
Words to know
- PCS β Power Conversion System. The inverter between the DC battery and the AC grid.
- BMS β Battery Management System. Sits between the PCS and the racks.
- Rack β The smallest unit with its own voltage, current and SOC telemetry.
- Setpoint β The power the battery was commanded to deliver. Positive discharges, negative charges.
- SOC β State of Charge. How full the battery is, as a percentage.
- Valid slice β A timestamp where a command existed and the telemetry was readable. Only valid slices count.