Turning a Dumb AC Unit Smart (Without Losing my Security Deposit)
Pangram verdict · v3.3
We believe this text is mainly human-written, with some AI content.
AI likelihood · overall
HumanArticle text · 1,667 words · 1 segments analyzed
TL;DR: DIY home automation is ezpz with nothing more than a stepper motor, an esp32, and a high tolerance for Jank.
My rental apartment’s AC unit can only be controlled using these retro-looking analog knob-based controls, mounted right onto the unit. No separate wall-mounted thermostat, no remote control… nothin’ fancy whatsoever. These knobs work… but having to constantly stand up and fiddle with them gets annoying pretty quick.
Fortunately, there’s an ‘ol Prilik family saying that goes something like this: “remember son - the hardest problems in life can usually be solved with nothing more than a stepper motor, an esp32, and a dream”1 And sure enough, after dropping ~$15 on parts, waiting for things to arrive from China, and spending a few hours iterating on the hardware assembly and firmware… I hacked together this beautiful mess:
What you’re looking at here is a jerry-rigged esp32-controlled stepper motor, coupled to one of my AC unit’s knobs using a shaft coupler, all affixed to the AC’s back-plane using a cheap L-bracket and a binder clip (with some industrial-grade cardboard padding for good measure). This whole MacGyver’d up contraption talks to my Home Assistant instance over MQTT, which turns the AC unit on/off based on the state of a temperature sensor located in the same room. Et voila 🪄 ✨ Just like that - I’ve managed to free myself from the shackles of having to get up off the couch just to tweak my AC!
For all you professional embedded and mechatronics folks out there: I strongly suggest you stop reading here. The rest of this blog post is a walkthrough of a software engineer’s approach to home automation and building custom hardware, and let me tell you: both the final product, and the journey to get there, are hella jank. That said… if you’re not afraid of a bit of jank: read onwards, and join me on this fun foray into how I managed to hack together some totally bespoke home-automation hardware with almost no budget, or experience!
🗽 Setting the stage⌗ In April 2025, I moved to New York City. After a brief apartment hunt, I managed to find a place I’m pretty happy with: the location is convenient, the building is fairly modern, and the rent is an absolute steal. There’s not much to complain about! …well, except for the AC situation. See, for whatever reason, developers in NYC really like using these loud, power-hungry, wall-mounted PTAC units in their apartment buildings. Some buildings might spend a bit extra in order to wire these units up to wall-mounted thermostats… but oftentimes, they’ll just go with the cheapest option: completely analog, unit-mounted knobs. Here’s a picture of what I’m talking about:
Yeah - guess which option my building went with 🙃 🤔 What are my options here?⌗ Like any good renter, the first thing I did was gently ask my landlord if there was any way to “upgrade” the controls to something a bit more… modern. As expected, the response was roughly along the lines of “lol no, why would we do that?”, which, to be fair, was basically the response I expected. Well, no matter, like any good engineer - surely I can hack my way out of this pickle? After a bit of finessing, I managed to pop the cover off the unit, and expose its soft underbelly inner workings. Much to my surprise, not only did I find some info about the unit, but even a whole wiring diagram!
Now, I’m no expert when it comes to wiring diagrams, but by following the wiring, it certainly seems like this entire circuit is operating at line voltage, with nary a low-voltage digital signal I can hook into in sight. ⏺ Smart Relays?⌗ Ok, maybe I can just splice in a smart relay somewhere? I’m no electrician, but it’s probably not that hard, right? Well, maybe? But honestly, I didn’t think this was gonna be a viable route for me. Setting aside the fact that working with line voltage and HVAC equipment is a bit “spooky” for someone with zero electrical wiring experience (and that my landlord probably wouldn’t be thrilled with me messing about with these sorts of things), the bigger issue was that all the juicy wires I’d be interested in intercepting are stuffed deep inside the AC unit. As far as I could tell, the only way to access those wires would be to yank the whole unit out of the wall… something that I wasn’t particularly interested in doing. This thread from ~2017 reinforced my impressions that this would be far more trouble than its worth. So… what now? 🔌 Smart Plugs?⌗ Ok, here’s an idea: what if I just cut power to the unit using a smart plug?
Note: The internet was quick to warn me that toggling power to a running AC unit could potentially cause damage to the unit, especially if something goes wrong and you start rapidly cycling it on/off. While I’m no expert in these sorts of things… for the sake of science (and because I’m a bit stubborn), I nonetheless kept looking into this option.
Alas, much to my chagrin - the unit plugs into the wall using one of those fancy NEMA 5-20P plugs, which is basically impossible to find a smart switch for!
Well shoot! If hooking into the wiring is a non-starter, and putting the unit behind a smart plug is non-trivial… am I just out of luck? Of course not! Clearly it was time to put my engineering hat on and jank together a solution: why not just make a little robot to turn the dials for me? 🎛 Dialing in the right approach⌗ Looking at the unit, we find 2 dials:
Mode Control: A stiff, discrete dial, clicking between 6 “modes” of operation (Off, Lo-Cool, Hi-Cool2, Vent, Exhaust, and Heat) Temp Control: A smooth, analog dial, connected to a simple bimetallic-strip based thermostat
And fortunately - both plastic knobs pop right off, exposing a shaft that shouldn’t be too hard to mechanically couple with:
This gave me two options to toggle the AC unit on and off: Option 1: hooking into the Mode Control dial
Leave the Temp Control dial set to “max cold” Buy a stepper motor with enough torque to overcome the stiff action of the dial
…which would probably need a 12V DC (if not more) power source, requiring extra circuitry to power …and require some more robust mounting hardware, to counteract the torque, and ensure the stepper motor stays in the right place
Precisely calibrate the stepper motor to rotate the dial the right number of degrees between the “Off” state and the “Cool” state
Option 2: hooking into the Temp Control dial
Leave the Mode Control dial on “Lo-Cool”3 Buy a cheap, low-torque, low-power stepper motor, just powerful enough to rotate the fairly loose dial
…that doesn’t need a lot of mounting hardware to stay in the right place, given that the torque is fairly low
Imprecisely yeet the stepper motor all the way left/right, toggling the target temp between “really really hot” or “really really cold”
Hopefully you can guess which one I went with 🥰
Option 2 certainly is the “jankier” of the two options, given that it relies on a second-order property (target temp) to power the unit on/off… but hey - whatever’s easier, right?
🔨 The road to V0⌗ I was fairly sure this was gonna work, but obviously, the only way to find out was to hack together a proof-of-concept (ideally - with the least number of new purchases as possible). To cut a long story short - here’s what I came up with for V0:
Part Cost Source
ESP32 Dev Board $6 Amazon
Shaft Coupler $6.69 Amazon
Stepper motor + controllers $2.66 ($8 / 3 pack) Amazon
L Brackets free leftover ikea parts (from a LAIVA bookshelf)
screws free leftover monitor parts
USB Cable + charger free found in the ‘ol junk drawer
Total: ~$16 And here’s the result: (breadboard with the rest of the hardware out-of-frame)
Since I couldn’t screw anything into the AC chassis (remember: security deposit!), I had to get creative. I ended up grabbing a couple of metal L-brackets left over from an IKEA LAIVA bookshelf, and some spare screws from a monitor VESA mount. By bolting these to the stepper motor, it made the motor assembly physically “wider”. When the motor rotates, the brackets bump against the back wall of the control cavity, which resists the torque and forces the rotational energy down into the shaft coupler and turns the dial. Truly unintentional ingenious design!
Sidenote: I’m leaving out a few intermediate steps that I took to get to this design:
I didn’t get the right shaft-coupler the first time (or the second time (or the third time…)), so it took a few Amazon returns until I found the right one. Before buying the ESP32 Dev Board, I validated the stepper motor + shaft coupler worked using a (really, really) old Arduino Leonardo I had lying around, and controlling it manually over serial (using a really long USB cable extending to my PC) My first attempt at mounting this thing involved wooden skewers, a glue stick, and a cut-up Amazon box… a failed experiment, to say the least.
Of course, what good is some hardware without some software? 💻 Writing the Firmware⌗ The firmware here is dead simple: it connects to Wi-Fi, hosts a local web server, and listens for HTTP/MQTT commands to spin the motor. While I do somewhat miss the Good Old Days where I’d spend a couple weekends hacking together this sort of one-off firmware… truth be told, I’m kinda glad that LLMs can one-shot code for these sorts of projects. I ended up using a combo of Claude and Gemini, and they did a Totally Fine™ job hacking together something that works.
It even generated a little Web UI I could use to configure my Wi-Fi credentials and adjust settings dynamically: