
Rack Air Quality Approach
Conventional cooling logic is simple: hotter rack, faster fans. In a dusty workshop that logic is backwards. A rack fan doesn’t just move heat, it moves everything in the air through the rack. Dust, PM, VOC and everything else. More airflow means more of that settling on heatsinks, filters and boards. So when the air gets dirty, I do the opposite of the textbook: throttle to a flatter fan curve and accept a hotter interior as the tradeoff.
How it works
The metrics - PM, VOC, NOx - each get their own threshold and will be aggregated into a single custom “air quality” metric. As soon as a threshold is exceeded, the fans inside the rack - controlled by my WiFi Fan Controller are commanded to switch to a second, less steep fan curve by using the Dual Curve module in ESPHome. In addition the the air quality measurement & fan controller, a RGB LED bar will show an air quality indicator in an easily recognizeable way.
Hardware
The hardware for this project has been sponsored by Seeed Studio for the purpose of developing reference air quality projects for their XIAO and Grove ecosystems. Seeed has no say in what I build or write here. The approach, criticism and any conclusions are my own.
- Air Quality Sensor
- XIAO ESP32-C6 -> New, up-to-date, better ESPHome support than the newer C5
- XIAO Expansion Board Base -> Base-Board with built-in display
- Grove SEN55 -> NOx, VOC, PM1.0/2.5/4/10
- Grove SHT41 -> Temp & Humidity Reference
- LED Bar
- XIAO ESP32-C3
- XIAO LED Driver Board -> Provide 5V/3A for LED strips
- Grove RGB LED Stick (10 WS2813)
Existing hardware inside the Rack:
- WiFi Fan Controller with Case
- 2x Arctic P12 Max fans
Communication
Communication runs through my existing Home Assistant install. The sensor node reports all raw values to Home Assistant without further processing. Home Assistant then runs a template sensor that calculates the air quality score. The LED bar module reads that value via the Home Assistant API, compares it against thresholds and changes its style accordingly. In parallel, a Home Assistant automation switches the fan controller into the second curve.
One of the hurdles I’m already expecting is self-heating from the ESP32 and the SEN55. Sensirion claims in their datasheet that the module compensates its own self-heating, so I included an extra SHT41 to independently measure temperature and humidity as a reference.
Baseline & open questions
For reference, my clean basement workshop reads a PM2.5 of around 12 µg/m³, VOC index 60, NOx 2. That’s the “clean” anchor to tune against.
The main points to clarify after building the first prototypes are the score weighting of PM/VOC/NOx and the border for the heat-vs-dust tradeoff. As a starting point I’ll switch to the flatter curve at PM2.5 > 35 µg/m³, then tune from there. (WHO’s 24h guideline is 15 µg/m³; 35 is the common “unhealthy” step.) VOC and NOx get their own thresholds and feed the same aggregate score.
The open counter-question: when does heat outweigh dust? At idle the flat curve holds the rack under 50°C, but idle isn’t the risk. Whether it holds under sustained load is exactly what the prototype has to measure. Until then, the heat-vs-dust border is unverified.