We are actively developing a lightweight, modular external radio gateway architecture for Home Assistant and would welcome feedback from people working with ZHA/zigpy, Zigbee2MQTT, Thread/OpenThread Border Router and Matter.
The project started from a redundancy problem: when a Zigbee coordinator is physically attached to a Home Assistant VM host, failure or maintenance of that host can also remove access to the Zigbee network.
Our aim is to separate the radio/device edge from the Home Assistant compute layer while continuing to use established Home Assistant and open-source technologies rather than replacing them.
Initial implementation
The first profile is deliberately simple:
Zigbee coordinator → dedicated Linux gateway → ser2net → wired LAN → Home Assistant ZHA
Home Assistant accesses the coordinator through a stable network endpoint.
Only one ZHA instance is allowed to own the coordinator at any time.
The gateway can initially run in a small Debian-compatible environment such as an LXC or Raspberry Pi/SBC.
We are specifically designing the core to have very low resource requirements. The JNS management component does not need to remain resident as a permanent daemon; profile application and health checks can run as oneshot/event-driven tasks while only the selected protocol service remains running.
One codebase, selectable modules
Rather than creating independent projects for every radio technology, the gateway has a small common core and selectable profiles.
Current/planned profiles are:
-
zigbee_serial— ZHA through ser2net -
zigbee2mqtt— dedicated Zigbee2MQTT gateway -
thread_otbr— OpenThread Border Router -
matter_thread_edge— Thread/Matter integration helpers -
maintenance -
disabled
A major design rule is that unused functionality should not simply be disabled — it should not be installed or loaded unless the selected profile requires it.
For example, a zigbee_serial gateway should not be carrying a dormant Zigbee2MQTT, OTBR or Matter stack.
This is intended to keep CPU, RAM, storage use, maintenance burden and attack surface small.
Zigbee2MQTT
A future Zigbee2MQTT profile will use the same gateway platform but Zigbee2MQTT will own the locally connected coordinator directly.
We do not intend to leave ser2net unnecessarily between Zigbee2MQTT and a coordinator attached to the same gateway.
The purpose of the profile abstraction is to allow deployments to evolve without replacing the whole gateway management architecture.
Thread and Matter
We are deliberately treating Thread and Matter as different layers.
Thread is the IPv6 mesh/radio network and will use an established OpenThread Border Router implementation with a dedicated Thread radio.
Matter is treated as an application protocol operating over IP, including Matter-over-Thread.
We currently favour dedicated Zigbee and Thread radios rather than building the architecture around simultaneous multiprotocol use of a single radio.
This also allows multiple Thread Border Routers to be deployed later where useful for coverage and resilience.
Moving the radio away from virtualization hosts
A later stage will move the Zigbee coordinator onto a dedicated wired Raspberry Pi/SBC.
The resulting topology is approximately:
Zigbee devices
|
Zigbee coordinator
|
JNS IoT Gateway
Raspberry Pi/SBC
|
wired LAN
|
stable gateway address
|
+---------+---------+
| |
Home Assistant A Home Assistant B
The objective is that a virtualization host failure does not also remove the physical radio.
Home Assistant continues to use the same logical coordinator endpoint regardless of which HA instance is operating.
Future redundant coordinator research
When additional hardware is available, we also intend to investigate two matched Raspberry Pi/SBC gateway nodes with compatible Zigbee coordinators.
This would be active/passive, never two active Zigbee coordinators controlling the same network.
Conceptually:
Gateway A + coordinator A
ACTIVE
|
Zigbee
|
logical endpoint
|
Home Assistant
Gateway B + coordinator B
STANDBY
FENCED
The standby would contain compatible gateway configuration and validated recovery information, but its coordinator would remain inactive.
The areas we intend to test include:
-
coordinator/network backup compatibility;
-
recovery onto a replacement coordinator;
-
matched coordinator hardware/firmware;
-
stable virtual service addressing;
-
coordinator identity handling;
-
device rejoin behaviour;
-
recovery following Raspberry Pi failure;
-
recovery following USB coordinator failure;
-
strict prevention of simultaneous coordinator ownership.
We are deliberately treating this as a future experimental stage until we have the hardware available and can repeatedly prove the recovery procedure.
Network syslog and observability
Each gateway also supports lightweight structured network syslog.
Syslog is intended for operational, security, audit and health events such as:
-
gateway/profile start and stop;
-
radio detected/missing;
-
module failure;
-
health degradation/recovery;
-
configuration validation;
-
coordinator ownership changes;
-
update/recovery events.
We intentionally do not intend to push high-frequency Zigbee/Thread/Matter device telemetry into syslog.
A failed logging server must not interfere with the radio service, so failed messages use a small bounded local retry queue.
Upstream-first approach
This project is intended to integrate existing projects rather than duplicate them.
Where appropriate we plan to use and work with:
-
Home Assistant ZHA/zigpy
-
Zigbee2MQTT
-
OpenThread Border Router
-
existing Home Assistant Matter support
-
MQTT
-
standard IPv6/mDNS behaviour
-
RFC 5424-compatible syslog
If development identifies generally useful fixes, interoperability improvements or documentation changes, we would prefer to contribute those improvements upstream where practical.
Public/open versus private infrastructure
We have deliberately separated the public gateway work from our private resilience and infrastructure control plane.
The following areas are public and open for discussion/development:
-
gateway architecture;
-
profiles and module interfaces;
-
ZHA/ser2net interoperability;
-
Zigbee2MQTT integration;
-
OTBR/Thread integration;
-
Matter interoperability;
-
radio identification;
-
resource-efficiency work;
-
generic recovery compatibility;
-
health interfaces;
-
syslog;
-
failure/recovery testing methodology.
Our private infrastructure layer is responsible for some wider deployment and resilience functions.
We will describe externally important guarantees — for example:
Only one Zigbee coordinator owner may be active before a standby is promoted.
However, the security-sensitive implementation of the private orchestration, authorization, cryptographic distribution and rollback systems is intentionally outside the scope of the public gateway project.
This separation is also intended to prevent the gateway becoming dependent on our private infrastructure: its public protocol modules should remain useful with standard Home Assistant technologies.
Current status
Already implemented:
-
common lightweight gateway core;
-
profile architecture;
-
zigbee_serialprofile; -
ser2net coordinator configuration;
-
persistent
/dev/serial/by-id/...device binding; -
single-client/no-preemption policy;
-
maintenance and disabled profiles;
-
network syslog over UDP/TCP/TLS;
-
bounded syslog retry;
-
low-frequency health checks;
-
future Zigbee2MQTT, Thread and Matter profile definitions.
Next hardware-testing stages:
-
Commission the existing Zigbee coordinator through the gateway.
-
Validate ZHA operation over a wired network.
-
Test Home Assistant instance handover while keeping the same coordinator.
-
Move the coordinator onto a dedicated Raspberry Pi/SBC.
-
Develop and test the Zigbee2MQTT profile.
-
Develop the Thread/OTBR profile.
-
Validate Matter-over-Thread operation.
-
When additional hardware is available, test controlled recovery onto a second matched Zigbee coordinator.
Feedback we would particularly value
We would be interested in feedback on:
-
assumptions about ZHA/zigpy coordinator migration or recovery that we should avoid;
-
whether there are existing upstream projects solving parts of this that we should reuse;
-
best practices for a wired ser2net/ZHA deployment;
-
coordinator families best suited to repeatable replacement/restore testing;
-
how best to expose gateway health without coupling it unnecessarily to Home Assistant;
-
OTBR deployment considerations for multiple independent border routers;
-
Matter/Thread architectural assumptions we should account for;
-
anything in this design that conflicts with planned Home Assistant architecture.
The public roadmap and the project’s publication boundary are available in the JNS Home Assistant Deployment repository.
The intention is to develop this openly where it can benefit the wider ecosystem while keeping unrelated security-sensitive infrastructure implementation separate.
