The sub-£100 office PC that now runs my house
For less than a hundred quid I've ended up with a box that runs our heating, pulls in the solar and battery data, drives a dashboard on the kitchen TV and blocks adverts for every device in the house. It took a few weeks of spare evenings, and I broke it at least twice along the way. These are my notes.
Why not a Raspberry Pi
I started where most people start, looking at a Raspberry Pi to run Home Assistant. By the time I'd priced up a Pi 5, a case, a decent power supply and an SSD, I was close to the cost of a refurbished mini PC with a proper Intel CPU, 8GB of RAM and a 256GB SSD already in it.
So I bought a Dell OptiPlex 7040 Micro from a refurb seller on eBay. It's roughly the size of a hardback book, it was built for office desks about ten years ago, and it came with a year's warranty. Ex-corporate kit like this is everywhere because businesses replace it on a schedule, not because there's anything wrong with it.
The plan grew while I waited for it to arrive. Using an always-on machine just for Home Assistant felt like a waste, so I decided to run Proxmox on it instead and treat Home Assistant as one guest among several.
Getting it ready
First job was opening it up. A small cable to the optional display board had worked loose in the post, so I pushed it back in. The SSD turned out to be a 2.5" SATA drive, which left the M.2 slot underneath free for later.
In the BIOS I turned on virtualisation, turned off Trusted Execution, disabled Deep Sleep and set it to power back on after a power cut. That last one is easy to forget. If the electric trips while you're out, you want the box to come back up without you.
Then the installer. I checked the ISO's checksum, flashed it to a USB stick, and promptly failed to get into the boot menu. Holding F12 did nothing; it went straight to the old Windows login every time. Windows fast startup means "Shut down" isn't a full power-off, so the fix was to hit Restart and tap F12 repeatedly as the screen went black.
The bit where I forgot the cable
The install itself went fine. Then I couldn't reach the web interface from my Mac, and I spent longer than I'd like to admit wondering whether the two routers in our house were to blame.
The OptiPlex wasn't plugged into anything. It came with a USB Wi-Fi dongle and I'd assumed that would do the job. It won't. Proxmox wants a wired connection, and when the installer can't find a network it quietly fills in a placeholder address and carries on as if nothing's wrong. I plugged in an Ethernet cable and reinstalled. There was nothing on it yet, so nothing was lost.
The ISO I'd downloaded was from May, and a bug that let a virtual machine break out to the host had been disclosed that same week. So before putting anything on it, I switched to the free no-subscription update repository and patched it to the fixed kernel. If you take one thing from this post, make it this: update straight after you install, because the ISO is always behind.
Home Assistant
Home Assistant OS runs as a virtual machine. I used a script from the community-scripts project, which downloads the image and builds the VM for you. After that I set it to start on boot, took a backup, reserved its address in the router so it can't wander, and turned on two-factor authentication for both Proxmox and Home Assistant.
The integrations went in over the next few sessions: Hive for the heating and hot water, Blink for the cameras, Sunsynk for the solar and battery, and later Octopus Energy through HACS. Seeing the battery, the panels and the grid side by side was the point where it started to feel worth the effort.
I also managed two self-inflicted problems. First, I overwrote my own Home Assistant password in my password manager and had to reset it from the VM's console in Proxmox. Second, after rebooting to test the address reservation, Home Assistant refused every connection from every device. I was halfway into troubleshooting it when it came back on its own. It had just been starting up. A bit of patience would have saved me the panic.
The kitchen screen
The whole thing started because I wanted a screen in the kitchen showing the family calendar, what the solar's doing and a few photos. I didn't want to spend tablet money, so it's a Samsung TV with a Fire Stick running Fully Kiosk Browser.
My first version had the TV logged in as me, with full admin rights. Anyone walking past could have changed the whole setup from the kitchen. It now has its own user with no admin access.
The dashboard is a custom card I wrote myself rather than a stack of community cards. That's mostly the designer in me; I wanted it to look a particular way. One tip if you try the same: Home Assistant and the browser cache custom card files hard. Bump the version number on the resource every time you save, or you'll spend an evening wondering why your change isn't showing.
Pi-hole
The newest addition is Pi-hole, running in a small Linux container next to Home Assistant on half a gig of RAM. The router now points every device in the house at it for DNS, so adverts and trackers get blocked on phones, laptops and the TV without installing anything on them.
It isn't perfect yet. A few lookups still slip past it. I also had the whole house leaning on that one little box at first, so if the OptiPlex was off or restarting, websites stopped loading for everyone. I've since added a public ad-blocking DNS service in the router as a backup. Devices sometimes use it even when Pi-hole is fine, but it blocks most of the same things, and nobody's evening gets ruined because I'm rebooting a server.
What's left
Still on the list: Tailscale so I can reach it all from outside the house, more RAM and a bigger NVMe drive so I can run Immich for our photos, and a copy of the backups that lives somewhere other than the same SSD. Memory and storage prices are daft at the moment, so Immich is parked and iCloud carries on doing the job for now.
If you're thinking of doing the same
- Look at ex-office mini PCs before you buy a Pi, unless you actually need the GPIO pins.
- Use a cable. Not optional.
- Update Proxmox as soon as it's installed.
- Never put the Proxmox web interface on the open internet. Use a VPN like Tailscale.
- A backup on the same drive isn't a backup.
- Write things down as you go.
That last one matters more than it sounds. I did most of this in short sessions with an AI assistant as a second pair of eyes, mainly for reading error messages and checking I wasn't about to do something daft. At the end of each session I had it write a handover note, so the next evening started where the last one stopped. Those notes are the only reason this post exists.