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.