I told myself I wouldn’t be a homelabber. Servers are needy, miserable things. I’d rather not have one jacking up my energy bill and making my apartment sound like a Pratt & Whitney test facility.

I’m very happy with uBlock Origin, but I wanted an ad blocking solution that would work everywhere on my network, even outside a browser. Pi-Hole was the most straightforward solution to that problem. So, I bought a used Intel NUC off eBay. It was cheap, silent, it fits under my couch, and its quad-core Celeron could do the job without messing up my energy bill. Seems like a pragmatic choice, to me.

I loaded up the NUC with Ubuntu Server, and used Pi-Hole’s boilerplate Docker container and Systemd service to get it up and running.

But, I told myself I wouldn’t be a homelabber.

I needed a convenient way to keep my photography work synchronized between my desktop, laptop, and scanning station (the latter is necessary because my film scanner is huge and I don’t want it on my desk). I had used Syncthing for similar purposes in the past, so I put that on the NUC too.

But, I told myself I wouldn’t be a homelabber.

I wanted to make my air purifier turn on and off automatically based on local air quality data. Home Assistant was the most straightforward way to implement this, so I put that on the NUC too.

But, I told myself I wouldn’t be a homelabber.

I’m working on archiving my wife’s grandfather’s old computer stuff. He ran a TV repair business for over 50 years, and he has a massive library of vintage computers, software, and technical documentation that can’t be found anywhere online. I also have a hoard of (legitimately-acquired) e-books, software, music, and such. All of this data was scattered across various PCs, external hard drives, and flash drives. I was tired of picking up the wrong external hard drive and realizing it didn’t have the files I was looking for - I needed a better way to organize my data.

I could have gotten a NAS, but I didn’t like the opaque, proprietary software on offer from companies like Synology. So, I bought a USB DAS and a pair of 4 TB hard drives. I hooked that up to the NUC, and put the disks in a mirrored pair using ZFS. Then, I installed Samba and set up a file share where I could neatly organize all my data archives.

But, I told myself I wouldn’t be a homelabber.

Everything was going swimmingly, but I was a little concerned that the NUC might be cooking itself. It’s probably not getting a whole lot of airflow, considering how it’s stuck between the couch and a wall. So, I created SenseThing. SenseThing is a sensor logging and monitoring tool that runs a little web UI on the NUC. This allows me to check up on the NUC’s internal temperature sensors, as well as the per-core CPU clock frequencies. As it turns out, the CPU never breaks 56°C, and it usually hovers around 51°C. Not “cool” by any means, but it’s pretty good for a mini PC with limited airflow.

But, I told myself I wouldn’t be a homelabber.

Over the summer, my wife and I grew suspicious of our apartment’s thermostat. She likes to keep the apartment pretty chilly, but when we set the thermostat to 68 degrees (that’s 20°C if you’re French), it got absolutely frigid. We live in a 70 year-old building and our unit has 3 exterior walls, so we definitely weren’t just getting lucky with an energy-efficient apartment.

Our office is also right next to the bathroom, and I was worried that humidity from the shower could be hurting my old cameras. So, I decided to kill two birds with one stone. I bought a Zigbee temperature/humidity sensor, and a Zigbee dongle. I hooked up the Zigbee dongle to the NUC, pointed Home Assistant at it, and now we can monitor the apartment’s temperature and humidity!

It turned out that all our suspicions were valid. The cheap “landlord special” thermostat keeps the apartment about 2 degrees colder than it should, and the humidity spikes like crazy whenever someone takes a shower. I bought some silica beads and airtight bags to store the camera lenses, and we give the thermostat the stink-eye whenever we walk past it.

But, I told myself I wouldn’t be a homelabber.

The temperature questions had been answered, but our electrical bill was still higher than I thought it ought to be. The bill wasn’t exorbitant, but the quoted energy consumption numbers just seemed a bit higher than I’d expect.

I enjoy messing with computers and listening to music. Both interests can be very energy-intensive depending on how you go about them. Between my Ryzen 9 personal workstation and the behemoth secondhand Klipsch tower speakers in the living room, I haven’t exactly picked energy-sipping ways to sate my passions. My wife also got a pretty high-end MacBook from her employer, so that made a third suspect.

I bought five Wi-Fi “smart” plugs, and flashed them with Tasmota to free them from their proprietary chains. Three of them would be used to monitor my three prime suspects. I grabbed the other two opportunistically - they might be nice to have later. I connected all of them up to Home Assistant, and started gathering data.

The data was actually helpful! I realized that I hadn’t configured my desktop to auto-suspend (I have to do that manually because I set up my computers starting from a barebones Ubuntu Server installation, but that’s a story for another time). That saves us a couple kWh per month. Also, apparently the media center draws 30-ish Watts even when everything is supposedly shut off. So, if we’re leaving home for a few days, we use Home Assistant and the smart plug to cut power to the media center entirely. It’s nice to know we’ve made some meaningful improvements.

