<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ESP32 WiFi Lüftersteuerung | Blog</title><description/><link>https://fancontroller.arthofer.dev/</link><language>de</language><item><title>How I Built a Smart Server Rack Cooling System with ESP32 and Home Assistant</title><link>https://fancontroller.arthofer.dev/de/blog/server-rack-cooling-esp32-home-assistant/</link><guid isPermaLink="true">https://fancontroller.arthofer.dev/de/blog/server-rack-cooling-esp32-home-assistant/</guid><description>My network rack fans were too loud, so I designed a custom ESP32 fan controller. From hand-soldered prototype to CE-certified product - here&apos;s the full story.

</description><pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My 12U network rack houses a Synology NAS and a few SFF servers running ML workloads. Ventilation was absolutely necessary - but the existing options weren’t cutting it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Running fans at a constant low speed&lt;/strong&gt; led to high temperatures, especially in summer. &lt;strong&gt;Running them at 100%&lt;/strong&gt; kept the rack (and especially the NAS disks) cool, but was annoyingly loud. The prebuilt option from my rack manufacturer - a Digitus DN-19 FAN-2-HO - was expensive, ugly, and analog-only. No smart control, no automation.&lt;/p&gt;
&lt;p&gt;I needed something better.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-solution-esp32--pwm-fans&quot;&gt;The Solution: ESP32 + PWM Fans&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The idea was simple: put 12V PWM fans (Arctic P12 Max) into the fan cutouts at the top of the rack and control them with an ESP32. With PWM control, the fans can spin down to a &lt;strong&gt;full stop when idle&lt;/strong&gt; and ramp up only when actually needed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fancontroller.arthofer.dev/images/blog/rack-nas-fancontroller.png&quot; alt=&quot;ESP32 WiFi Fan Controller installed next to a Synology DS920+ NAS in a 12U network rack&quot;&gt;&lt;/p&gt;
&lt;p&gt;This integrates directly into &lt;strong&gt;Home Assistant&lt;/strong&gt; via ESPHome - temperature tracking through the onboard HDC1080 sensor, fan speed control, and warning notifications when things get too hot. The setup is &lt;strong&gt;silent at idle&lt;/strong&gt; and only gets louder when there’s actual thermal load.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;from-prototype-to-product&quot;&gt;From Prototype to Product&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;After a hand-soldered prototype that was mostly hot glue and shame, I went down the custom PCB rabbit hole. Five revisions later - reversed status LED, missing level shifters, low fuse ratings - I arrived at &lt;strong&gt;Rev 3.3&lt;/strong&gt;, and it finally does everything right.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fancontroller.arthofer.dev/images/blog/fancontroller-dev-setup.jpg&quot; alt=&quot;ESP32 WiFi Fan Controller Rev 3.3 PCB with Arctic P12 fan on desk during development&quot;&gt;&lt;/p&gt;
&lt;p&gt;The stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ESP32-S2&lt;/strong&gt; as the brain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESPHome&lt;/strong&gt; firmware on the device&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Home Assistant&lt;/strong&gt; on the backend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;12V barrel jack&lt;/strong&gt; input powering 2x 120mm exhaust fans&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RGB LEDs&lt;/strong&gt; next to each fan header - color wheel from red (stopped) to green (full RPM)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0.25W idle draw&lt;/strong&gt; - power consumption is dominated by the fans themselves&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;the-results-rock-solid-temperature-control&quot;&gt;The Results: Rock-Solid Temperature Control&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;With PID temperature control enabled, the rack temperature stays at &lt;strong&gt;25 +/- 0.5 degrees C&lt;/strong&gt; - regardless of whether everything is idle or AI training is running at full tilt.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fancontroller.arthofer.dev/images/blog/ha-temperature-graph.png&quot; alt=&quot;Home Assistant history graph showing stable rack temperature at 25 degrees C with fan RPM over 2 days&quot;&gt;&lt;/p&gt;
&lt;p&gt;The graph shows rack temperature (blue) vs. cellar ambient temperature (yellow) and fan RPM over approximately 2 days. The PID controller keeps things remarkably stable - fans only spin up when there’s actual heat to deal with.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;home-assistant-dashboard&quot;&gt;Home Assistant Dashboard&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Everything is controllable from the HA dashboard - individual fan speeds, RPM readings, PID parameters, and deadband settings. The onboard sensor reports temperature and humidity in real time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fancontroller.arthofer.dev/images/blog/ha-dashboard-entities.png&quot; alt=&quot;Home Assistant dashboard showing fan controller entities - fan speeds, RPM, PID settings, temperature and humidity&quot;&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;I’m still tuning the fan curves. Currently they only react to rack temperature alone. Ideas for improvement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cellar ambient temperature&lt;/strong&gt; as a secondary input - if the room is already warm, the fans should compensate earlier&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UPS power draw&lt;/strong&gt; as a proxy for compute load - if the servers are working hard, start cooling before the temperature even rises&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seasonal profiles&lt;/strong&gt; - different target temperatures for summer vs. winter&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try It Yourself&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The hardware and all ESPHome configurations are fully documented:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://fancontroller.arthofer.dev/getting-started/&quot;&gt;Product Page &amp;#x26; Documentation&lt;/a&gt;&lt;/strong&gt; - setup guides, module reference, hardware specs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/zeroflow/wifi-fancontroller&quot;&gt;GitHub Repository&lt;/a&gt;&lt;/strong&gt; - full schematics and ESPHome YAML packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.elecrow.com/wifi-fancontroller1.html&quot;&gt;Buy on Elecrow&lt;/a&gt;&lt;/strong&gt; ($35.99) or &lt;strong&gt;&lt;a href=&quot;https://www.tindie.com/products/zeroflow/esp32-wifi-fancontroller/&quot;&gt;Tindie&lt;/a&gt;&lt;/strong&gt; ($54.99)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you’re cooling a server rack, a 3D printer enclosure, or a grow tent - if you need smart PWM fan control with Home Assistant, this board has you covered.&lt;/p&gt;</content:encoded><category>Use Case</category><category>Home Assistant</category><category>Server Rack</category><category>ESP32</category><category>PID Control</category></item></channel></rss>