Home automation field notes All concepts

bill of materials

What the hardware actually is

The real bill of materials: names, versions, and a verdict on each, including the ones we would not buy again and the one that is quietly the best thing in the flat.

Most home-automation writing stops at "use Zigbee, avoid cloud". This is the actual bill of materials of one installation, which differs from the shopping list in one important way: it includes the verdicts, after living with each part. Some we would buy again tomorrow. Some we keep out of stubbornness. One we keep because throwing it away would mean admitting something. Numbers as of writing: Home Assistant 2026.9, 1,623 entities, 177 automations, roughly 47,400 lines of our own code and configuration, two dwellings.

The brain

Home Assistant Green. 4 GB RAM, 28 GB eMMC. It runs the whole thing comfortably, but both numbers are the actual constraint on what else can live here, and both have bitten.

Buy the bigger box. Not because the software needs it, but because every diagnostic tool you will want to run (a second container, a language model session, a database vacuum) needs headroom the base model does not have. Vacuuming the database requires free space equal to the database, so it fails exactly when the disk is full.

Zigbee

Zigbee2MQTT 2.14 with a ZBT-2 coordinator. 32 devices: 18 routers, 14 end devices. Twenty of the 32 are IKEA, and the count grows by one most months.

The ZBT-2, honestly

Day to day it is a good, stable coordinator, the mesh runs for weeks without a thought, and none of the incidents elsewhere on this site trace back to it. It has one documented fault worth knowing about: occasionally it throws ASH_NCP_FATAL_ERROR and drops the network until it is restarted.

What makes this worth reporting rather than shrugging at: the fault appeared on two separate ZBT-2 dongles. Same symptom, different physical unit. That rules out a bad sample and points at what both units share: the firmware, or, as a reviewer correctly noted, the host's USB path and its driver, which this test cannot separate.

Firmware remains the favourite (USB power and the disk were ruled out before the second dongle went in), and the planned upgrade below doubles as the experiment that settles it, which is the good news either way, because firmware is fixable, whereas a hardware fault would mean the model is just bad.

Next step here: a coordinator firmware upgrade is planned, and this page will be updated with whether the fault goes away. If you run a ZBT-2 without ever seeing this error, nothing is wrong with yours, it is intermittent, weeks apart, and recovers with a restart.

IKEA as the backbone: boring, and that is the point

INSPELNING and TRETAKT smart plugs, TRADFRI bulbs, VINDSTYRKA air sensors, all mains powered, so all routers. That is what makes the mesh: most of the routers here are IKEA, bought for other reasons, quietly holding the network up.

The end devices are the same story: PARASOLL door contacts, VALLHORN motion, BADRING water leak, RODRET dimmers. Cheap, dull, and none of them has been the cause of an incident on this page. The VINDSTYRKA in particular does more than its price suggests, its particulate channel turned out to be a reliable cooking detector, which is not what it was sold as.

Aqara: works, but it is picky about company

One LUMI device here (a water sensor) among 32. Aqara end devices are known for choosing a parent router and then dropping off if that parent is not to their taste, and non-Xiaomi routers frequently are not. If your mesh is built from another brand, expect this to be the device that mysteriously goes offline. It is not a reason to avoid them, it is a reason to pair them near the coordinator and watch them for a week.

Tuya: the local setup with a cloud renewal clause

Several Tuya-based plugs, controlled locally. Local control needs a per-device key, and that key changes every time the device is re-paired, after a factory reset or a Wi-Fi change. The only way to retrieve the new one is the vendor's cloud API.

So the cloud account has to be kept alive indefinitely, unused, purely so that local-only operation stays recoverable. Delete it and the next reset makes the device uncontrollable, local network or not.

The two meshes, photographed

Both networks, as their own tooling draws them. The interesting part is not either picture, it is that the two tools choose to show you different things.

Zigbee2MQTT network map: the mesh around a coordinator
Zigbee, as Zigbee2MQTT draws it. Line colours are relationships, not signal: red = that neighbour is the node's parent, green = its child, blue = a sibling, two routers that peer with each other. The numbers are link quality (LQI, out of 255), one per direction. Two things worth noticing: the coordinator is not the busiest node, an air-quality meter that happens to be a router carries the middle of the mesh, and the battery sensors hang off whichever mains-powered plug was nearest, which is why buying boring mains-powered devices quietly builds your network for you.
Thread topology: border router, leader bulb, routers and sleepy end devices
Thread, as the border-router panel draws it. Here the colours mean link quality, not relationship, green is a healthy link, orange weaker, red dashed poor or aging. Roles are the icons instead: the crown is the network leader, a role the mesh elects by itself, and it elected the light bulb in the office. The circular arrows are routers: both smart plugs and the USB-powered air monitor route for everyone else, exactly the “mains devices carry the mesh” rule again. The zzz badges are sleepy battery devices that wake to report and vanish.
The observability difference is the real lesson. Zigbee2MQTT tells you who depends on whom (relationships) and leaves quality as numbers; the Thread panel tells you how good each link is and leaves the dependencies to icons. Neither shows both at once. When a device misbehaves, you will want both answers (who is it attached to, and how well) so knowing which map answers which question saves a debugging round.

Thread and Matter

Both in use, with one strong preference: Matter-over-Thread rather than Matter-over-Wi-Fi (a sentence in which the word "over" was quietly doing two different jobs, and on reflection deserved untangling), and the reason is not radio, it is your network. If your IoT devices sit on their own VLAN (which is standard advice, and correct) then Matter over Wi-Fi has to cross that boundary, and it relies on multicast DNS, which does not.

