From bd6249af6bd98b2c25f7af669f690ebde5c7ddaa Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Thu, 2 Jul 2026 18:51:18 +0200 Subject: [PATCH] docs: record 10s idle-timeout (remote->suspend) findings for v1.16 Confirmed on hardware: 15s idle while remote-enabled with the heater on and powered auto-suspends (R? and S? both drop to 0). P? does not read literal 0 though - it lands on 4095, the raw register's max value past the calibrated curve's low end, not the digit 0. Any check expecting P?=="0" to confirm zero power would be wrong on this firmware; S? is the correct check. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01GpePKZiEZWbGo9HrfuML6U --- docs/hendi_lockout_findings.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/hendi_lockout_findings.md b/docs/hendi_lockout_findings.md index 9616eff..9285867 100644 --- a/docs/hendi_lockout_findings.md +++ b/docs/hendi_lockout_findings.md @@ -23,6 +23,33 @@ confirmed each version after flashing. | `--reset`, isolated process | Soft reset via DTR/RTS toggle, no power loss | **Fails** (one fluke recovery when combined with `--test-heater` in the *same* process/connection - not reproducible in isolation) | **Recovers** - reproducible across two independent trigger/reset/verify cycles | **Recovers** - reproducible across all trigger/reset/verify cycles run | Not retested (superseded by plain reconnect working) | | Physical power cycle (device knob) | Full power-off/on of the unit | **Recovers** | Not retested (superseded by `--reset` working) | Not retested (superseded by `--reset` working) | Not retested (superseded by plain reconnect working) | +## 10s idle-timeout (remote -> suspend) + +Tested on v1.16: with remote enabled (`R1`), the heater switched on (`S1`) +and a non-zero power applied (`P3151`, ~1000W), going idle for 15s with no +further commands sent causes the device to auto-suspend: + +| Register | Before idle (`R1`/`S1`/`P3151`) | After 15s idle | +|---|---|---| +| `R?` (remote enabled) | `1` | **`0`** - timer drops remote back to suspend | +| `S?` (switch) | `1` | **`0`** - heater switched off | +| `P?` (power digits) | `3151` (~1000W) | **`4095`** - see note below | + +`P?` does **not** read the literal digit `0` after the timeout. The +power/digit mapping is inverted (`components/actor/hendiCtrl.py`'s +`poly_w2d`/`poly_d2w`: higher digit = lower watts, calibrated down to +`pwr_digits_min` = 4092 for the lowest calibrated point, 500W). `4095` is +the raw 12-bit register's maximum value (2^12 - 1), one past the +lowest-calibrated end of that curve (`toWatts(4095)` extrapolates to +~518W) - i.e. the hardware's actual "off" register value, not the number +`0`. Any check that expects `P?` to equal `"0"` to confirm the heater has +zero power would be wrong on this firmware; the correct check is `S?` (or +`P?` >= `pwr_digits_min`). + +Device remained healthy afterward - no lockout was triggered, since remote +was already back to `0` (via the timer) before the test script's connection +closed. + ## Symptom while locked out - `I?` / `V?` (software identifier/version queries) still respond normally.