Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions ca_profile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<CommunityApplications>
<Profile>Only Fan Controller — intelligent, quiet fan control for Dell PowerEdge (iDRAC) servers, with optional NVIDIA GPU awareness and Home Assistant (MQTT) integration. Reads CPU temps over IPMI and GPU temps via nvidia-smi and drives the fans through the iDRAC, with a fail-safe hand-back to the BMC. Support is via GitHub Issues on the project repository.</Profile>
<Icon>https://raw.githubusercontent.com/sethpjohnson/only-fan-controller/main/icon.png</Icon>
<WebPage>https://github.com/sethpjohnson/only-fan-controller</WebPage>
</CommunityApplications>
42 changes: 42 additions & 0 deletions templates/only-fan-controller.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<Container version="2">
<Name>only-fan-controller</Name>
<Repository>ghcr.io/sethpjohnson/only-fan-controller:latest</Repository>
<Registry>https://ghcr.io/</Registry>
<Network>bridge</Network>
<MyIP/>
<Shell>sh</Shell>
<Privileged>false</Privileged>
<Support>https://github.com/sethpjohnson/only-fan-controller/issues</Support>
<Project>https://github.com/sethpjohnson/only-fan-controller</Project>
<Overview>Intelligent, quiet fan control for Dell PowerEdge (iDRAC) servers, with optional NVIDIA GPU awareness and Home Assistant integration. Reads CPU temperatures over IPMI and GPU temperatures via nvidia-smi, then drives the fans through the iDRAC's manual fan commands - quiet at idle, ramping under load, without the iDRAC's aggressive default curve. Fail-safe by design: if a sensor read or the process itself fails, fan control is handed back to the BMC so the server is never left uncooled.</Overview>
<Description>Threshold-based fan controller for Dell PowerEdge servers (built and tested on an R730).&#xD;&#xA;&#xD;&#xA;**Features**&#xD;&#xA;- Threshold control with hysteresis (no fan oscillation)&#xD;&#xA;- CPU temps via IPMI (ipmitool); optional per-card GPU temps via nvidia-smi&#xD;&#xA;- Fail-safe: sensor/process failure hands cooling back to the BMC's automatic control&#xD;&#xA;- Real-time web dashboard + JSON API&#xD;&#xA;- Optional Home Assistant integration over MQTT (auto-discovery: per-GPU temperature/utilization/power, fan-speed control, availability)&#xD;&#xA;&#xD;&#xA;**Requirements**&#xD;&#xA;- A Dell server with iDRAC reachable on the network (IPMI over LAN enabled). Fill in the iDRAC Host / Username / Password fields.&#xD;&#xA;&#xD;&#xA;**NVIDIA GPU (optional)**&#xD;&#xA;- To monitor GPU temps: set "Enable GPU Monitoring" = true AND add `--runtime=nvidia` to Extra Parameters (requires the Unraid NVIDIA Driver plugin). Leave both off on CPU-only systems.&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;- While running, this puts the iDRAC in manual fan mode; see the project's README Safety section. Support via GitHub Issues.</Description>
<Category>Tools:Utilities</Category>
<WebUI>http://[IP]:[PORT:8086]/dashboard/</WebUI>
<TemplateURL>https://raw.githubusercontent.com/sethpjohnson/only-fan-controller/main/templates/only-fan-controller.xml</TemplateURL>
<Icon>https://raw.githubusercontent.com/sethpjohnson/only-fan-controller/main/icon.png</Icon>
<ExtraParams/>
<PostArgs/>
<CPUset/>
<DateInstalled/>
<DonateText/>
<DonateLink/>
<Requires/>
<Config Name="Web UI / API Port" Target="8086" Default="8086" Mode="tcp" Description="Dashboard and API port" Type="Port" Display="always" Required="true" Mask="false">8086</Config>
<Config Name="iDRAC Host" Target="IDRAC_HOST" Default="" Mode="" Description="iDRAC IP address (IPMI over LAN must be enabled)" Type="Variable" Display="always" Required="true" Mask="false"/>
<Config Name="iDRAC Username" Target="IDRAC_USERNAME" Default="root" Mode="" Description="iDRAC username" Type="Variable" Display="always" Required="true" Mask="false">root</Config>
<Config Name="iDRAC Password" Target="IDRAC_PASSWORD" Default="" Mode="" Description="iDRAC password" Type="Variable" Display="always" Required="true" Mask="true"/>
<Config Name="API Token" Target="API_TOKEN" Default="" Mode="" Description="Optional bearer token to change fans/hints via the HTTP API from other LAN hosts. Blank = local host only (does not affect Home Assistant/MQTT control)." Type="Variable" Display="always" Required="false" Mask="true"/>
<Config Name="Enable MQTT (Home Assistant)" Target="MQTT_ENABLED" Default="false" Mode="" Description="Enable the Home Assistant MQTT bridge (self-registers via MQTT Discovery)" Type="Variable" Display="always" Required="false" Mask="false">false</Config>
<Config Name="MQTT Broker" Target="MQTT_BROKER" Default="" Mode="" Description="MQTT broker. Just the IP works (e.g. 192.168.1.10); host:port or tcp://host:port also fine. Defaults to port 1883 (Mosquitto). This is the MQTT broker, NOT Home Assistant's web UI on 8123." Type="Variable" Display="always" Required="false" Mask="false"/>
<Config Name="MQTT Username" Target="MQTT_USERNAME" Default="" Mode="" Description="MQTT broker username (optional)" Type="Variable" Display="always" Required="false" Mask="false"/>
<Config Name="MQTT Password" Target="MQTT_PASSWORD" Default="" Mode="" Description="MQTT broker password (optional)" Type="Variable" Display="always" Required="false" Mask="true"/>
<Config Name="Enable GPU Monitoring" Target="GPU_ENABLED" Default="false" Mode="" Description="Monitor NVIDIA GPU temps. If you enable this, also add --runtime=nvidia to Extra Parameters (requires the Unraid NVIDIA Driver plugin). Leave off on CPU-only systems." Type="Variable" Display="always" Required="false" Mask="false">false</Config>
<Config Name="Idle Fan Speed %" Target="FAN_IDLE_SPEED" Default="20" Mode="" Description="Base fan speed when temps are below thresholds" Type="Variable" Display="always" Required="false" Mask="false">20</Config>
<Config Name="CPU Threshold C" Target="FAN_CPU_THRESHOLD" Default="65" Mode="" Description="Bump fans above this CPU temp. Keep below the 85C critical limit." Type="Variable" Display="always" Required="false" Mask="false">65</Config>
<Config Name="GPU Threshold C" Target="FAN_GPU_THRESHOLD" Default="60" Mode="" Description="Bump fans above this GPU temp. Keep below the 90C critical limit." Type="Variable" Display="always" Required="false" Mask="false">60</Config>
<Config Name="Fan Step Size %" Target="FAN_STEP_SIZE" Default="10" Mode="" Description="Fan increase per 5C over threshold" Type="Variable" Display="advanced" Required="false" Mask="false">10</Config>
<Config Name="Cooldown Delay s" Target="FAN_COOLDOWN_DELAY" Default="60" Mode="" Description="Seconds below threshold before ramping fans down" Type="Variable" Display="advanced" Required="false" Mask="false">60</Config>
<Config Name="Check Interval s" Target="CHECK_INTERVAL" Default="10" Mode="" Description="Seconds between temperature checks" Type="Variable" Display="advanced" Required="false" Mask="false">10</Config>
<Config Name="Data Directory" Target="/var/lib/only-fan-controller" Default="/mnt/user/appdata/only-fan-controller/data" Mode="rw" Description="History database storage" Type="Path" Display="advanced" Required="true" Mask="false">/mnt/user/appdata/only-fan-controller/data</Config>
</Container>
Loading