fan-control: presence-aware IPMI fan curve for the R730 PVE host

The iDRAC stock curve runs the CPU at ~72°C on the 7080 RPM floor even
under load (optimises for quiet, not cool). Add a bash daemon + systemd
unit that drives the chassis fans from CPU temp on two curves, picked by
garage occupancy (the server is in the garage): COOL when empty
(measured ~58-65°C under load), QUIET near the silent floor when the
ha-sofia garage door shows someone is there (open, or <15min since last
activity).

Manual fan mode is backstopped: bash EXIT trap + systemd ExecStopPost
hand fans back to Dell auto on stop/crash; CPU>=83°C or repeated IPMI
failures do the same. Pushgateway metrics (job=fan_control). 36 unit
tests cover the pure curve/hysteresis/presence/parse logic; DRY_RUN +
RUN_ONCE for integration checks. Deployed and verified on 192.168.1.127
(CPU 70->58°C in cool mode, hysteresis stepping confirmed).

Design:  docs/plans/2026-06-04-pve-fan-control-design.md
Runbook: docs/runbooks/fan-control.md

[ci skip]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-06-04 21:38:34 +00:00
parent c6f27fa172
commit 90ad6b9125
60 changed files with 640 additions and 9563 deletions

View file

@ -1,35 +0,0 @@
@import "tailwindcss";
@theme {
--color-f1-red: #e10600;
--color-f1-red-dark: #b50500;
--color-f1-bg: #111111;
--color-f1-surface: #1a1a1a;
--color-f1-surface-hover: #242424;
--color-f1-border: #2a2a2a;
--color-f1-text: #e0e0e0;
--color-f1-text-muted: #888888;
}
body {
background-color: var(--color-f1-bg);
color: var(--color-f1-text);
font-family: system-ui, -apple-system, sans-serif;
}
/* Scrollbar styling */
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: var(--color-f1-bg);
}
::-webkit-scrollbar-thumb {
background: var(--color-f1-border);
border-radius: 3px;
}
/* HLS video player */
video::-webkit-media-controls {
display: none !important;
}