Skip to content

Modules Overview

The WiFi Fan Controller supports optional YAML modules that add advanced functionality beyond basic fan speed control. Modules handle temperature-based automation, closed-loop RPM regulation, and RGB status indicators — all configurable from Home Assistant without reflashing.

If you haven’t set up your board yet, start with the getting started guide first, then come back here to add modules.

Modules use ESPHome’s packages: feature to import additional YAML configuration on top of your base firmware. Each module is a single YAML file hosted in the repository that you reference by URL:

packages:
# Your hardware package (already in your config)
wifi-fancontroller:
url: https://github.com/zeroflow/wifi-fancontroller
ref: main
files: [hardware-rev-3.1.yaml]
# Add a module
temperature_control:
url: https://github.com/zeroflow/wifi-fancontroller
ref: main
files:
- path: modules/temperature_pid.yaml
vars:
friendly_name: "My Fan Controller"

Modules define their configuration through vars: — substitution variables that let you customize behavior without editing the module YAML directly. Each module page documents all available variables with their defaults.

ModuleComplexityBest Use CaseHA Entities CreatedRevisions
Temperature PIDAdvancedPrecise temperature target with automatic adjustment20 (climate, numbers, sensors, switches, fan, button)All
Temperature LinearSimpleStraightforward temperature-to-speed mapping10 (numbers, sensor, switches)All
Temperature CurveMediumCustom multi-point fan profiles16 (numbers, sensor, switches, binary sensor)All
RPM PI ControlAdvancedExact RPM targeting per fan31 (numbers, sensors, switches, button)All
RPM Status LEDsSimpleVisual RPM feedback via board LEDs0 (writes to existing LED entities)Rev 3.1+
Stall GuardSimpleFan stall detection and automatic recovery9 (binary sensors, text sensors, button)All
USR ButtonsSimplePhysical button control of individual fan speeds5 (button, 4 switches)Rev 3.1+

Temperature modules are mutually exclusive

Section titled “Temperature modules are mutually exclusive”

Most modules can be combined freely. The two exceptions are: temperature modules are mutually exclusive (see above), and Stall Guard conflicts with RPM PI Control (both write to PWM outputs). The full compatibility matrix:

Temp PIDTemp LinearTemp CurveRPM PI ControlRPM Status LEDsStall GuardUSR Buttons
Temperature PIDNoNoYesYesYesYes
Temperature LinearNoNoYesYesYesYes
Temperature CurveNoNoYesYesYesYes
RPM PI ControlYesYesYesYesNoYes
RPM Status LEDsYesYesYesYesYesYes
Stall GuardYesYesYesNoYesYes
USR ButtonsYesYesYesYesYesYes
  • Temperature PID — Advanced PID thermostat that automatically adjusts fan speed to maintain a target temperature. Includes live tuning via Home Assistant, autotune, and deadband control.

  • Temperature Linear — Simple three-zone mapping from temperature to fan speed. No complex tuning required — set your thresholds and you’re done.

  • Temperature Curve — Define a custom 5-point temperature-to-speed curve for precise control over how fans respond at different temperatures. Includes preset profiles for common scenarios.

  • RPM PI Control — Closed-loop RPM regulation that maintains exact fan speeds regardless of load changes. Useful when you need consistent, precise airflow.

  • RPM Status LEDs — Colors the per-fan RGB LEDs based on RPM (red at 0, green at full speed). Requires Rev 3.1+ hardware with per-fan RGB LEDs.

  • Stall Guard — Detects fan stalls (0 RPM when commanded on) and automatically raises fan speed to attempt recovery. Works cooperatively with temperature modules via a safety floor mechanism. Flags persistent warnings in Home Assistant so you know to investigate.
  • USR Buttons — Direct fan speed control via the three on-board USR buttons with per-fan RGB LED feedback. Manual overrides persist until cleared through Home Assistant. Requires Rev 3.1+ hardware.