Thread devices reach the controller through a border router and sidestep most of the problem: the border router itself still advertises the devices over mDNS on the infrastructure side, so it has to sit on, or be reflected into, the controller's segment. Reflecting for one border router beats reflecting for every bulb.

Solving it the other way needs an mDNS reflector between segments, and plenty of consumer routers do not have one. The workaround here is a small avahi container doing nothing but reflecting.

Infrared: the honest failure

A Broadlink RM4 mini driving an air conditioner through SmartIR, with the remote captured by hand. It works, and it is the single most dangerous device in the house from an automation standpoint, because infrared is one-way. The system knows what it sent, never what happened.

Worse, on this handset the captured off command is a power toggle, the same frame for on and off. An automation written to guarantee the air conditioning was off in an empty flat started it instead, for four hours. The full post-mortem is here. If you automate IR, verify the power command against a known toggle frame, and pair every command with an independent sensor that can confirm the outcome. Ours is now a tilt sensor glued to the louver, which turned the honest failure into a closed loop; the section title stays, as a memorial.

Appliances: one excellent, one hopeless

DishwasherWashing machine
Appliance's own pathLocal WebSocket on the LANVendor cloud only
Second, local pathA metering smart plug, on both
Detail from the applianceProgramme, phase, progress, remaining time, salt, rinse aid, faultsCycle counters, selected options
Works with the internet downYesYes, via the plug, not the appliance
VerdictExcellent, but a manual, unofficial install Cloud unreliable; the plug carries it

The dishwasher's local integration is genuinely good and gives more than the vendor's own app. It also once hung Home Assistant's startup: unreachable while nobody was home, its connect loop was registered as a tracked task, so the startup phase waited for it, timed out, and abandoned the webhook and push registrations that were still finishing. Every notification path went quiet, silently, and only while away. The fix was one word, a background task instead of a tracked one.

The washer has no local API at all; a promising-looking library turned out to be for portable air conditioners. Its cloud reports the appliance as Off mid-cycle, because it disconnects and the last known state keeps being served. We eventually listened to an entire wash at the router to find out exactly what it says to its maker, which settled the question with more finality than we had hoped for.

The metering plug does most of the job anyway

This is the part worth taking away, because it applies to any appliance a vendor has decided not to open up. A smart plug that measures power, not just switches, recovers most of what the missing API would have given:

One trap in that last one. Averaging the power factor across a whole cycle mostly measures which programme you chose, because both machines spend most of a cycle running a heating element, and a heater is purely resistive. Compute it only from samples in a power band that contains the motor and excludes the heater, then a short cold wash is comparable with a long hot one. Test it with a synthetic trace before trusting it: feed a cycle whose motor runs at 85 % and whose heater runs at 99 %, and check the answer comes back near 85 rather than near 95.

So the honest verdict is not “the washer is unautomatable”. It is that the appliance's own interface is decoration, and a metering plug (a few euros, no vendor account, works with the internet down) carries the automation instead.

Air quality

IKEA VINDSTYRKA units for particulates and VOC, plus a formaldehyde-capable meter and a Qingping monitor at the second property. Two lessons worth passing on:

Audio and video

A 2010 Sony Bravia, a Cambridge Audio CXN100, a Chromecast. The television has no modern control API, the only open port serves a DLNA renderer descriptor, so the integration is dlna_dmr and availability is the power signal: reachable means on, unavailable means standby.

The audio link only establishes when the television itself wakes the amplifier. So the automation's entire action is to turn the amplifier off and wait for the TV to wake it. Every attempt to improve that by adding a power-on made it worse.

Network

The one subscription worth paying for is free

healthchecks.io. Three heartbeats, the automation platform and a router at each site, pushed outward on a timer. If one stops arriving, an external service raises the alarm. It is the only alert path that survives the house being dead, because it is the only one not running inside it. Free tier, five minutes to set up, and it changes what the system is capable of noticing at all.

Since August: the things that arrived while this page was not looking

A bill of materials is a snapshot, and a household with a soldering iron and a delivery address is not a still subject. The following turned up in September and have already earned their entries.

Verdicts, in the spirit of this page: buy the display, buy the tilt sensor, buy the cuff if you already own the arm. The radiator heads are fine. The bulb ritual is not a feature, it is a rite of passage.

What we would buy again, and what we would not

AgainReluctantlyNo
IKEA mains-powered anything, the mesh builds itself

VINDSTYRKA, outperforms its price and its stated purpose

Bosch with the local integration

Smart plugs with current metering, the most useful sensor per euro in the house
ZBT-2, good and stable day to day; one intermittent firmware fault, upgrade pending, verdict to be updated

Tuya, fine locally, as long as you never delete the cloud account

Aqara, good hardware, fussy about its parent router
Any appliance whose only interface is a vendor cloud

Infrared for anything that matters, unless you can measure the result

The 4 GB box, if you intend to debug it while it runs

The general rule that fell out of all this: buy the thing with the boring radio and the open protocol, and be suspicious of anything whose best feature is the app.

The pattern across all of it: the parts that caused trouble were rarely the cheap ones. They were the ones with no way to confirm what had actually happened, one-way infrared, a cloud that reports the last state it saw, a switch with no API. Metering plugs cost a few euros and are the most quoted devices on this entire site, precisely because they measure instead of assert.