Stop cycle is disabled on a battery that is not cycling. Start cycle is disabled while any battery cycles and on a switched-off battery. Page only; the add-on still refuses each of these. DECISIONS notes the one-battery case. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC
38 lines
1.8 KiB
Markdown
38 lines
1.8 KiB
Markdown
# MAINT-11 - start or stop the maintenance cycle per battery
|
|
|
|
**Status: for review.** Tests: `test_maint11.py`. No option added.
|
|
|
|
**The fault.** At two or more batteries the page had one "start a battery cycle"
|
|
button, and `_maint_button()` chose the battery. An operator could not cycle a
|
|
chosen one (inverter B, new after storage, needed its first cycle).
|
|
|
|
## Rule
|
|
|
|
1. `maint_start` and `maint_abort` take an optional `unit`. With no unit they
|
|
run the old code unchanged. The Batteries screen sends the unit from a
|
|
per-battery Start cycle and Stop cycle button, at two or more batteries only.
|
|
2. **A start while any battery holds the maintenance slot is refused, not
|
|
queued.** The message names the battery that is cycling. One slot per site
|
|
stays the rule, and the scheduler is untouched.
|
|
3. Also refused, with a plain message: an unknown unit, a start on a battery
|
|
that is switched off (battery modes on), and a stop on a battery that is not
|
|
cycling. Nothing changes on a refusal.
|
|
4. A stop on the cycling battery is today's abort: the cycle ends, then every
|
|
inverter goes to 0 W.
|
|
|
|
## Why refuse and not queue
|
|
|
|
A queued start is a cycle that begins hours later, unseen, after the operator
|
|
has moved on. A refusal is immediate and says why. The scheduler already
|
|
queues by waiting time, so nothing is lost.
|
|
|
|
## What this does not cover
|
|
|
|
- Today's bare button never refused a battery that is refusing to give power
|
|
(SAFETY-73); its drain waits. The per-battery start does the same.
|
|
- A start on the battery that is already cycling is refused as "busy", where
|
|
the bare button restarts its drain. The bare button is unchanged.
|
|
- At one battery, a request that names the battery uses the new path, so a
|
|
second start is refused instead of restarting the drain. Nothing sends a name
|
|
at one battery, and the bare request is unchanged.
|