My Quest For Home Automation, Part 6

This weekend, I finally migrated my home automation setup off the 4 it’s been running on for the last four years and into an LXC container managed by on my .

I’ve been meaning to do this for a while, and things finally fell into place yesterday when I had a bit of time to spare.

Previous Installments

In case you haven’t been following along for the past seven years, here’s a brief summary of the major milestones so far:

Why

It’s mostly about consolidation and cleanup, since I now have one less power plug and Ethernet port in use on my server closet.

Being able to backup everything consistently and migrate the setup to any machine I want (as long as it has an USB port for my coordinator) is just icing on the cake.

Although hasn’t really improved substantially over the past few years (in fact, the Home app has only gotten worse, and most of my unscheduled interactions are via Siri), homebridge and zigbee2mqtt satisfy my relatively simple needs for home automation rather well.

I’ve written about that at length over the years, so the list above should give you a good idea of the finer points of my setup.

But, in short, everything operates 99% on the LAN (with no devices calling home to anyone or relying on outside services to work) while allowing me to do the occasional remote action securely without any new software on our phones, and I quite like it that way.

I also wanted to do a general cleanup of the whole thing from scratch, including renaming all my accessories using a slightly different convention (including renaming them directly in zigbee2mqtt to make sure names are consistent throughout the stack) and removing redundant accessories, since (for instance) I no longer have the need to have as many temperature sensors around the house now that all my have been -enabled by the addition of modules.

Finally, I was having some trouble keeping things up to date, mostly due to JavaScript packaging vagaries. Every update I wanted to make eventually led to me having to either upgrade NodeJS or fiddle with the latest fashion in package management, so it was time to go back to a Docker-based setup for consistency with the rest of what I’m running–although I am not doing automated updates for this stack.

Why both homebridge and zigbee2mqtt don’t have sensible alternatives written in something like Go I have no idea. Even Java would have been better.

How

The actual process was pretty straightforward:

  • Backed up all my configuration and data.
  • Created an LXC container on with the original hostname and made sure my router updated its local DNS (after some finagling with DHCP), so that the Tasmota devices could connect immediately.
  • Configured to pass through the USB device for my controller.
  • Wrote up a docker-compose.yaml file to set up homebridge, zigbee2mqtt, mosquitto and node-red.
  • Restored the config for each in turn, doing minor tweaks as needed.
  • Renamed all my devices (this makes it easier to manage things on the Home app when HomeKit throws a fit).
  • Set up piku to manage some MQTT microservices like the plex-listener that powers my and my homelab homepage (which is now a variant of this little dashboard/homepage I hacked a while back).
  • Set up backups (both of the complete LXC filesystem and git versioning of the configurations)
  • Started cleaning up old flows, removing redundant accessories, etc.

The current filesystem layout is pretty straightforward:

