Home automation standards
Criteria verified as of August 2026. Re-verify on the web before committing to anything (§8).
1. Scope and triggers
Applies to automating a home: choosing devices and protocols, setting up the control
platform, segmenting the network, writing automations that do no harm, maintaining the whole thing when
a vendor disappears, and protecting the privacy of the people who live inside.
Triggers: configuration.yaml, automations.yaml, scripts.yaml, secrets.yaml, Home Assistant
Jinja2 templates, HACS, add-ons/apps, Home Assistant OS versus Container, openHAB, Node-RED,
Zigbee2MQTT, ZHA, Zigbee coordinator firmware, ESPHome and its device YAML, MQTT/Mosquitto,
retained, Zigbee, Z-Wave, Thread, Matter, border router, fabric, multi-admin, "the device
needs the cloud", "the vendor has shut down the service", IoT VLAN, camera, microphone, presence
detection, voice assistant, "the automation locked me out of the house", "the heating switched off",
configuration backup.
Guiding principle, and it is an acceptance criterion, not a preference: the house has to keep
working when the internet, the vendor or the automation server go down. A home is not
a service with an SLA; it is the place where somebody has to be able to turn on a light, open the door and
not be cold at three in the morning. Three absolute rules follow from that:
- The physical switch is never replaced. Every controlled load keeps a manual control
that works with the platform switched off. A smart relay behind the wall switch, not in
place of it; a "smart" bulb powered by a switch that people can turn off is
a design fault, not an integration.
- Local control by default. A device that needs to reach the internet to turn on a light
introduces an external dependency in a basic household function. The purchase criterion is
"does it work with the router disconnected?", and it is tested before installing the second one.
- Degradation is a requirement. With the platform down, the house is left in a safe state and
operable by hand: lights switchable, locks openable, climate working with its thermostat.
Second thesis: the cheap connected device is the weakest link in your network, and not as an
opinion — it is a computer with an old Linux, embedded credentials and a vendor that will stop
publishing firmware before you throw it away. That is why §3.2 (segmentation) is not paranoia: it is the only
mitigation that keeps working when the vendor abandons the product.
Not applicable: see homelab-standards (the server and the lab are theirs: the hardware, the
hypervisor, Docker/Podman, the reverse proxy with TLS, the SSO in front of the applications, remote
access without opening ports, the UPS, the lab backup policy and the proportionality criteria.
Clean boundary: where Home Assistant runs is theirs; which device enters the house, with which
protocol, and which automation is written, belongs here), embedded-iot-standards (building the
device is theirs: silicon, RTOS, bootloader, OTA firmware update, per-device identity,
CRA/EN 18031. Here the device as a product you buy and deploy, and what
you do when its vendor stops updating it), edge-computing-standards (fleet of nodes and
A/B updates at scale; a house is not a fleet), ot-ics-security-standards (industrial
building, BMS, KNX/BACnet in a professional installation, personal safety in a physical process:
theirs. A single-family home belongs here; a building with contracted maintenance and certified
safety systems, theirs), networking-standards (network design, VLANs, addressing,
routing, mDNS across segments: theirs) and firewall-policy-standards (the rule as an artifact:
default-deny, flow matrix, lifecycle. Here it is decided which segment exists and what has to be
able to talk to what; there the rule is written and governed), wireless-standards (Wi-Fi, channels,
coverage and coexistence on 2.4 GHz — which is the real cause of half the Zigbee problems),
dns-standards (internal resolution, home.arpa), vpn-standards (remote access to the house: WireGuard,
Tailscale — here only the prohibition on opening ports), privacy-engineering-standards
(minimisation, retention and rights are theirs; here the decision of which sensor goes in which
room and what leaves the house), backup-recovery-standards (mechanics of the copy and restore
testing), vulnerability-management-standards (CVE triage), observability-standards
(telemetry as a platform), local-inference-standards (serving a model locally, if the
voice assistant uses an LLM: engine, quantisation and sizing are theirs),
ai-agents-standards (an agent that acts on the house: loop, caps and human approval),
physical-security-standards (certified alarm, professional access control, video surveillance with
legal obligations — a home camera pointing at the public road stops being a domestic
matter), green-it-standards (consumption and energy efficiency as a discipline).
2. Default decisions / Toolchain
Verify the latest version, licence and status on the web before pinning them (§8).
2.1 Platform
| Platform |
Licence (read raw) |
When |
| Home Assistant |
Apache-2.0 (LICENSE.md of home-assistant/core) |
By default. Largest integration catalogue, real local control, active community. As of Aug 2026: 2026.8, released on 5-Aug-2026 |
| openHAB |
EPL-2.0 (LICENSE of openhab-core) |
Mature JVM-based alternative; more formal rules, smaller community |
| Node-RED |
Apache-2.0 (LICENSE) |
Complement, not substitute: visual flows for complex or integration logic, alongside HA |
| Zigbee2MQTT |
GPL-3.0 (LICENSE) |
Zigbee → MQTT bridge independent of the hub. As of Aug 2026: 2.13.0 (1-Aug-2026) |
| ESPHome |
Dual and by file extension: its own LICENSE says that "The ESPHome License is made up of two base licenses: MIT and the GNU" — GPLv3 for the C++/runtime code (.c, .cpp, .h, .hpp, .tcc, .ino) and MIT for the rest |
Own devices and recovering devices from abandoned vendors by reflashing them |
Home Assistant's cadence, which is an operational commitment: one major per month (YYYY.M) and
weekly patches —the 2026.8 note says it: "Our goal is to release a patch release once a
week, aiming for Friday"—, and every release brings a "Backward-incompatible changes" section
in which the project itself acknowledges that "sometimes it is inevitable". Consequences:
- Reading the release notes before updating is not optional, and that is the only moment when
the system warns you that an integration is going to stop working.
- Do not update on release day. Wait for the first patches unless the update
closes a vulnerability.
- Never update without a recent and tested backup (§7.1).
- Deprecations are announced with more than a year of lead time on the developer blog (as of
Jul 2026, several pointed to Core 2027.7/2027.8). That lead time exists for you to use it, not for you
to ignore it.
Installation: as of Aug 2026 the official documentation presents Home Assistant OS (with apps/add-ons,
one-click updates and backups) and Home Assistant Container (you bring the system and manage
the updates), and warns that "Home Assistant Container installations don't have access to
apps", which leaves out app-controlled integrations such as Thread and Z-Wave. If you are going to use
Thread or Z-Wave, that sentence decides your installation method. (Verify §8: the catalogue of methods
and its naming have changed.)
2.2 Protocols
| Protocol |
Band / topology |
Verdict |
| Zigbee |
2.4 GHz, mesh |
Default option for sensors and lights. Cheap, local, huge ecosystem. It collides with Wi-Fi on 2.4 GHz: choosing the channel is mandatory, not optional (§6.2). Mains-powered devices act as repeaters; battery ones do not |
| Z-Wave |
Sub-GHz (868 MHz in Europe), mesh |
Less interference and better penetration; smaller catalogue and more expensive. A good choice for locks and critical sensors. Z-Wave Long Range for range |
| Thread |
2.4 GHz, IPv6 mesh |
Transport, not ecosystem: it needs a border router and, in practice, Matter on top. Current spec 1.4.1 (verify §8) |
| Matter |
Over Thread, Wi-Fi or Ethernet |
The smokiest area in the sector. See §2.3 |
| Wi-Fi |
2.4/5 GHz, star |
Only with local firmware (ESPHome, Tasmota, WLED) or documented local control. Every Wi-Fi device is one more client saturating the network and one more point of presence on your LAN |
| BLE |
2.4 GHz |
Proximity sensors and beacons; short range, needs proxies spread around |
| Proprietary RF 433/868 MHz |
Point to point |
Cheap and with no security whatsoever: most are fixed codes, clonable with €20 hardware. Never for locks, garages or alarms |
| KNX / wired |
Wired bus |
Professional installation, far superior reliability, cost and building work. In a full refurbishment, the best option for what must not fail |
2.3 Matter: what actually works
Matter solved the problem of commissioning and of basic interoperability between
ecosystems (Apple, Google, Amazon, Samsung), and that achievement is real: a Matter device is
commissioned with a QR code and can be shared with several controllers (multi-admin). What it did not
solve, and is worth saying before buying:
- Device type support goes by specification version, and your controller lags
behind. As of Aug 2026 the CSA publishes up to Matter 1.6 (with 1.5.1, 1.5 and the 1.4 series still
available). That the spec supports a category does not mean your app or your hub support it.
- The vendor's advanced features remain outside Matter. The device works for the
basics and for everything else it asks for its app —and its cloud—. Buying Matter does not free you from the vendor.
- Matter over Wi-Fi is not guaranteed local control: local control belongs to the fabric, but the
device can keep talking to its cloud in parallel. It is checked at the firewall (§3.2),
not in the brochure.
- Thread needs a border router and having several from different vendors has been, repeatedly,
a source of network problems. One properly placed is worth more than three scattered around.
- Practical rule: Matter is excellent for standardising commissioning and for not being
tied to one ecosystem. Do not buy it for what is announced; buy the device that already works today
with your controller, and verify it in the compatibility list before paying.
3. Structure and conventions
3.1 Configuration as code
- All configuration in Git, with
secrets.yaml outside the repository (or encrypted with
SOPS/git-crypt). Without this there is no diff, no revert and no rebuild.
- Stable naming convention, by function, not by brand:
<domain>.<floor>_<room>_<function> (light.gf_living_main). The vendor's identifiers
change when the device is replaced; the functional name does not. Renaming entities afterwards
breaks every automation that cites them, so it is decided on day one.
- Areas, devices and labels properly set: they let you write automations by zone
instead of by list of entities, which is what survives a bulb change.
- Templates and complex logic outside the automation (scripts, blueprints, or Node-RED if
the flow calls for it). An automation with 60 lines of Jinja2 is code without tests.
3.2 Network: segmentation is a requirement
- Its own VLAN for IoT, no exceptions, with default-deny towards the trusted network. Network
design and rule:
networking-standards and firewall-policy-standards. Here, the flows that must be
allowed and nothing more:
- IoT → controller (HA/MQTT): only the necessary ports.
- Controller → IoT: what is needed for control.
- IoT → internet: egress filtering, and by default blocked. Many devices
work perfectly without egress; for those that do not, document where they go and why.
- Trusted → IoT: initiated from the trusted side, not the other way round.
- Discovery (mDNS/SSDP) does not cross VLANs by itself: an mDNS reflector/proxy scoped to
the specific services is required. Opening the reflector "for everything" cancels out the segmentation.
- Isolated guest Wi-Fi and a different PSK for the IoT SSID. A compromised device
must not be able to see the NAS.
- Remote access: never by opening ports. VPN (WireGuard/Tailscale) or outbound tunnel. FORBIDDEN
to publish the controller's interface on the internet, with or without a password.
- Blocked egress is also the mitigation for the abandoned device (§7.2): when the
vendor stops patching, the device will keep working locally and can neither be reached nor
phone home.
3.3 Robust versus fragile automations
The difference between a house that helps and one that punishes:
- Trigger on state, not on event. An event is lost if the platform was restarting; the
state gets re-evaluated. Rule: the goal of an automation is that the world ends up in the
desired state, not that an action is executed. After a restart, the system must converge.
- Idempotence: running the automation twice produces the same result. "Toggling"
(toggle) is the antipattern: if an event is lost, the state stays inverted forever.
- Explicit conditions for human override. If somebody turned the light on by hand, the
automation does not turn it off five minutes later. A presence sensor with a timer that
ignores the manual action is the number one reason people uninstall home automation.
- No values coupled to the clock time when what matters is the light or the presence:
use the sensor, not the time.
- Test sensor failure: what does the automation do if the presence sensor has gone 6 hours
without reporting because its battery ran out? The right answer is almost never "assume there is
nobody there".
- One change, one automation. Several automations writing to the same entity
produce oscillations that nobody diagnoses. If there are two, there is a third that arbitrates.
3.4 The household failure that does matter
It is not the light that does not turn on. It is this, and each one carries a design barrier:
| Failure |
Mandatory barrier |
| Somebody locked in or out |
A lock with a working physical key always. Never an automation that throws the bolt without a verified presence condition. Manual opening from inside, without electricity |
| In the dark |
Emergency lighting or at least one light per floor outside automatic control. Never "turn everything off" without exceptions for an occupied room |
| No heating / no cooling |
The thermostat keeps its own logic and its limits; the controller suggests, it does not govern. Minimum anti-freeze floor and maximum ceiling, enforced in the thermostat, not in the automation |
| Pump, irrigation or valve stuck open |
Safety timer in the device, not in the software. Flow meter or cut-off by maximum time |
| Alarm / smoke / CO |
Certified standalone detectors, mains- or battery-powered, independent of the home automation. Home automation notifies; it is not the detection system |
| Power cut |
The state after power is restored is decided: each relay configured to "last state" or "on" according to the load. A freezer behind a socket that starts up off is an expensive failure |
4. Quality and testing
Scaled to what it is —a house, not a bank—, but these five are not skipped:
- Configuration validation before reloading (
hass --script check_config or equivalent) and
a YAML linter. A badly indented YAML leaves the system unable to start.
- Manual test of every new automation, including the error path, before calling it
good. And a restart test: reload the platform and check that the state converges.
- Test instance for big changes (major update, change of Zigbee
integration, coordinator migration). With Home Assistant it is a backup restored into a VM: cheap and
it saves you the lost weekend.
- Restore tested, not just backup taken (§7.1). A backup that has not been restored does not exist →
backup-recovery-standards.
- Review of the release notes before each major update, looking specifically for
the incompatible changes section and the integrations you use.
5. Security and privacy
5.1 The house as attack surface
- Segmentation (§3.2) first; it is what keeps working when everything else fails.
- Credentials: a unique password per service, MFA enabled on the controller, and separate
accounts per person — not one shared "house" account. Guests do not get the
administrator's.
- No ports open to the internet. Neither the controller, nor the camera, nor the NVR, nor "just
8123 with a good password".
- Third-party integrations (HACS and equivalents) are unreviewed code running with the
controller's permissions. Install the minimum, from repositories with activity and with the
licence read; keep them updated; and remove them when the author abandons them. It is a supply chain,
even if it is your house's.
- Updates: controller and bridges (Zigbee2MQTT, ESPHome) up to date; device firmware
too, but one at a time and with the ability to roll back, because a bad firmware can
leave a device useless and many do not allow a downgrade.
5.2 Cameras, microphones and presence
This is the part of home automation that handles intimate data of people who have signed nothing:
housemates, minors, visitors, domestic staff.
- Cameras: local recording (NVR/HA), no cloud by default. If the model requires the cloud to work,
it does not come in. Short and explicit retention.
- No camera or microphone in bedrooms or bathrooms. It is not a recommendation: it is the limit.
- Consent and information for those who live there and those who visit. And if a camera captures the public
road or a common area, it stops being a domestic matter and enters legal obligations →
physical-security-standards, privacy-engineering-standards.
- Voice assistants: local whenever possible (local voice processing, or your own model →
local-inference-standards). If it is cloud-based, explicitly accept that the audio of your living room
leaves the house, and place it where that is acceptable.
- Presence detection is a record of a life: who is at home, at what time, in which
room. Keep the minimum and with bounded retention; the infinite presence history is the most
sensitive database in the house and almost nobody treats it as such.
- Vendor cloud accounts: before creating one, the question is what it takes with it. If the vendor
disappears, the account takes the device with it — another reason to demand local control.
6. Performance and operability
6.1 Latency and perceived reliability
The bar is the wall switch: under ~200 ms from the press to the light, or
people go back to the switch. A physical remote that goes through Zigbee → bridge → MQTT → automation →
Zigbee and on top of that goes out to the cloud does not make it. Direct binding (Zigbee binding, Z-Wave
association) between remote and light wherever it exists: it works even with the controller switched off, which is
precisely the requirement of §1.
6.2 Radio
- Zigbee channel chosen so as not to overlap with the 2.4 GHz Wi-Fi channel, and documented. This single
setting resolves most of the "sometimes it does not respond".
- Zigbee coordinator kept away from the computer with a USB extension cable and away from USB 3.0 and power
supplies: USB 3 interference on 2.4 GHz is real and baffles people for months.
- The mesh is held up by the mains-powered devices, not the battery ones. A house with only battery
sensors does not have a mesh, it has a star with bad range.
- Record of the coordinator and its firmware, and a backup of the Zigbee/Z-Wave network (network keys): without
it, changing coordinator means pairing every device again, one by one, up a
ladder.
6.3 Proportionate monitoring
What has to be monitored in a house is short and concrete:
- Low battery on each sensor, with a threshold and a warning with lead time.
- A device that has gone N hours without reporting — that is the warning of a dead sensor, and without it the
automation keeps "working" with yesterday's data.
- Controller down (warning from outside the controller itself; if it warns itself, it does not warn).
- Power cuts and UPS status →
homelab-standards.
- The most recent backup and its age.
- Everything else is optional. A panel with 200 graphs at home is a hobby, not observability.
7. Long-term sustainability
7.1 Backup and rebuild
The question that orders this section: if the controller's disk dies today, how long until you have
the house working again? If the answer is "a weekend", the design has failed.
- Automatic and periodic backup, off the machine itself (domestic 3-2-1: local + NAS + off-
site, encrypted) →
backup-recovery-standards.
- Include what is not in the YAML: the database if you care about the history, Zigbee/Z-Wave
network keys,
secrets.yaml, ESPHome configurations, Node-RED flows, and the device
inventory.
- Restore tested at least once a year in a VM. It is the only way to know whether the backup
is any good.
- One-page rebuild document: what hardware, what gets installed, in what order, where
the keys are. Written for somebody who is not you —including the case where you are not around—.
7.2 The device the vendor abandons
It always happens, and the plan is made before buying, not afterwards:
- Purchase criteria: does it work without the cloud? can it be integrated locally? is it reflashable
(ESPHome/Tasmota)? is there a community? A device that fails all four is rented, not bought.
- When the vendor abandons it, in this order: (a) reflash with free firmware if the
hardware allows it; (b) keep it with no internet egress and controlled locally; (c)
replace it. What is not done is leaving it plugged in, with unpatched firmware and with access to
the internet.
- Segmentation with blocked egress (§3.2) is what turns (b) into a defensible option, and
that is why it is set up from the start, not when the bad news arrives.
7.3 Prohibitions
- ❌ FORBIDDEN to remove or disable the manual control of any load.
- ❌ FORBIDDEN for a basic household function (light, lock, climate) to depend on the internet or on
a vendor's cloud.
- ❌ FORBIDDEN IoT devices on the same VLAN as computers, NAS or phones.
- ❌ FORBIDDEN to expose the controller, a camera or an NVR directly to the internet, with or without a
password; remote access goes over VPN or a tunnel.
- ❌ FORBIDDEN to allow internet egress by default from the IoT VLAN.
- ❌ FORBIDDEN proprietary 433 MHz RF with a fixed code on locks, garages or alarms.
- ❌ FORBIDDEN cameras or microphones in bedrooms and bathrooms; and forbidden to install them without informing
those who live there.
- ❌ FORBIDDEN to keep presence history without a defined retention.
- ❌ FORBIDDEN to update the platform without reading the incompatible changes and without a recent backup.
- ❌ FORBIDDEN to update the firmware of several devices at once.
- ❌ FORBIDDEN automations based on toggle or on non-re-evaluable events.
- ❌ FORBIDDEN an automation that throws the bolt, turns off all the lights or cuts the heating
without a presence condition and without a safety limit in the device itself.
- ❌ FORBIDDEN to entrust smoke, CO or intrusion detection to home automation: certified standalone
detectors, and home automation only notifies.
- ❌ FORBIDDEN to leave on the network a device abandoned by its vendor with internet egress.
- ❌ FORBIDDEN a configuration that is not in Git, and forbidden
secrets.yaml inside the
repository.
- ❌ FORBIDDEN to accept a backup that has never been restored.
- ❌ FORBIDDEN to buy on the "Matter" label without checking that that device works
with your controller today (§2.3).
8. Mandatory web verification
- Home Assistant: current version and its incompatible changes (as of Aug 2026, 2026.8, of
5-Aug-2026; monthly majors and weekly patches on Fridays). Developer blog for
announced deprecations. Current installation methods and their naming, which have changed:
as of Aug 2026 the official page presents OS and Container, and warns that Container does not have
access to apps, which affects Thread and Z-Wave.
- Licences read raw (
LICENSE, LICENSE.md, COPYING; watch out for master versus main).
Verified for this document: Home Assistant Apache-2.0, openHAB core EPL-2.0, Node-RED
Apache-2.0, Zigbee2MQTT GPL-3.0, and ESPHome with a dual licence by file extension
(MIT + GPLv3 for the C++/runtime code) — if you are going to redistribute anything derived, that is the one you
have to read in full.
- Matter: version of the specification published by the CSA (as of Aug 2026, 1.6 available alongside
1.5.1, 1.5 and the 1.4 series) and, separately, which version your controller implements. They are not
the same and that difference is the source of the smoke.
- Thread: current version of the specification (as of Aug 2026, 1.4.1) and compatibility of your
border routers.
- Zigbee: core revision (as of Aug 2026 the CSA publishes R23.2) and recommended firmware for your
coordinator.
- Zigbee2MQTT / ESPHome: current version (Zigbee2MQTT 2.13.0, 1-Aug-2026) and compatibility with
the Home Assistant version before updating either of the two.
- End of support for devices and vendor services: actively search whether the vendor has
announced a service shutdown or end of firmware, before buying and at least once a year
afterwards.
- CVEs of the controller, of the bridges and of the device models installed →
vulnerability-management-standards.
If the web contradicts this document, the web wins — flag the discrepancy.
1---2name: home-automation-standards3description: Engineering a home that keeps working when the internet, the vendor or the hub goes down. Use when designing or reviewing a smart home built on Home Assistant (configuration.yaml, automations.yaml, scripts.yaml, secrets.yaml, templates and Jinja2 triggers, HACS custom components, Home Assistant OS versus Container installs, add-ons/apps, the monthly 20XX.M release train and its backward-incompatible changes), openHAB, Node-RED, Zigbee2MQTT and its coordinator firmware, ZHA, ESPHome YAML device configs, MQTT and Mosquitto topics and retained state, choosing between Zigbee, Z-Wave, Thread and Matter (commissioning, border routers, fabrics, multi-admin) versus cloud-only Wi-Fi devices, putting IoT devices on their own VLAN with egress filtering, an abandoned device whose vendor stopped shipping firmware, cameras, microphones and presence detection inside a home, voice assistants and local speech processing, robust versus fragile automations (state versus event triggers, the automation that locks someone out or l4---56# Home automation standards78Criteria verified as of **August 2026**. Re-verify on the web before committing to anything (§8).910## 1. Scope and triggers1112Applies to **automating a home**: choosing devices and protocols, setting up the control13platform, segmenting the network, writing automations that do no harm, maintaining the whole thing when14a vendor disappears, and protecting the privacy of the people who live inside.1516Triggers: `configuration.yaml`, `automations.yaml`, `scripts.yaml`, `secrets.yaml`, Home Assistant17Jinja2 templates, HACS, *add-ons*/apps, Home Assistant OS versus Container, openHAB, Node-RED,18Zigbee2MQTT, ZHA, Zigbee coordinator firmware, ESPHome and its device YAML, MQTT/Mosquitto,19*retained*, Zigbee, Z-Wave, Thread, Matter, *border router*, *fabric*, *multi-admin*, "the device20needs the cloud", "the vendor has shut down the service", IoT VLAN, camera, microphone, presence21detection, voice assistant, "the automation locked me out of the house", "the heating switched off",22configuration backup.2324**Guiding principle, and it is an acceptance criterion, not a preference: the house has to keep25working when the internet, the vendor or the automation server go down.** A home is not26a service with an SLA; it is the place where somebody has to be able to turn on a light, open the door and27not be cold at three in the morning. Three absolute rules follow from that:28291. **The physical switch is never replaced.** Every controlled load keeps a manual control30 that works with the platform switched off. A smart relay behind the wall switch, not in31 place of it; a "smart" bulb powered by a switch that people can turn off is32 a design fault, not an integration.332. **Local control by default.** A device that needs to reach the internet to turn on a light34 introduces an external dependency in a basic household function. The purchase criterion is35 "does it work with the router disconnected?", and it is tested **before** installing the second one.363. **Degradation is a requirement.** With the platform down, the house is left in a safe state and37 operable by hand: lights switchable, locks openable, climate working with its thermostat.3839**Second thesis: the cheap connected device is the weakest link in your network**, and not as an40opinion — it is a computer with an old Linux, embedded credentials and a vendor that will stop41publishing firmware before you throw it away. That is why §3.2 (segmentation) is not paranoia: it is the only42mitigation that keeps working when the vendor abandons the product.4344**Not applicable**: see `homelab-standards` (**the server and the lab are theirs**: the hardware, the45hypervisor, Docker/Podman, the reverse proxy with TLS, the SSO in front of the applications, remote46access without opening ports, the UPS, the lab backup policy and the proportionality criteria.47**Clean boundary: where Home Assistant runs is theirs; which device enters the house, with which48protocol, and which automation is written, belongs here**), `embedded-iot-standards` (**building the49device is theirs**: silicon, RTOS, bootloader, OTA firmware update, per-device identity,50CRA/EN 18031. Here the device **as a product you buy and deploy**, and what51you do when its vendor stops updating it), `edge-computing-standards` (fleet of nodes and52A/B updates at scale; a house is not a fleet), `ot-ics-security-standards` (**industrial53building, BMS, KNX/BACnet in a professional installation, personal safety in a physical process**:54theirs. A single-family home belongs here; a building with contracted maintenance and certified55safety systems, theirs), `networking-standards` (**network design, VLANs, addressing,56routing, mDNS across segments**: theirs) and `firewall-policy-standards` (**the rule as an artifact**:57default-deny, flow matrix, lifecycle. **Here it is decided which segment exists and what has to be58able to talk to what; there the rule is written and governed**), `wireless-standards` (Wi-Fi, channels,59coverage and coexistence on 2.4 GHz — which is the real cause of half the Zigbee problems),60`dns-standards` (internal resolution, `home.arpa`), `vpn-standards` (remote access to the house: WireGuard,61Tailscale — **here only the prohibition on opening ports**), `privacy-engineering-standards`62(**minimisation, retention and rights are theirs**; here the decision of which sensor goes in which63room and what leaves the house), `backup-recovery-standards` (mechanics of the copy and restore64testing), `vulnerability-management-standards` (CVE triage), `observability-standards`65(telemetry as a platform), `local-inference-standards` (**serving a model locally**, if the66voice assistant uses an LLM: engine, quantisation and sizing are theirs),67`ai-agents-standards` (an agent that acts on the house: loop, caps and human approval),68`physical-security-standards` (certified alarm, professional access control, video surveillance with69legal obligations — **a home camera pointing at the public road stops being a domestic70matter**), `green-it-standards` (consumption and energy efficiency as a discipline).7172## 2. Default decisions / Toolchain7374> Verify the latest version, licence and status on the web before pinning them (§8).7576### 2.1 Platform7778| Platform | Licence (read raw) | When |79|---|---|---|80| **Home Assistant** | **Apache-2.0** (`LICENSE.md` of `home-assistant/core`) | **By default.** Largest integration catalogue, real local control, active community. As of Aug 2026: **2026.8**, released on **5-Aug-2026** |81| **openHAB** | **EPL-2.0** (`LICENSE` of `openhab-core`) | Mature JVM-based alternative; more formal rules, smaller community |82| **Node-RED** | **Apache-2.0** (`LICENSE`) | **Complement, not substitute**: visual flows for complex or integration logic, alongside HA |83| **Zigbee2MQTT** | **GPL-3.0** (`LICENSE`) | Zigbee → MQTT bridge independent of the hub. As of Aug 2026: **2.13.0** (1-Aug-2026) |84| **ESPHome** | **Dual and by file extension**: its own `LICENSE` says that *"The ESPHome License is made up of two base licenses: MIT and the GNU"* — **GPLv3 for the C++/runtime code** (`.c`, `.cpp`, `.h`, `.hpp`, `.tcc`, `.ino`) and **MIT for the rest** | Own devices and **recovering devices from abandoned vendors** by reflashing them |8586**Home Assistant's cadence, which is an operational commitment**: **one major per month** (`YYYY.M`) and87weekly patches —the 2026.8 note says it: *"Our goal is to release a patch release once a88week, aiming for Friday"*—, and **every release brings a *"Backward-incompatible changes"* section**89in which the project itself acknowledges that *"sometimes it is inevitable"*. Consequences:9091- **Reading the release notes before updating is not optional**, and that is the only moment when92 the system warns you that an integration is going to stop working.93- **Do not update on release day.** Wait for the first patches unless the update94 closes a vulnerability.95- **Never update without a recent and tested backup** (§7.1).96- Deprecations are announced with **more than a year of lead time** on the developer blog (as of97 Jul 2026, several pointed to Core 2027.7/2027.8). That lead time exists for you to use it, not for you98 to ignore it.99100**Installation**: as of Aug 2026 the official documentation presents **Home Assistant OS** (with apps/add-ons,101one-click updates and backups) and **Home Assistant Container** (you bring the system and manage102the updates), and warns that *"Home Assistant Container installations don't have access to103apps"*, which leaves out app-controlled integrations such as **Thread and Z-Wave**. If you are going to use104Thread or Z-Wave, **that sentence decides your installation method**. (Verify §8: the catalogue of methods105and its naming have changed.)106107### 2.2 Protocols108109| Protocol | Band / topology | Verdict |110|---|---|---|111| **Zigbee** | 2.4 GHz, mesh | **Default option** for sensors and lights. Cheap, local, huge ecosystem. **It collides with Wi-Fi on 2.4 GHz**: choosing the channel is mandatory, not optional (§6.2). Mains-powered devices act as repeaters; battery ones do not |112| **Z-Wave** | Sub-GHz (868 MHz in Europe), mesh | Less interference and better penetration; smaller catalogue and **more expensive**. A good choice for locks and critical sensors. Z-Wave Long Range for range |113| **Thread** | 2.4 GHz, IPv6 mesh | **Transport, not ecosystem**: it needs a *border router* and, in practice, Matter on top. Current spec **1.4.1** (verify §8) |114| **Matter** | Over Thread, Wi-Fi or Ethernet | **The smokiest area in the sector.** See §2.3 |115| **Wi-Fi** | 2.4/5 GHz, star | Only with **local firmware** (ESPHome, Tasmota, WLED) or documented local control. **Every Wi-Fi device is one more client saturating the network and one more point of presence on your LAN** |116| **BLE** | 2.4 GHz | Proximity sensors and beacons; short range, needs *proxies* spread around |117| **Proprietary RF 433/868 MHz** | Point to point | Cheap and **with no security whatsoever**: most are fixed codes, clonable with €20 hardware. **Never for locks, garages or alarms** |118| **KNX / wired** | Wired bus | Professional installation, far superior reliability, cost and building work. In a full refurbishment, the best option for what must not fail |119120### 2.3 Matter: what actually works121122Matter solved the problem of **commissioning** and of basic **interoperability** between123ecosystems (Apple, Google, Amazon, Samsung), and that achievement is real: a Matter device is124commissioned with a QR code and can be shared with several controllers (*multi-admin*). What it did **not**125solve, and is worth saying before buying:126127- **Device type support goes by specification version, and your controller lags128 behind.** As of Aug 2026 the CSA publishes up to **Matter 1.6** (with 1.5.1, 1.5 and the 1.4 series still129 available). That the spec supports a category **does not mean** your app or your hub support it.130- **The vendor's advanced features remain outside Matter.** The device works for the131 basics and for everything else it asks for its app —and its cloud—. Buying Matter does **not** free you from the vendor.132- **Matter over Wi-Fi is not guaranteed local control**: local control belongs to the *fabric*, but the133 device can keep talking to its cloud in parallel. It is checked at the firewall (§3.2),134 not in the brochure.135- **Thread needs a *border router*** and having several from different vendors has been, repeatedly,136 a source of network problems. One properly placed is worth more than three scattered around.137- **Practical rule**: Matter is excellent for **standardising commissioning** and for not being138 tied to one ecosystem. **Do not buy it for what is announced; buy the device that already works today139 with your controller**, and verify it in the compatibility list before paying.140141## 3. Structure and conventions142143### 3.1 Configuration as code144145- **All configuration in Git**, with `secrets.yaml` **outside** the repository (or encrypted with146 SOPS/`git-crypt`). Without this there is no diff, no revert and no rebuild.147- **Stable naming convention, by function, not by brand**:148 `<domain>.<floor>_<room>_<function>` (`light.gf_living_main`). The vendor's identifiers149 change when the device is replaced; the functional name does not. **Renaming entities afterwards150 breaks every automation that cites them**, so it is decided on day one.151- **Areas, devices and labels** properly set: they let you write automations by zone152 instead of by list of entities, which is what survives a bulb change.153- **Templates and complex logic outside the automation** (scripts, *blueprints*, or Node-RED if154 the flow calls for it). An automation with 60 lines of Jinja2 is code without tests.155156### 3.2 Network: segmentation is a requirement157158- **Its own VLAN for IoT**, no exceptions, with **default-deny** towards the trusted network. Network159 design and rule: `networking-standards` and `firewall-policy-standards`. Here, the flows that must be160 allowed and nothing more:161 - IoT → controller (HA/MQTT): **only the necessary ports**.162 - Controller → IoT: what is needed for control.163 - IoT → internet: **egress filtering**, and by default **blocked**. Many devices164 work perfectly without egress; for those that do not, document where they go and why.165 - Trusted → IoT: initiated from the trusted side, not the other way round.166- **Discovery (mDNS/SSDP) does not cross VLANs by itself**: an mDNS reflector/proxy scoped to167 the specific services is required. Opening the reflector "for everything" cancels out the segmentation.168- **Isolated guest Wi-Fi** and **a different PSK for the IoT SSID**. A compromised device169 must not be able to see the NAS.170- **Remote access: never by opening ports.** VPN (WireGuard/Tailscale) or outbound tunnel. **FORBIDDEN171 to publish the controller's interface on the internet**, with or without a password.172- **Blocked egress is also the mitigation for the abandoned device** (§7.2): when the173 vendor stops patching, the device will keep working locally and can neither be reached nor174 phone home.175176### 3.3 Robust versus fragile automations177178The difference between a house that helps and one that punishes:179180- **Trigger on state, not on event.** An event is lost if the platform was restarting; the181 state gets re-evaluated. Rule: **the goal of an automation is that the world ends up in the182 desired state**, not that an action is executed. After a restart, the system must converge.183- **Idempotence**: running the automation twice produces the same result. "Toggling"184 (*toggle*) is the antipattern: if an event is lost, the state stays inverted forever.185- **Explicit conditions for human override.** If somebody turned the light on by hand, the186 automation does **not** turn it off five minutes later. A presence sensor with a timer that187 ignores the manual action is the number one reason people uninstall home automation.188- **No values coupled to the clock time** when what matters is the light or the presence:189 use the sensor, not the time.190- **Test sensor failure**: what does the automation do if the presence sensor has gone 6 hours191 without reporting because its battery ran out? The right answer is almost never "assume there is192 nobody there".193- **One change, one automation.** Several automations writing to the same entity194 produce oscillations that nobody diagnoses. If there are two, there is a third that arbitrates.195196### 3.4 The household failure that does matter197198It is not the light that does not turn on. It is this, and each one carries a design barrier:199200| Failure | Mandatory barrier |201|---|---|202| **Somebody locked in or out** | A lock with a **working physical key** always. Never an automation that throws the bolt without a verified presence condition. Manual opening from inside, without electricity |203| **In the dark** | Emergency lighting or at least one light per floor outside automatic control. Never "turn everything off" without exceptions for an occupied room |204| **No heating / no cooling** | The thermostat keeps its own logic and its limits; the controller **suggests**, it does not govern. **Minimum anti-freeze floor** and maximum ceiling, enforced in the thermostat, not in the automation |205| **Pump, irrigation or valve stuck open** | Safety timer **in the device**, not in the software. Flow meter or cut-off by maximum time |206| **Alarm / smoke / CO** | **Certified standalone detectors, mains- or battery-powered**, independent of the home automation. Home automation **notifies**; it is not the detection system |207| **Power cut** | The state after power is restored is **decided**: each relay configured to "last state" or "on" according to the load. A freezer behind a socket that starts up off is an expensive failure |208209## 4. Quality and testing210211Scaled to what it is —a house, not a bank—, but these five are not skipped:2122131. **Configuration validation before reloading** (`hass --script check_config` or equivalent) and214 a YAML linter. A badly indented YAML leaves the system unable to start.2152. **Manual test of every new automation, including the error path**, before calling it216 good. And **a restart test**: reload the platform and check that the state converges.2173. **Test instance** for big changes (major update, change of Zigbee218 integration, coordinator migration). With Home Assistant it is a backup restored into a VM: cheap and219 it saves you the lost weekend.2204. **Restore tested, not just backup taken** (§7.1). A backup that has not been restored does not exist →221 `backup-recovery-standards`.2225. **Review of the release notes before each major update**, looking specifically for223 the incompatible changes section and the integrations you use.224225## 5. Security and privacy226227### 5.1 The house as attack surface228229- **Segmentation (§3.2) first**; it is what keeps working when everything else fails.230- **Credentials**: a unique password per service, **MFA enabled on the controller**, and **separate231 accounts per person** — not one shared "house" account. Guests do not get the232 administrator's.233- **No ports open to the internet.** Neither the controller, nor the camera, nor the NVR, nor "just234 8123 with a good password".235- **Third-party integrations (HACS and equivalents) are unreviewed code running with the236 controller's permissions.** Install the minimum, from repositories with activity and with the237 licence read; keep them updated; and remove them when the author abandons them. It is a supply chain,238 even if it is your house's.239- **Updates**: controller and bridges (Zigbee2MQTT, ESPHome) up to date; device firmware240 too, **but one at a time and with the ability to roll back**, because a bad firmware can241 leave a device useless and many do not allow a *downgrade*.242243### 5.2 Cameras, microphones and presence244245This is the part of home automation that handles intimate data of people who **have signed nothing**:246housemates, minors, visitors, domestic staff.247248- **Cameras: local recording (NVR/HA), no cloud by default.** If the model requires the cloud to work,249 it does not come in. Short and explicit retention.250- **No camera or microphone in bedrooms or bathrooms.** It is not a recommendation: it is the limit.251- **Consent and information for those who live there and those who visit.** And if a camera captures the public252 road or a common area, **it stops being a domestic matter** and enters legal obligations →253 `physical-security-standards`, `privacy-engineering-standards`.254- **Voice assistants: local whenever possible** (local voice processing, or your own model →255 `local-inference-standards`). If it is cloud-based, explicitly accept that **the audio of your living room256 leaves the house**, and place it where that is acceptable.257- **Presence detection is a record of a life**: who is at home, at what time, in which258 room. Keep the minimum and with bounded retention; **the infinite presence history is the most259 sensitive database in the house** and almost nobody treats it as such.260- **Vendor cloud accounts**: before creating one, the question is what it takes with it. If the vendor261 disappears, the account takes the device with it — another reason to demand local control.262263## 6. Performance and operability264265### 6.1 Latency and perceived reliability266267**The bar is the wall switch: under ~200 ms from the press to the light, or268people go back to the switch.** A physical remote that goes through Zigbee → bridge → MQTT → automation →269Zigbee and on top of that goes out to the cloud does not make it. **Direct binding** (Zigbee *binding*, Z-Wave270association) between remote and light wherever it exists: it works even with the controller switched off, which is271precisely the requirement of §1.272273### 6.2 Radio274275- **Zigbee channel chosen so as not to overlap with the 2.4 GHz Wi-Fi channel**, and documented. This single276 setting resolves most of the "sometimes it does not respond".277- **Zigbee coordinator kept away from the computer with a USB extension cable** and away from USB 3.0 and power278 supplies: USB 3 interference on 2.4 GHz is real and baffles people for months.279- **The mesh is held up by the mains-powered devices**, not the battery ones. A house with only battery280 sensors does not have a mesh, it has a star with bad range.281- **Record of the coordinator and its firmware**, and **a backup of the Zigbee/Z-Wave network** (network keys): without282 it, changing coordinator means pairing every device again, one by one, up a283 ladder.284285### 6.3 Proportionate monitoring286287What has to be monitored in a house is short and concrete:288289- **Low battery** on each sensor, with a threshold and a warning with lead time.290- **A device that has gone N hours without reporting** — that is the warning of a dead sensor, and without it the291 automation keeps "working" with yesterday's data.292- **Controller down** (warning from outside the controller itself; if it warns itself, it does not warn).293- **Power cuts and UPS status** → `homelab-standards`.294- **The most recent backup and its age.**295- Everything else is optional. A panel with 200 graphs at home is a hobby, not observability.296297## 7. Long-term sustainability298299### 7.1 Backup and rebuild300301The question that orders this section: **if the controller's disk dies today, how long until you have302the house working again?** If the answer is "a weekend", the design has failed.303304- **Automatic and periodic backup**, **off the machine itself** (domestic 3-2-1: local + NAS + off-305 site, encrypted) → `backup-recovery-standards`.306- **Include what is not in the YAML**: the database if you care about the history, Zigbee/Z-Wave307 network keys, `secrets.yaml`, ESPHome configurations, Node-RED *flows*, and the device308 inventory.309- **Restore tested at least once a year** in a VM. It is the only way to know whether the backup310 is any good.311- **One-page rebuild document**: what hardware, what gets installed, in what order, where312 the keys are. Written for somebody who is not you —including the case where you are not around—.313314### 7.2 The device the vendor abandons315316It always happens, and the plan is made before buying, not afterwards:317318- **Purchase criteria**: does it work without the cloud? can it be integrated locally? is it reflashable319 (ESPHome/Tasmota)? is there a community? A device that fails all four is rented, not bought.320- **When the vendor abandons it**, in this order: (a) reflash with free firmware if the321 hardware allows it; (b) keep it **with no internet egress** and controlled locally; (c)322 replace it. **What is not done is leaving it plugged in, with unpatched firmware and with access to323 the internet.**324- **Segmentation with blocked egress (§3.2) is what turns (b) into a defensible option**, and325 that is why it is set up from the start, not when the bad news arrives.326327### 7.3 Prohibitions328329- ❌ **FORBIDDEN** to remove or disable the manual control of any load.330- ❌ **FORBIDDEN** for a basic household function (light, lock, climate) to depend on the internet or on331 a vendor's cloud.332- ❌ **FORBIDDEN** IoT devices on the same VLAN as computers, NAS or phones.333- ❌ **FORBIDDEN** to expose the controller, a camera or an NVR directly to the internet, with or without a334 password; remote access goes over VPN or a tunnel.335- ❌ **FORBIDDEN** to allow internet egress by default from the IoT VLAN.336- ❌ **FORBIDDEN** proprietary 433 MHz RF with a fixed code on locks, garages or alarms.337- ❌ **FORBIDDEN** cameras or microphones in bedrooms and bathrooms; and forbidden to install them without informing338 those who live there.339- ❌ **FORBIDDEN** to keep presence history without a defined retention.340- ❌ **FORBIDDEN** to update the platform without reading the incompatible changes and without a recent backup.341- ❌ **FORBIDDEN** to update the firmware of several devices at once.342- ❌ **FORBIDDEN** automations based on *toggle* or on non-re-evaluable events.343- ❌ **FORBIDDEN** an automation that throws the bolt, turns off all the lights or cuts the heating344 without a presence condition and without a safety limit in the device itself.345- ❌ **FORBIDDEN** to entrust smoke, CO or intrusion detection to home automation: certified standalone346 detectors, and home automation only notifies.347- ❌ **FORBIDDEN** to leave on the network a device abandoned by its vendor with internet egress.348- ❌ **FORBIDDEN** a configuration that is not in Git, and forbidden `secrets.yaml` inside the349 repository.350- ❌ **FORBIDDEN** to accept a backup that has never been restored.351- ❌ **FORBIDDEN** to buy on the "Matter" label without checking that **that** device works352 with **your** controller today (§2.3).353354## 8. Mandatory web verification355356- **Home Assistant**: current version and its **incompatible changes** (as of Aug 2026, **2026.8**, of357 5-Aug-2026; monthly majors and weekly patches on Fridays). Developer blog for358 announced deprecations. **Current installation methods and their naming**, which have changed:359 as of Aug 2026 the official page presents **OS** and **Container**, and warns that Container **does not have360 access to apps**, which affects **Thread and Z-Wave**.361- **Licences read raw** (`LICENSE`, `LICENSE.md`, `COPYING`; watch out for `master` versus `main`).362 Verified for this document: Home Assistant **Apache-2.0**, openHAB core **EPL-2.0**, Node-RED363 **Apache-2.0**, Zigbee2MQTT **GPL-3.0**, and **ESPHome with a dual licence by file extension**364 (MIT + GPLv3 for the C++/runtime code) — if you are going to redistribute anything derived, that is the one you365 have to read in full.366- **Matter**: version of the specification published by the CSA (as of Aug 2026, **1.6** available alongside367 1.5.1, 1.5 and the 1.4 series) **and, separately, which version your controller implements**. They are not368 the same and that difference is the source of the smoke.369- **Thread**: current version of the specification (as of Aug 2026, **1.4.1**) and compatibility of your370 *border routers*.371- **Zigbee**: core revision (as of Aug 2026 the CSA publishes **R23.2**) and recommended firmware for your372 coordinator.373- **Zigbee2MQTT / ESPHome**: current version (Zigbee2MQTT **2.13.0**, 1-Aug-2026) and compatibility with374 the Home Assistant version before updating either of the two.375- **End of support for devices and vendor services**: actively search whether the vendor has376 announced a service shutdown or end of firmware, **before** buying and **at least once a year**377 afterwards.378- **CVEs** of the controller, of the bridges and of the device models installed →379 `vulnerability-management-standards`.380381If the web contradicts this document, **the web wins** — flag the discrepancy.