zigbee2mqtt
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseZigbee2MQTT
Zigbee2MQTT
Zigbee2MQTT bridges Zigbee devices to MQTT, enabling integration with Home Assistant, Node-RED, and custom applications without proprietary hubs.
Zigbee2MQTT可将Zigbee设备桥接到MQTT,无需专有集线器即可与Home Assistant、Node-RED及自定义应用集成。
Architecture Overview
架构概述
Zigbee Devices → [Adapter] → zigbee-herdsman → zigbee-herdsman-converters → zigbee2mqtt → MQTT Broker → Home Assistant/AppsThree-layer stack:
- zigbee-herdsman: Hardware abstraction, Zigbee protocol handling
- zigbee-herdsman-converters: Device definitions, cluster-to-MQTT mapping
- zigbee2mqtt: Bridge application, state management, web UI
Zigbee Devices → [Adapter] → zigbee-herdsman → zigbee-herdsman-converters → zigbee2mqtt → MQTT Broker → Home Assistant/Apps三层架构栈:
- zigbee-herdsman:硬件抽象、Zigbee协议处理
- zigbee-herdsman-converters:设备定义、集群到MQTT的映射
- zigbee2mqtt:桥接应用、状态管理、Web UI
Configuration
配置
Configuration lives in . Key sections:
data/configuration.yamlyaml
undefined配置文件位于中。关键配置部分如下:
data/configuration.yamlyaml
undefinedMQTT connection
MQTT连接
mqtt:
server: mqtt://localhost:1883
base_topic: zigbee2mqtt
user: mqtt_user
password: mqtt_pass
mqtt:
server: mqtt://localhost:1883
base_topic: zigbee2mqtt
user: mqtt_user
password: mqtt_pass
Zigbee adapter
Zigbee适配器
serial:
port: /dev/ttyUSB0
adapter: zstack # auto-detected usually
serial:
port: /dev/ttyUSB0
adapter: zstack # 通常会自动检测
Network settings
网络设置
advanced:
channel: 11 # 11-26, avoid WiFi overlap
network_key: GENERATE # auto-generates secure key
pan_id: GENERATE
advanced:
channel: 11 # 11-26,避免与WiFi重叠
network_key: GENERATE # 自动生成安全密钥
pan_id: GENERATE
Web UI
Web UI
frontend:
port: 8080
frontend:
port: 8080
Device tracking
设备追踪
availability: true
**Per-device config** in `devices.yaml`:
```yaml
'0x00158d0001234567':
friendly_name: living_room_sensor
retain: trueGroups in :
groups.yamlyaml
'1':
friendly_name: all_lights
devices:
- bulb_1
- bulb_2availability: true
**单设备配置**在`devices.yaml`中:
```yaml
'0x00158d0001234567':
friendly_name: living_room_sensor
retain: true群组配置在中:
groups.yamlyaml
'1':
friendly_name: all_lights
devices:
- bulb_1
- bulb_2MQTT Topics
MQTT主题
Device Communication
设备通信
| Topic | Direction | Purpose |
|---|---|---|
| Subscribe | Device state |
| Publish | Control device |
| Publish | Request state |
| Subscribe | Online/offline |
Control examples:
json
// Turn on light with brightness
{"state": "ON", "brightness": 200}
// Set color temperature
{"color_temp": 350}
// RGB color
{"color": {"r": 255, "g": 100, "b": 50}}| 主题 | 方向 | 用途 |
|---|---|---|
| 订阅 | 设备状态 |
| 发布 | 控制设备 |
| 发布 | 请求状态 |
| 订阅 | 在线/离线状态 |
控制示例:
json
// 打开灯光并设置亮度
{"state": "ON", "brightness": 200}
// 设置色温
{"color_temp": 350}
// RGB颜色
{"color": {"r": 255, "g": 100, "b": 50}}Bridge Management
桥接管理
| Topic | Purpose |
|---|---|
| Bridge online status |
| Version, coordinator info |
| All paired devices |
| Join/leave events |
Request/response pattern:
Publish to: zigbee2mqtt/bridge/request/{command}
Subscribe to: zigbee2mqtt/bridge/response/{command}Common commands:
- - Enable pairing:
permit_join{"value": true, "time": 120} - - Remove device:
remove{"id": "0x00158d..."} - - Rename device:
rename{"from": "old", "to": "new"} - - Restart bridge
restart
| 主题 | 用途 |
|---|---|
| 桥接在线状态 |
| 版本、协调器信息 |
| 所有已配对设备 |
| 加入/离开事件 |
请求/响应模式:
发布至: zigbee2mqtt/bridge/request/{command}
订阅至: zigbee2mqtt/bridge/response/{command}常用命令:
- - 启用配对:
permit_join{"value": true, "time": 120} - - 移除设备:
remove{"id": "0x00158d..."} - - 重命名设备:
rename{"from": "old", "to": "new"} - - 重启桥接
restart
Adding Device Support
添加设备支持
Quick: External Converter
快速方案:外部转换器
For testing without modifying source, create :
data/external_converters/my_device.jsjavascript
const {deviceEndpoints, onOff} = require('zigbee-herdsman-converters/lib/modernExtend');
const definition = {
zigbeeModel: ['TS0001'],
model: 'TS0001',
vendor: 'TuYa',
description: 'Smart switch',
extend: [onOff()],
};
module.exports = definition;Enable in :
configuration.yamlyaml
external_converters:
- my_device.js无需修改源码即可测试,创建:
data/external_converters/my_device.jsjavascript
const {deviceEndpoints, onOff} = require('zigbee-herdsman-converters/lib/modernExtend');
const definition = {
zigbeeModel: ['TS0001'],
model: 'TS0001',
vendor: 'TuYa',
description: 'Smart switch',
extend: [onOff()],
};
module.exports = definition;在中启用:
configuration.yamlyaml
external_converters:
- my_device.jsFull: Contribute to zigbee-herdsman-converters
完整方案:贡献至zigbee-herdsman-converters
- Identify device - Pair and check logs for , clusters
zigbeeModel - Find vendor file -
src/devices/<vendor>.ts - Add definition:
typescript
{
zigbeeModel: ['lumi.sensor_motion.aq2'],
model: 'RTCGQ11LM',
vendor: 'Aqara',
description: 'Motion sensor',
fromZigbee: [fz.occupancy, fz.battery, fz.illuminance],
toZigbee: [],
exposes: [e.occupancy(), e.battery(), e.illuminance()],
}Key components:
- : Converters for device → MQTT
fromZigbee - : Converters for MQTT → device
toZigbee - : Capabilities exposed to Home Assistant
exposes
- 识别设备 - 配对设备并查看日志获取、集群信息
zigbeeModel - 找到厂商文件 -
src/devices/<vendor>.ts - 添加定义:
typescript
{
zigbeeModel: ['lumi.sensor_motion.aq2'],
model: 'RTCGQ11LM',
vendor: 'Aqara',
description: 'Motion sensor',
fromZigbee: [fz.occupancy, fz.battery, fz.illuminance],
toZigbee: [],
exposes: [e.occupancy(), e.battery(), e.illuminance()],
}核心组件:
- :设备到MQTT的转换器
fromZigbee - :MQTT到设备的转换器
toZigbee - :向Home Assistant暴露的设备能力
exposes
Modern Extend Pattern
现代扩展模式
Prefer for common device types:
extendtypescript
{
zigbeeModel: ['TRADFRI bulb E27 WS opal 980lm'],
model: 'LED1545G12',
vendor: 'IKEA',
description: 'TRADFRI bulb E27 WS opal 980lm',
extend: [light({colorTemp: {range: [250, 454]}})],
}对于常见设备类型,优先使用:
extendtypescript
{
zigbeeModel: ['TRADFRI bulb E27 WS opal 980lm'],
model: 'LED1545G12',
vendor: 'IKEA',
description: 'TRADFRI bulb E27 WS opal 980lm',
extend: [light({colorTemp: {range: [250, 454]}})],
}Debugging
调试
Enable Debug Logging
启用调试日志
yaml
advanced:
log_level: debug
log_namespaced_levels:
z2m:mqtt: warning # Reduce MQTT noise
zh:zstack: debug # Adapter-level debugLog namespaces:
- - zigbee2mqtt core
z2m:* - - zigbee-herdsman (protocol)
zh:* - - zigbee-herdsman-converters
zhc:*
yaml
advanced:
log_level: debug
log_namespaced_levels:
z2m:mqtt: warning # 减少MQTT日志噪音
zh:zstack: debug # 适配器级调试日志命名空间:
- - zigbee2mqtt核心
z2m:* - - zigbee-herdsman(协议层)
zh:* - - zigbee-herdsman-converters
zhc:*
Common Issues
常见问题
Device won't pair:
- Verify enabled
permit_join - Check adapter connection:
ls -la /dev/ttyUSB* - Use USB extension cable (reduces interference)
- Try different channel (avoid 11 if using 2.4GHz WiFi)
Device offline:
- Check config
availability - Verify device battery / power
- Look for timestamp
last_seen - Check for Zigbee mesh issues (weak routing)
Adapter disconnects:
bash
dmesg | grep -i usb # Check kernel logs
journalctl -u zigbee2mqtt -f # Service logs设备无法配对:
- 确认已启用
permit_join - 检查适配器连接:
ls -la /dev/ttyUSB* - 使用USB延长线(减少干扰)
- 尝试更换信道(若使用2.4GHz WiFi,避免信道11)
设备离线:
- 检查配置
availability - 确认设备电池/供电情况
- 查看时间戳
last_seen - 检查Zigbee mesh网络问题(路由信号弱)
适配器断开连接:
bash
dmesg | grep -i usb # 查看内核日志
journalctl -u zigbee2mqtt -f # 查看服务日志Development Setup
开发环境搭建
bash
git clone https://github.com/Koenkk/zigbee2mqtt
cd zigbee2mqtt
pnpm install --frozen-lockfile
pnpm run build # Compile TypeScriptbash
git clone https://github.com/Koenkk/zigbee2mqtt
cd zigbee2mqtt
pnpm install --frozen-lockfile
pnpm run build # 编译TypeScriptRun
运行
node index.js
**Code structure:**
- `lib/` - TypeScript source (main application)
- `lib/extension/` - Extension system (OTA, groups, etc.)
- `lib/mqtt/` - MQTT handling
- `data/` - Configuration, database
**Testing:**
```bash
pnpm test
pnpm run lintnode index.js
**代码结构:**
- `lib/` - TypeScript源码(主应用)
- `lib/extension/` - 扩展系统(OTA、群组等)
- `lib/mqtt/` - MQTT处理模块
- `data/` - 配置文件、数据库
**测试:**
```bash
pnpm test
pnpm run lintOTA Updates
OTA更新
Enable firmware updates:
yaml
ota:
update_check_interval: 1440 # minutes
disable_automatic_update_check: falseCheck/trigger via MQTT:
zigbee2mqtt/bridge/request/device/ota_update/check
{"id": "device_name"}启用固件更新:
yaml
ota:
update_check_interval: 1440 # 分钟
disable_automatic_update_check: false通过MQTT检查/触发更新:
zigbee2mqtt/bridge/request/device/ota_update/check
{"id": "device_name"}Home Assistant Integration
Home Assistant集成
Automatic discovery via MQTT. Ensure:
yaml
homeassistant: trueDevices appear automatically. Override discovery:
yaml
'0x00158d0001234567':
friendly_name: motion_sensor
homeassistant:
occupancy:
device_class: motion
name: "Living Room Motion"通过MQTT自动发现。确保配置:
yaml
homeassistant: true设备会自动显示。可覆盖发现配置:
yaml
'0x00158d0001234567':
friendly_name: motion_sensor
homeassistant:
occupancy:
device_class: motion
name: "Living Room Motion"Reference
参考资料
- Configuration options - Complete settings reference
- MQTT API - Full topic and payload documentation
- Converter patterns - Device definition examples
- 配置选项 - 完整设置参考
- MQTT API - 完整主题与负载文档
- 转换器模式 - 设备定义示例