.
|-- README.md
|-- docker-compose.yaml
|-- homebridge
|   |-- accessories
|   |-- auth.json
|   |-- backups (excluded from git)
|   |-- config.json
|   |-- lgtvKeyFile
|   |-- node_modules (excluded from git)
|   |-- package.json
|   |-- persist (contains bridge data and identifiers)
|   |-- startup.sh
|   `-- webostv
|-- mosquitto
|   |-- data
|   `-- log
|-- nodered
|   |-- flows.json
|   |-- flows_cred.json
|   |-- flows_home.json
|   |-- homekit-persist (contains data for Node-RED Homekit shims)
|   |-- itunes.db
|   |-- lib (excluded from git)
|   |-- metrics.db (14GB, _definitely_ excluded from git...)
|   |-- metrics.db-shm
|   |-- metrics.db-wal
|   |-- metrics.sql
|   |-- node_modules (excluded from git)
|   |-- nrchkb
|   |-- package-lock.json
|   |-- package.json
|   |-- projects 
|   |-- security.db
|   `-- settings.js
`-- zigbee2mqtt
    |-- configuration.yaml
    |-- coordinator_backup.json
    |-- database.db
    `-- state.json

Next Steps

Right now I’m still removing redundant devices, as well as planning replacing some Tasmota plugs with equivalents to improve the mesh coverage.

Another thing I will be doing is replacing some flows that do metric logging and MQTT transformations with Python microservices.

I no longer have a need to tweak them, so their behavior can be frozen and any changes better versioned in git ( does support git, but it’s just messy to do some things that way).

The Kingroon KP3S Pro (V1), Two Years Later

It’s been since I got myself one of the first iterations of the , so I thought I’d post a sort of cursory long-term review of what it’s been like to use it.

For something that I bought on a whim and without any actual reviews, it’s been excellent bang for the buck.

Hardware

  • It is the quietest 3D printer I own – I’ve mostly retired due to that alone, and I can keep it going during my constant video calls.
  • The all-metal construction has proven to be sturdy and stable, with very little vibration even at relatively high speeds (for 2023… current printers are faster), so the outputs are of pretty good quality–for instance, I recently used it to print (including the key caps) and it works great at 0.12mm layer height.
  • Despite being a bed slinger, the motion system is good enough that I’ve been considering replacing the nozzle with a 0.2mm one to print smaller parts, although I will have to spend a bit more time tuning filaments since so far most of what I print are functional parts.
  • Replacing parts (like a broken belt) has been pretty straightforward so far.

The only real issue I have with it is that it still tends to layer shift on occasion–I suspect that is due to my not tuning for all the filaments I use and the toolhead hitting support structures (I am using stepper feedback for software end stops).

Modifications

There were a few hardware modifications that helped a bit:

  • I created my own version of the classic “filler” spool holder, which I’ve been using for a while now. It works well enough that I haven’t felt the need to improve upon the design, and it has the added benefit of allowing me to mount the Filler itself in several ways.
  • Taking advantage of the fact that the nozzle can move slightly outside the print bed, I added a nozzle wiper based on a metal “toothbrush”.
  • I got a couple of Garolite/FR4 printer beds that work very well with PETG, to the point where I still haven’t used the PEI bed I bought at the same time. Even though it is an open frame printer, the relatively small bed can run hot enough to maintain adhesion.

Other than that the only real modification was installing a BLTouch and sacrificing the internal LCD to , which has been working perfectly with . At the time I was a bit annoyed that Kingroon had created the V2 and shipped it with so soon, but given that they haven’t upgraded their official firmware since September 2023, I’m OK with having taken things into my own hands…

Future Tweaks

Since I can keep it running while working and I have full control of the firmware, right now I am considering building a simple multi-material setup like the 3MS.

This because I now feel the need to print two-color key caps, project enclosures and small mechanical/functional parts with TPU and PETG using material interlocking, and I can’t really babysit manual filament changes.

This is also why the is ironically, the printer I’m most likely to replace with a good, quiet, multi-material alternative, although with the current geopolitical situation I’m holding back a bit on new purchases.

Conclusion

All in all, and considering it’s been two years of frequent use, I think the was a good purchase–especially if I consider bang for the buck, although to be fair it also helped me compound my experience with (it became the printer I tested out all my configurations on before applying them to the others).

The HomePod Mini

Since Alexa has changed the way it handles voice recordings and I don’t feel comfortable with their privacy disclaimers, I decided to retire the Echo Dot I have been using for years in my office and replace it with a HomePod Mini.

HomePod Mini
This is pretty much how I feel about it.

And of course there are a few catches–for instance, it’s been seven years since the first HomePod was launched, and it is still not officially available in Portugal. So I did some spelunking on eBay to have a second-hand one shipped from the US (which, ironically, was the cheapest way to get it).

The second catch is, of course, that I have gone all-in on Siri on what is likely And yes, I know that there is absolutely no guarantee that Apple will bring any future “AI Siri” features to current devices.

In fact, there’s a near certainty of the opposite, especially since the product cycle for HomePods is just plain weird and Apple will definitely want to upsell you on to a “ScreenPod”.

And yes, I was very close to getting a Home Assistant Voice and going through the entire rigmarole of setting up a local LLM to handle intents and have a fully offline solution, but that would have been an additional time sink and required a lot more changes to our home automation setup than I deemed useful (or viable in the short term).

Plus, saying “Okay Nabu” just feels ridiculous (and yes, I know a lot about the Wyoming Satellite project and how you can configure wake words, etc. - I just really didn’t want to do any of it until the tech matures another year.

But I digress. Let’s go over my notes on setting up the Orb of Artificial Stupidity (which is what I initially named it on the Home app).

Hardware

Although I was fully aware of the fact (and mentioned it in the past several times as a reason not to get one), it’s simply asinine that the HomePod Mini doesn’t have an audio out jack.

And I was also aware that the power cable (which terminates in a USB-C plug that requires a PD or Apple power adapter) is non-removable (you can do that on the “normal” model with some effort, but on the mini it’s soldered to the board).

Otherwise, it’s what you’d expect: a single wide-range speaker (with very good bass for the volume) with a few LEDs grafted on top inside a somewhat fashionable (but utterly forgettable) textured sphere.

And the touch controls are… well… not good. Fortunately, I have it tucked away behind my monitor just out of reach, so I don’t try to use them for anything but muting or un-muting it.

AirPlay 2.0

I have no issues using the HomePod Mini to listen to podcasts, but music has to be a) in stereo and b) through my 2.1 speaker setup, which has a little passive audio mixer in front to ensure I can have up to four computers or synthesizers permanently plugged in.

So I took the opportunity to upgrade shairport-sync on the Raspberry Pi that manages my office lights, which also acts as a unified streaming receiver via a little audio DAC. I also run a PlexAmp instance there, so it’s been the default “play on” destination for all of my music, but the HomePod can’t stream to anything that doesn’t speak AirPlay 2.0 (or Bluetooth).

Recompiling shairport-sync to support AirPlay 2.0 was a relatively trivial thing, but, again, it is an insanely more contrived process than just using a cable. I’m used to the vagaries of AirPlay and Apple’s silent war against audio jacks across anything that isn’t a MacBook, but it still feels stupid.

Still, at least I was able to keep using the Raspberry Pi as a “unified” audio receiver of sorts.

The Siri Dunce Cap

Once I had everything working, we began the process of training the human intelligences that were to benefit from this. For starters, I disabled speaker recognition (since I needed to have other people be able to set lighting scenes or play music), and everything mostly works… except Siri’s ability to understand context. As usual.

But in this case, it has a couple of extra annoying quirks. In particular, I have to explicitly tell it where to play music all the time. To simplify things, I named my Raspberry Pi ‘s AirPlay service “Desk”, but the HomePod needs very specific guidance to use them.

“Siri, play (that U2 album Apple foisted on everyone) on Desk” works, but given the vagaries of “dumb Siri” context handling, that also means that “Siri, pause” does not work at all from that point onward, because Siri is fundamentally unable to do that unless you specifically tack on “… music on Desk”.

Similarly, I have to be careful to avoid saying “turn off all the lights” even though the HomePod’s location is set to be my Office without adding “… in the office”, otherwise everything in the house will be plunged into darkness.

This, as you might expect, is not a popular outcome for most people.

I also had to rename my “Office Desk Lamp” to “Desk Lamp” because it was getting tedious to say “Siri, turn on the desk lamp” and have it say there was no such thing in my home, even though both the HomePod and the lamp are configured to “be” in the office.

Conclusion

These are all things I was mentally prepared for, since I have been using Siri with my Apple Watch and iPhone for many years now and Stockholm Syndrome nearly prevents me from pointing out, yet again, that the experience of using Siri for anything inside the home has, if anything, been thoroughly and consistently this bad since the very beginning–and, again, I have zero hope of Apple ever fixing it properly.

But hey, we can get it to work and I trust Apple a lot more than I trust Alexa, so even though I am still sore about the loss of the Echo Dot’s audio jack and the inability to stream any of my Plex music to the HomePod I’m telling myself it’s all worth it because I get to rebuild all my playlists on Apple Music.

Which is kind of what Eddie Cue wanted all along, no?

A bit of a personal update

I have been mostly in “inbox zero” mode for the past few weeks, which generally meant checking stuff off my to-do list, trying to ignore the news, and using some fairly colorful language when I didn’t.

Read More...

Easter Break

Unusual, I know
I wasn’t aware rabbits lay eggs this high.

The Polyphemus Filament Dryer

I haven’t written about 3D printing in a while, but I have both kept at it and actually doing a bit of market research–I’ve been considering either building an MMU or getting a multi-material printer, but I haven’t made up my mind yet, and the tariff war isn’t helping.

Read More...

Cirque du Soleil

Bop
A bit of… light entertainment

AI Does Not Spark Joy

As an inveterate tinkerer, I have spent a lot of time messing with in my side projects, and… it hasn’t sparked a lot of joy.

Read More...

A Classical Evening

1-2-3 1-2-3 1-2-3
Strauss by the Vienna Johann Strauss Orchestra

The Chuwi Larkbox S

It’s been a little while since I last looked at regular mini-PCs, and considering that the market is flooded with cheap Intel N100 and N150 variants, you would think there isn’t a lot of diversity in the EUR 200 range.

Read More...

Notes on MCP

I’ve been playing with Anthropic’s MCP for a little while now, and I have a few gripes. I understand it is undergoing a kind of Cambrian explosion right now, but I am not very impressed with it. Maybe it’s echoes of TRON, but I can’t bring myself to like it.

Read More...

The JetKVM

I have now officially reached the point where I have more KVM devices than I actually need (at least for now), and I think this one will be the last for a while–so this is my attempt to finish the series on a high note.

Read More...

Archives3D Site Map