IoT Whole-House Humidifier Controller
For my ECE 1100 Individual Discovery Project, I designed and built an IoT control system for a whole-house humidifier. The core of the system is an ESP32-S3 running ESPHome, integrated with a Home Assistant instance hosted on a virtual machine in my Proxmox-based compute cluster. On top of that central controller, I built three remote sensing units using additional ESP32 boards and combo temperature–humidity sensors. Together, these nodes provide a gradient view of humidity across the house and feed data back to Home Assistant to control when and how the humidifier runs.
Typical whole-house humidifiers rely on a single local sensor or a simple on/off control, which can lead to uneven humidity levels in different rooms and wasted energy when outside conditions change. I wanted a smarter system that could:
- Measure humidity in multiple zones inside the house
- Factor in outdoor humidity from a local weather station
- Integrate cleanly with my existing Home Assistant setup
- Provide a flexible platform for automation and future features
The central controller is an ESP32-S3 module connected to the whole-house humidifier control circuit. It runs ESPHome firmware, which exposes all relevant sensors, switches, and status information directly to Home Assistant over Wi-Fi. Home Assistant itself runs in a virtual machine on my Proxmox compute cluster, which gives me a reliable and always-on platform for automations.
Around the house, I deployed three remote sensing units, each built around an ESP32 and a digital combo humidity/temperature sensor. These nodes periodically publish their readings over the network. Home Assistant combines:
- Humidity measurements from all three indoor nodes
- Outdoor humidity from a local weather station
- System state from the ESP32-S3 humidifier controller
Rather than relying on a single sensor threshold, the system uses a gradient-based approach. Home Assistant calculates an effective humidity value by combining readings from the three remote nodes, so it can tell whether the house is consistently dry or just one area is out of range. It also references the outdoor humidity to avoid over-humidifying when the outside air is already very moist.
Automations in Home Assistant then determine when to activate the humidifier. For example, the system can:
- Turn the humidifier on when the indoor gradient drops below a set point
- Adjust run time based on how far the humidity deviates from the target
- Limit operation if outdoor humidity is high to prevent condensation issues
The finished system successfully controls the whole-house humidifier using distributed humidity measurements and weather data. In testing, I saw a more consistent humidity level across different rooms compared to the original single-sensor setup. The integration with Home Assistant makes it easy to visualize sensor data, tweak thresholds, and add new automations without re-flashing firmware.
This project taught me how to combine embedded hardware, firmware, and home automation software into a complete system. I gained experience with ESP32 development, ESPHome configuration, networked sensors, and running Home Assistant on a Proxmox-based cluster. It also reinforced how important it is to think about system-level behavior, not just individual devices.