fan-control: simplify HA dashboard + Lock = freeze-current/algo-off [ci skip]
The dashboard-it Server → Fans view is now minimal: fan speed (% + RPM), an Override % slider, and a Lock toggle. Lock now means "freeze the current speed, algorithm off" — a new automation (r730_fan_lock_freeze_current_speed_resume_algo) snapshots the live target % into Override and sets mode=manual on lock-ON, and mode=auto on lock-OFF. The host daemon is unchanged (the toggle just drives the mode it already reads). cool/quiet stay reachable via the entity but are off the simplified view; the 60-min auto-revert is kept as a dormant safety net. Verified live: lock ON → mode=manual + Override captured the live 60%; lock OFF → auto. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
f9376a36ff
commit
c059405632
2 changed files with 30 additions and 23 deletions
|
|
@ -132,12 +132,15 @@ Delivered ahead of the cron migration (which is Vault-gated) by teaching the
|
|||
`input_select.r730_fan_mode` (auto/cool/quiet/manual) +
|
||||
`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`), 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.
|
||||
The **simplified dashboard (2026-06-05)** exposes just three things — fan speed
|
||||
(%/RPM), an **Override %** slider, and a **Lock** toggle. Lock = "freeze current
|
||||
speed / algo off": `automation.r730_fan_lock_freeze_current_speed_resume_algo`
|
||||
snapshots the live target % into Override and sets `mode=manual` on lock-ON, and
|
||||
`mode=auto` on lock-OFF — the daemon needs no change, the toggle just drives the
|
||||
mode. `cool`/`quiet` stay reachable via the entity but are off the dashboard. The
|
||||
60-min `automation.r730_fan_mode_auto_revert` is retained as a dormant safety net
|
||||
(manual now only happens while locked, which it skips). 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
|
||||
|
|
|
|||
|
|
@ -12,24 +12,28 @@ CPU cool when the garage is empty, quiet when someone's in the garage. Design:
|
|||
|
||||
## HA control (Home Assistant)
|
||||
|
||||
The daemon polls two ha-sofia helpers each loop, so you can drive the fans from
|
||||
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).
|
||||
Drive the fans from **dashboard-it → "Server" view → Fans**. The view is
|
||||
deliberately minimal — it shows the current **fan speed** (% of capacity +
|
||||
absolute RPM) and two controls:
|
||||
|
||||
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 — **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).
|
||||
- **Override %** (`input_number.r730_fan_manual_pct`) — the fixed fan % to hold.
|
||||
- **Lock — freeze speed** (`input_boolean.r730_fan_lock`) — turn the algorithm
|
||||
off and hold a fixed speed. Toggling it **ON** snapshots the *current*
|
||||
commanded % into Override and switches the daemon to `manual`
|
||||
(`automation.r730_fan_lock_freeze_current_speed_resume_algo`); toggling it
|
||||
**OFF** switches back to `auto`, resuming the presence curve. Fine-tune the
|
||||
held % with Override while locked. A 🔒 reminder appears on the view while
|
||||
locked.
|
||||
|
||||
Under the hood the daemon still reads `input_select.r730_fan_mode`
|
||||
(auto/cool/quiet/manual) + `input_number.r730_fan_manual_pct` each loop; the Lock
|
||||
toggle just drives `mode` between `manual` (locked) and `auto` (unlocked).
|
||||
`cool`/`quiet` remain valid modes if set directly (via the entity) but are no
|
||||
longer surfaced on the simplified dashboard. `CEILING` (83 °C) still overrides
|
||||
everything → Dell auto, **even when locked**. A stale non-`auto` mode left while
|
||||
*unlocked* still auto-reverts to `auto` after 60 min
|
||||
(`automation.r730_fan_mode_auto_revert`, now a dormant safety net). 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` +
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue