Smart Climate Control
A 3D-printed plenum fixes the AC's physics, and an ESP32 makes the cooling decisions.
Overview
One room here takes heavy solar gain, and the single-hose portable AC in it, a Daewoo COL16000, actively made things worse. Single-hose units have a design flaw baked in: they cool their condenser with room air and dump that air outside, which puts the room under negative pressure, so warm air from the rest of the house gets pulled straight back in through every gap. I was paying to cool air and then throwing it out of the building. This project fixes both halves of that: the airflow physics with a 3D-printed part, and the dumb on-off control with a sensor network and a local control loop that makes its own decisions.
Fixing the physics first
No control logic can rescue an AC that exhausts the air it just conditioned, so the first job was mechanical. I designed a dual-hose intake plenum in OpenSCAD, shaped to fit the Daewoo unit, and printed it on a Bambu Lab A1. The plenum feeds outside air to the condenser intake instead of letting the unit breathe conditioned room air, which converts a single-hose machine into a dual-hose one and removes the negative-pressure problem at the source. Because OpenSCAD designs are code, the plenum is parametric: when a dimension needs to change, I change a value and re-render rather than redrawing anything.
A control loop that survives reboots
The brain is an ESP32 running ESPHome, and I made a deliberate architecture call early: the control logic runs on the microcontroller itself, not as Home Assistant automations on the server. If the server reboots or the network drops, the room keeps regulating itself. Home Assistant is the dashboard and history layer, one screen with everything on it, reachable from anywhere over Tailscale.
Room temperature comes from three to four sensors averaged across the space, BME280s plus an IKEA TIMMERFLOTTE unit on Matter over Thread, because one sensor near a window or the AC outlet tells you the temperature of that corner, not the room. The fans are P14s driven by PWM through a MOSFET driver, so airflow scales smoothly instead of a relay clicking on and off.
Choosing between three ways to cool
The system picks between running the compressor, moving air with the fans, and night-purge: pulling in cool outside air when outdoor conditions beat running the AC at all. Night-purge is the mode I care about most, because the cheapest cooling available is air that is already cold, and the only reason people skip it is that nobody wants to manage windows and fans overnight. The control loop does it for you.
To make those choices well, I am extending the sensor node into a full multi-mode suite: an SCD41 for true CO2 plus temperature and humidity, a BME680 for VOC air quality and pressure, an SHT40 as a high-accuracy temperature reference, an LD2410 24GHz mmWave radar for presence, a BH1750 for ambient light, and an outdoor temperature probe. Each sensor maps to a decision. Presence means the room only gets cooled when someone is actually in it. CO2 and VOC mean fresh outside air sometimes wins even when it is not the coldest option. Light sensing catches solar gain as it arrives instead of waiting for the room to heat up. The outdoor probe is what makes the night-purge call honest. Everything stays local: no cloud service, no account, and nothing stops working when the internet does.
The hardest problem
Turning a cheap single-hose AC into a genuinely multi-mode system, starting with the unglamorous half. The dual-hose plenum had to physically fit the Daewoo unit and actually stop it exhausting conditioned air, and it is a part shaped around one specific machine, so there was no reference design to lean on. Doing it in OpenSCAD helped: the geometry is parametric code, so a fit problem becomes a value to change rather than a drawing to redo. The software half was fusing very different sensor types, temperature, air quality, presence and light, into control logic that decides between the AC, the fans and night-purge on its own. And all of it runs on the ESP32 rather than the server, because local-first is only real if the room keeps regulating itself through a server reboot.
Start a project
Want something built like this?
Everything on this page was designed, built and hosted by one person. Tell me what you need and I reply with scope, cost and timeline, usually within two working days.