waku-ctl: Building an Open Source Water Cooling Controller
If you have ever built a custom water cooling loop for your PC, you know the frustration with fan curve management.
Motherboard BIOS fan curves are fundamentally unsuited for water cooling because they only monitor instantaneous CPU or GPU die temperatures. When a Ryzen or modern Intel CPU spikes to 80Β°C for 2 seconds opening a browser tab, your radiator fans spin up like a jet engine, even though your 1.5 liters of coolant did not heat up by even 0.05Β°C.
Radiator fan speeds should depend on water temperature (specifically the delta between coolant and ambient intake air), not raw die spikes.
Commercial controllers like Corsair Commander or Aqua Computer Aquaero exist, but they lock you into proprietary Windows-only software suites (like iCUE) that consume hundreds of megabytes of RAM and run telemetry in the background.
I wanted something lean, reliable, open source, and cross-platform. That is why I built waku-ctl.
The Architecture
waku-ctl consists of two pieces:
- The Hardware & Firmware: A compact PCB powered by an ESP32 microcontroller with 4-pin PWM fan headers, tachometer readings, thermistor inputs, and an RGB controller (with pass-through).
- The Control Daemon: A lightweight C++ daemon as well as web interface for ease of use. You can configure it either via WiFi or USB-CDC. OTA updates obviously supported.
Failsafe in Firmware
One non-negotiable rule: if the host operating system crashes, freezes, or reboots, the fans must never stop spinning.
Since the onboard microcontroller runs an independently, you can tell it to shut down your computer if any of the fans stop or the temperature is over a specific limit. There is also a loud buzzer you can trigger to alert you.
The result is a silent, predictable system that keeps thermals rock solid without a single megabyte of bloated vendor software running in the background.
And yes, there are curves and PID modes. If you fancy getting a controller, mail me and I'll send one to you.