Side note: if you’re an apartment dweller like me, and you think your energy bill is weirdly high, make sure you don’t have any incandescent lightbulbs. When we moved into our apartment, every single bulb was tungsten. I immediately replaced all of them with LEDs, and recycled the incandescent bulbs so they wouldn’t be inflicted on anyone ever again. Landlords are cheap bastards.

But, I told myself I wouldn’t be a homelabber.

About 6 months after I set up Syncthing, I noticed that the scanning station was running out of disk space. As it turns out, uncompressed TIF files are really big. Who’da thunk it?

Syncthing does a great job of keeping files synchronized across all my devices. The downside of Syncthing is that it keeps a complete copy of every file on every device. That’s fine most of the time, but it’s not very friendly to computers with limited storage space - for example, the 10 year-old touchscreen ThinkPad that runs my scanning station.

Oh, also, since I set up Syncthing before I got the DAS, I actually had Syncthing reading and writing my photography stuff to the NUC’s boot disk, which is a dirt-cheap Micro Center house-brand SSD. That’s pretty sketchy.

So, I uninstalled Syncthing and I set up a second SMB file share for my photography. This time, the files would live on the DAS instead of the boot disk. Now the scanning station has plenty of disk space, and I’m no longer abusing a cheap SSD. Great!

But, I told myself I wouldn’t be a homelabber.

Then, I tried actually editing my photos off an SMB file share, and it was dreadful. With Syncthing, I could just fire up my desktop and start editing. Now that the photos lived on the file share, RawTherapee took a solid 30 seconds to load one film roll’s worth of photos.

My desktop is overkill for photo editing: when I tell RawTherapee to export a batch of 20-30 photos, it finishes exporting most of them before I can even see them show up in RawTherapee’s export queue menu. But, when I forced RawTherapee to write to SMB, it took several minutes to do the same task.

I knew SMB would slow down my photo editing, but this just seemed ridiculous. After a great deal of testing and fiddling, I discovered that TP-Link lied when they said my AX1500 router can push 1.2 gigabit over 5GHz Wi-Fi. It doesn’t support 160MHz channels, only 80MHz, so it actually only supports 600 megabit. I also discovered that Wi-Fi speeds in the office jump up by about 70% when I open the closet door. So that’s fun.

But, even with the closet door open, this wasn’t going to work. So, I re-installed Syncthing on the NUC, pointed it at the photography folder inside the SMB share, and synced that up with my desktop. Problem solved! The scanning station doesn’t run out of disk space since it’s writing to SMB. RawTherapee doesn’t get bottlenecked by the network since it reads and writes to a local copy of the files, which Syncthing keeps synchronized with the file share on the NUC.

But, I told myself I wouldn’t be a homelabber.

Remember how I was archiving all that old software and documentation from the TV repair shop? Eventually, I want to publish these archives so everyone can benefit from this treasure trove of data.

After the Internet Archive debacle of 2024, I think it’s clear that “just upload it to IA” isn’t the right answer for safely archiving historical data in the long term. IA is great, and I will put my archives there, but the ecosystem needs redundancy. So, I installed IPFS on the NUC, uploaded the archives, and pinned them in a folder on the DAS. Eventually, when I release the archives to the public, you’ll be able to download them through an IPFS web gateway.

But, I told myself I wouldn’t be a homelabber.

It was starting to get annoying remembering the port numbers for the web UIs provided by Pi-Hole, Syncthing, SenseThing, Home Assistant, and IPFS. So, I set up Nginx on the NUC, and now it directs various subdomains to the different web UIs. Since the NUC was already running a DNS server (Pi-Hole), it was easy to set this up. The NUC’s name is “robin,” by the way:

  • pihole.robin.lan takes you to Pi-Hole’s management portal.
  • sync.robin.lan takes you to Syncthing.
  • ha.robin.lan takes you to Home Assistant.
  • sense.robin.lan takes you to SenseThing.
  • ipfs.robin.lan takes you to IPFS’s web UI.

But, I told myself I wouldn’t be a homelabber.

Then came the holiday season, and my wife and I put our Christmas tree up. I love the simplicity of those outlet timer thingies, with their little rotating dials and plastic tabs. But, it also robs us of remote control. That was annoying last year since it meant I had to shimmy behind an end table to flip a switch on the timer.

So, I grabbed one of those unused Wi-Fi plugs and a couple Zigbee pushbuttons, and I hooked it all up to Home Assistant. The pushbuttons, placed at opposite ends of the apartment, toggle the Christmas tree lights on and off. Home Assistant also automatically toggles the lights on at sunset, and off at sunrise. My wife and I can also control the lights using the Home Assistant app.

Okay, so there’s a little computer living behind my couch, and it’s now…

  • An ad-blocking DNS server.
  • A storage array accessible through two different network file sharing protocols.
  • A smart home orchestrator.
  • An MQTT broker (for the smart plugs).
  • A peer-to-peer file sharing node.
  • A Christmas light controller with no fewer than three control interfaces.
  • Observable and manageable through a set of web UIs.

… Shoot. I think I might be a homelabber.