From d17b25cdccaeda26f5288e433f4d0f0c704dc216 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Fri, 5 Jun 2026 12:22:00 +0000 Subject: [PATCH] fan-control: document the HA Fan Lock (opt out of 60-min auto-revert) [ci skip] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A manual/cool/quiet override in HA auto-reverts to `auto` after 60 min. Add a Fan Lock (`input_boolean.r730_fan_lock`) that gates that automation so a deliberate override persists, with a visible "🔒 FAN CONTROL LOCKED" banner on the dashboard-it Server view so it isn't forgotten. The automation re-checks the lock after the hour (locking mid-countdown cancels the revert) and the 83 °C ceiling still wins. HA-side only (helper + automation + dashboard live on ha-sofia, auto-git-tracked there); these docs are the infra-repo record. Co-Authored-By: Claude Opus 4.8 --- docs/plans/2026-06-04-pve-fan-control-design.md | 6 +++++- docs/runbooks/fan-control.md | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/plans/2026-06-04-pve-fan-control-design.md b/docs/plans/2026-06-04-pve-fan-control-design.md index a4eb8728..87c652ed 100644 --- a/docs/plans/2026-06-04-pve-fan-control-design.md +++ b/docs/plans/2026-06-04-pve-fan-control-design.md @@ -133,7 +133,11 @@ Delivered ahead of the cron migration (which is Vault-gated) by teaching the `input_number.r730_fan_manual_pct`. `auto` = the garage-presence curve above; cool/quiet force that curve; manual holds a fixed %; `CEILING` still overrides. HA owns the setpoint + a 60-min auto-revert-to-auto automation -(`automation.r730_fan_mode_auto_revert`) — the daemon just polls and actuates. +(`automation.r730_fan_mode_auto_revert`), which an `input_boolean.r730_fan_lock` +toggle can disable so a deliberate override persists (a "🔒 LOCKED" banner shows +on the view while engaged; the ceiling still wins, and the automation re-checks +the lock after the delay so locking mid-countdown cancels the revert) — the +daemon just polls and actuates. Monitoring + control live on the dashboard-it "Server" view (REST sensors: fan RPM from the redfish exporter; mode/target-% from the Pushgateway). The same logic already exists in the Python controller (`r730-fan-control/`) for the diff --git a/docs/runbooks/fan-control.md b/docs/runbooks/fan-control.md index 4cd535a7..090e93c8 100644 --- a/docs/runbooks/fan-control.md +++ b/docs/runbooks/fan-control.md @@ -17,11 +17,19 @@ HA — **dashboard-it → "Server" view → Fans**: - `input_select.r730_fan_mode` — **auto** (garage-presence curve, default), **cool** / **quiet** (force that curve), **manual** (hold a fixed %). - `input_number.r730_fan_manual_pct` — the % used in `manual` mode (slider). +- `input_boolean.r730_fan_lock` — **lock** the current override so the 60-min + auto-revert leaves it alone (a 🔒 banner shows on the view while engaged). Any non-`auto` override **auto-reverts to `auto` after 60 min** (`automation.r730_fan_mode_auto_revert` on ha-sofia), so a forgotten override -can't run the fans wrong indefinitely. `CEILING` (83 °C) still overrides -everything → Dell auto. An HA change is applied within one daemon loop (~15 s). +can't run the fans wrong indefinitely — **unless you engage the Fan Lock** +(`input_boolean.r730_fan_lock`, toggle on the same view). While locked the +override persists indefinitely and a "🔒 FAN CONTROL LOCKED" banner appears on +the view so you remember to unlock; unlocking restarts the 60-min timer. The +automation re-checks the lock *after* the hour, so locking mid-countdown also +cancels the pending revert. `CEILING` (83 °C) still overrides everything → Dell +auto — **the lock does not defeat the ceiling**. An HA change is applied within +one daemon loop (~15 s). Monitoring sensors on the same view: `sensor.r730_fan_speed` (redfish exporter), `sensor.r730_fan_control_target` + `sensor.r730_fan_control_mode` +