Zigbee is an IEEE 802.15.4-based specification for a suite of high-level communication protocols used to create personal area networks with small, low-power digital radios. It is widely used for home automation, smart lighting, sensors, and other low-power low-bandwidth wireless applications.
The Weble universal gateway Zigbee driver integrates zigbee2mqtt — an open-source Zigbee to MQTT bridge — directly into the gateway. It runs a built-in MQTT broker, starts zigbee2mqtt as a background process, and automatically maps all discovered Zigbee devices and their properties to routable gateway addresses.
The driver provides two interfaces:
A Zigbee coordinator (USB dongle) must be connected to the gateway. The coordinator must be compatible with zigbee2mqtt supported adapters. Common adapter types include:
Create a new gateway and select the Zigbee driver. Configure the Serial Port to point to the connected Zigbee coordinator:
/dev/ttyACM0).Set the Adapter type to match your coordinator hardware, or leave it on Auto for automatic detection.
When the gateway is started, the driver:
28522 (internal, not exposed externally)./zigbee path on the gateway's web server.Once started, the zigbee2mqtt interface is accessible from the UI tab in the gateway view.
To pair a new Zigbee device, use the zigbee2mqtt interface in the UI tab:
After a device is paired, the gateway automatically creates addresses for the device and all its exposed properties. For example, a temperature/humidity sensor named LivingRoom would generate:
%zig:LivingRoom — the main device address (receives the full JSON payload with all properties)%zig:LivingRoom/temperature — individual temperature value%zig:LivingRoom/humidity — individual humidity value%zig:LivingRoom/battery — battery level%zig:LivingRoom/set — writable address (for devices that support commands)%zig:LivingRoom/get — readable address (to request current values)These addresses are routable and loggable like any other gateway address. They can be used in routes to forward Zigbee sensor data to other protocols such as BACnet, Modbus, MQTT, or the cloud.
Note: Addresses are automatically created when devices are discovered. Manual address insertion is not available. However, addresses can be manually deleted if a device has been removed from the network.
| Label | JSON Key | Description |
|---|---|---|
| Name | name | A descriptive name for this Zigbee gateway instance. |
| Cluster ID | cluster | Cluster identifier (integer). Use 0 for single-gateway setups. |
| Description | description | Optional description for this gateway. |
| Serial Port | serialPort | The serial port of the Zigbee coordinator. Use the auto-complete to select from detected USB/serial interfaces. Can be set by unique ID (recommended, stays stable across reboots and USB port changes) or by system path (e.g. /dev/ttyACM0). |
| Adapter | adapter | The Zigbee coordinator adapter type: Auto (automatic detection), zstack (Texas Instruments CC26xx/CC13xx), deconz (Dresden Elektronik ConBee/RaspBee), or ezsp (Silicon Labs EFR32/EM35x). Leave on Auto unless detection fails. |
| Baudrate | baudrate | Serial communication speed: Auto (recommended), 9600, 19200, 38400, 57600, 76800, or 115200. Most adapters work with Auto. |
| rtscts | rtscts | Enable RTS/CTS hardware flow control on the serial port. Required by some adapters. Default: disabled. |
{
"serialPort": "/dev/serial/by-id/usb-Texas_Instruments_XDS110-if00",
"adapter": "",
"baudrate": "",
"rtscts": false
}
Zigbee addresses use the prefix %zig: followed by the device friendly name and optionally a property path:
%zig:LivingRoom — main device address (full JSON payload)%zig:LivingRoom/temperature — published property (pushed by the device)%zig:LivingRoom/set — set endpoint (send commands to the device)%zig:LivingRoom/set/brightness — set a specific property%zig:LivingRoom/get — get endpoint (request values from the device)%zig:LivingRoom/get/temperature — request a specific property valueThe address names are derived from the friendly name configured in zigbee2mqtt. Renaming a device in the zigbee2mqtt UI will update the address names accordingly.
In addition to device addresses, the driver automatically creates bridge management addresses for controlling zigbee2mqtt itself:
| Address | Description |
|---|---|
%zig:bridge/state |
Bridge connection state (online / offline). |
%zig:bridge/devices |
JSON list of all paired Zigbee devices with their properties and capabilities. |
%zig:bridge/info |
Bridge information (version, coordinator type, network settings). |
%zig:bridge/request/permit_join |
Write to enable/disable device pairing. |
%zig:bridge/request/restart |
Write to restart zigbee2mqtt. |
%zig:bridge/request/health_check |
Request a health check. |
%zig:bridge/request/networkmap |
Request a network map. |
%zig:bridge/request/backup |
Request a coordinator backup. |
%zig:bridge/request/device/remove |
Remove a device from the network. |
%zig:bridge/request/device/rename |
Rename a device. |
%zig:bridge/request/device/ota_update/check |
Check for OTA firmware updates. |
%zig:bridge/request/device/ota_update/update |
Apply an OTA firmware update. |
%zig:bridge/request/group/add |
Create a Zigbee group. |
%zig:bridge/request/group/remove |
Remove a Zigbee group. |
%zig:bridge/request/group/members/add |
Add a device to a group. |
%zig:bridge/request/group/members/remove |
Remove a device from a group. |
When a Zigbee device is discovered, the driver inspects each property's access level (from the zigbee2mqtt device definition) and creates the appropriate addresses:
| Access | Description | Address created |
|---|---|---|
| Published | The device pushes this value automatically (e.g. sensor readings) | %zig:device/property |
| Settable | The value can be written to the device (e.g. brightness, on/off) | %zig:device/set/property |
| Gettable | The value can be explicitly requested from the device | %zig:device/get/property |
A property can have multiple access levels (e.g. a light's brightness is both published and settable).
Reading a device property address (%zig:device/property) returns the last known value. If the address has a corresponding get endpoint, the driver reads via the get MQTT topic to request a fresh value from the device.
Writing to a device address (%zig:device/property) automatically routes the write to the corresponding set MQTT topic if one exists. If no set endpoint is available, the write returns a "read only" error.
| Property | Value |
|---|---|
| Readable | No (values are pushed by the device, not polled) |
| Writable | Yes (for settable properties) |
| Routable | Yes |
| Loggable | Yes |
The Zigbee driver uses the following internal architecture:
28522 (TCP, localhost only).%zig: prefix (internally translated from %mqtt:zigbee2mqtt/ topics)./zigbee path.The driver automatically backs up and restores the zigbee2mqtt configuration files:
configuration.yaml — zigbee2mqtt settings and device friendly namescoordinator_backup.json — coordinator network state backupdatabase.db — device databaseThese files are backed up from the zigbee2mqtt data directory to the gateway's data directory, and restored on startup (the most recent version is always used). File changes are automatically watched and backed up.
The driver updates the serial section of zigbee2mqtt's configuration.yaml at each startup with the configured serial port, adapter, baudrate, and rtscts parameters. This ensures the gateway's configuration always takes precedence over any manual changes in the zigbee2mqtt configuration file.