SMA-10 round 2: a failed release sends 0 W once, retries at heartbeat pace
When release() fails (False, raises or hangs past RELEASE_BUDGET_S) the unit gets one bounded write(0) through the new Driver.release_fallback() hook (default write(0)), then nothing more, so the inverter's own fallback timer is not reset. The release is retried once per heartbeat, not on every idle write. One error line and one action-log event per failure streak, one line on recovery. Dutch default "terug naar de eigen sturing". DECISIONS says what a unit is left at. test_messages.py: the RELEASE_BUDGET_S data entry is gone again (the line that needed it is gone). Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude
parent
a1be9c48b3
commit
d26cc573fe
@@ -284,6 +284,12 @@ class Inverter:
|
||||
# SMA-10. Writes to a hand-back driver that are on their way (see
|
||||
# Controller._write_unit), so the release can wait for them and be LAST.
|
||||
self.inflight: set = set()
|
||||
# SMA-10 round 2. A failed hand-back: how many tries in a row failed
|
||||
# (the log is written at the first and on recovery only), when the next
|
||||
# try is due (monotonic s), and whether the one fallback 0 W was sent.
|
||||
self.release_fails = 0
|
||||
self.release_retry_at = 0.0
|
||||
self.release_zero_sent = False
|
||||
self.last_write_ok = None
|
||||
# ⚠️ TWO TIMESTAMPS, NOT ONE FLAG. `last_write_ok` is the last write's
|
||||
# verdict and it flips on a single transient 400; liveness needs a RUN
|
||||
|
||||
Reference in New Issue
Block a user