Files
goodwe-addon/goodwe_controller/DECISIONS/MAINT-11-cycle-per-battery.md
T
glenn schrooyenandClaude 21d8a944bc
checks / unit (pull_request) Successful in 38m46s
infra-pin / fresh (pull_request) Successful in 1s
MAINT-11: start or stop the maintenance cycle per battery
maint_start and maint_abort take an optional unit. With two or more batteries
each Batteries card has Start cycle and Stop cycle buttons. One slot per site
stays: a start while a battery cycles is refused and names it (no queue). A
battery that is switched off, an unknown unit, and a stop on a battery that is
not cycling are refused with a plain message. A request with no unit is the
old call. The scheduler and the phase machine are unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC
2026-10-13 21:37:36 +02:00

1.6 KiB

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.