(yet another0 Dockerized Fan Controller for Truenas

Hey everyone,

I built a Docker-based fan control service called Brisa for my own TrueNAS SCALE homelab and figured I’d share it in case it helps anyone else.

The short version: it’s a single Docker container with a web UI that controls fans based on temperature curves. It reads temps from /sys/class/hwmon (CPU, NVMe, drives, etc.), lets you define temperature→speed curves, and applies them on a loop. Everything is configured through the browser — no scripts to edit, no IPMI commands to remember.

Search for brunoorsolon/brisa in GitHub

What it supports:

  • USB fan controllers via liquidctl (tested with Aquacomputer Quadro)

  • Motherboard PWM fan headers via sysfs (tested with Nuvoton NCT6687 — should work with nct6775, it87, and other Super I/O chips too)

  • Any temperature sensor the kernel exposes via hwmon — CPU, NVMe, drivetemp, etc.

  • Virtual sensors — group multiple drives and use their max/avg/min as a single input for a fan curve

  • Fan curves with per-fan sensor assignment

  • Manual override per fan for testing

  • Dashboard with groups, aliases, accent colors

  • Prometheus metrics endpoint

  • SQLite history with configurable retention

It runs as a single privileged container, no host installs needed. On graceful shutdown, motherboard PWM fans are restored to their original BIOS/firmware control mode automatically.

Quick start:

clone the project from git, then
docker build -t brisa:latest brisa/
docker compose up -d

Web UI at http://:9595.

One thing worth noting: many NAS-oriented boards (like my Topton N22) don’t have a Super I/O chip with a Linux kernel driver, so motherboard PWM fans won’t show up there. On those boards, a USB controller like the Quadro is the way to go. If your board has a chip like nct6775 or it87 (common on ASUS, Gigabyte, ASRock consumer boards), the PWM fans should be detected automatically.


How I got here

I started this project because I had an Aquacomputer Quadro and couldn’t install liquidctl on TrueNAS directly. Docker was the natural solution. I honestly didn’t look around much for existing projects before building it — I just started solving my own problem. Only after it was done and I started looking at the forums did I realize how many people have been tackling this same issue from different angles.

Since it’s built and published now, I figured I might as well share it. If nothing else, maybe someone finds the approach useful or wants to contribute.


Other similar projects

I’m not the first to solve this and won’t be the last. A few others I’ve come across (apparently I can’t post direct links, sorry):

  • anto294’s guide on using a Docker container with lm-sensors and fancontrol to control fans based on HDD temps — great walkthrough with a working setup, worth reading if you want to understand the low-level approach (How I used a docker container to adjust the fans from the hdd temp - how-i-used-a-docker-container-to-adjust-the-fans-from-the-hdd-temp/11146)

  • Rocketplanner83’s TrueFan — a Flask-based Docker app for browser-based fan control with cooling profiles ([Closed] Feature Request: Native Fan Control in TrueNAS SCALE - closed-feature-request-native-fan-control-in-truenas-scale/47130)

  • mikdima’s recent QNAP fan control utility published on Docker Hub ( [Fan control in TrueNAS]( (Fan control in TrueNAS - fan-control-in-truenas/64244)

  • Stux’s Hybrid CPU & HD Fan Zone Controller — the classic Supermicro IPMI script, now ported to SCALE, with 269 replies and a huge community around it (archived forum - script-hybrid-cpu-hd-fan-zone-controller.46159)

Each takes a different approach depending on the hardware. If you’re on Supermicro with IPMI, the scripts in those threads are battle-tested. If you’re on consumer hardware or using a USB controller, Brisa might be a better fit.


The bigger picture

It’s kind of telling that this problem keeps getting solved over and over — custom scripts, Docker containers, kernel module hacks, IPMI raw commands, USB controllers. Every TrueNAS update risks breaking something, and every new user has to piece together a solution from forum threads.

I saw the feature request for native fan control in SCALE was closed. I get that iX has priorities, but fan control on a NAS is not exactly a niche concern — drives have temperature limits, and not everyone’s BIOS curves are adequate. Having some form of native support, even just a maintained fancontrol integration that survives updates, would save a lot of people a lot of hours. Until then, we’ll keep Dockerizing our way around it.


If you try Brisa and run into issues, feel free to open a GitHub issue. I’m especially interested in hearing from people with different Super I/O chips (it87, nct6775, w83627ehf) since I’ve only been able to test hwmon PWM on nct6687 so far.

1 Like