先决条件
要使用Zigbee2MQTT,我们需要以下硬件设备:
- ZZHA Zigbee 适配器,它是计算机(或服务器)与 Zigbee 无线通信之间的接口。Zigbee2MQTT 支持多种不同类型连接的适配器,如 USB、GPIO 或通过 Wi-Fi 或以太网远程连接的适配器。建议选择以 CC2652 或 CC1352 开头的芯片的适配器。请参阅支持的适配器列表。在安装过程之前,建议查看适配器的推荐详情,以了解是否需要任何额外的配置参数。
- Raspberry Pi,这是运行 Zigbee2MQTT 的服务器。大多数 Raspberry Pi 型号都可以运行,但你也可以在许多计算机和平台上运行它,包括 Linux、Windows 和 MacOS。服务器上应安装有 MQTT 代理。Mosquitto(Raspberry Pi 的教程)是推荐的 MQTT 代理,但其他代理也应该可以正常工作。
- Zigbee 设备,将与 Zigbee2MQTT 配对的一个或多个 Zigbee 设备。
提示
- USB 数据线:为了改善网络范围和稳定性,请使用 USB 扩展线缆。如果你在使用设备时遇到任何问题(如超时、无法配对、设备不可达、设备从网络中断开等),首先检查是否存在干扰。请参阅改善网络范围和稳定性。
安装
你可以以不同的方式运行 Zigbee2MQTT,请参阅安装指南。在这个示例中,我们将使用 Docker 和 Docker Compose 来设置和运行 Zigbee2MQTT。
1.) 查找 Zigbee 适配器
1.1) USB Zigbee 适配器
在插入适配器后,查看 dmesg 输出以找到设备位置:
$ sudo dmesg
...
usbcore: registered new interface driver ch341
usbserial: USB Serial support registered for ch341-uart
ch341 3-1:1.0: ch341-uart converter detected
usb 3-1: ch341-uart converter now attached to ttyUSB0
正如我们所看到的,适配器已被识别并挂载在 ttyUSB0 上。
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, May 16 19:15 /dev/ttyUSB0
在这里,我们可以看到该适配器由 root 拥有,并且所有 dialout 组的用户都可以访问它。
1.2) 网络 Zigbee 适配器
Zigbee2MQTT 支持网络 Zigbee 适配器的 mDNS 自动发现功能。如果你的网络 Zigbee 适配器支持 mDNS,则无需知道网络 Zigbee 适配器的 IP 地址,Zigbee2MQTT 将自动检测并配置它。否则,你需要知道网络 Zigbee 适配器的 IP 地址:
- 将你的适配器连接到 LAN 网络,可以是通过以太网或 Wi-Fi,具体取决于你的适配器。
- 转到你的路由器/交换机设置,并查找连接设备的列表。
- 找到你以太网 Zigbee 适配器的 IP 地址。
- 你还需要知道以太网 Zigbee 适配器的通信端口。在大多数情况下(如 TubeZB、SLZB-06),默认端口为 6638。你可以在适配器的用户手册中查看端口信息。
2.) 设置并启动 Zigbee2MQTT
假设你已经安装了 Docker 和 Docker Compose 的最新版本。
首先,我们创建一个文件夹,用于存放项目 mkdir 文件夹名。在文件夹中,我们创建 docker-compose.yml 文件,该文件定义了 Docker 如何运行我们的容器。以下文件包括两个服务,一个用于 MQTT 服务器,另一个用于 Zigbee2MQTT 本身。确保根据你的需求进行调整,并匹配设备挂载,以防适配器未挂载在 /dev/ttyUSB0 上,或者在使用网络适配器的情况下。
version: '3.8'
services:
mqtt:
image: eclipse-mosquitto:2.0
restart: unless-stopped
volumes:
- "./mosquitto-data:/mosquitto"
ports:
- "1883:1883"
- "9001:9001"
command: "mosquitto -c /mosquitto-no-auth.conf"
zigbee2mqtt:
container_name: zigbee2mqtt
restart: unless-stopped
image: koenkk/zigbee2mqtt
volumes:
-
./zigbee2mqtt-data:/app/data
- /run/udev:/run/udev:ro
ports:
- 8080:8080
environment:
- TZ=Europe/Berlin
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
接下来,我们将在 zigbee2mqtt-data 文件夹中创建一个简单的 Zigbee2MQTT 配置文件 configuration.yaml。
# 让新设备加入我们的 Zigbee 网络
permit_join: true
# Docker Compose 通过 "mqtt" 主机名使 MQTT 服务器可用
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mqtt
# Zigbee 适配器路径
serial:
port: /dev/ttyUSB0
# 启用 Zigbee2MQTT 前端
frontend:
port: 8080
# 让 Zigbee2MQTT 在首次启动时生成新的网络密钥
advanced:
network_key: GENERATE
对于网络适配器,串行设置应如下:
serial:
port: tcp://192.168.1.12:6638
其中 192.168.1.112 是你的网络 Zigbee 适配器的 IP 地址,6638 是端口。
如果你的适配器支持 mDNS,则可以省略 IP 地址,并使用以下配置:
serial:
port: mdns://slzb-06
其中 slzb-06 是你的网络 Zigbee 适配器的 mDNS 名称。
现在,我们应该在我们的目录中有两个文件,可以启动这个堆栈:
$ find
./docker-compose.yml
./zigbee2mqtt-data/configuration.yaml
# 首次启动
$ docker compose up -d
# 检查日志
$ docker compose logs -f
经过一段时间后,你应该看到一些日志消息,说明 Mosquitto 和 Zigbee2MQTT 已经在运行。你可以使用 http://localhost:8080(或远程服务器的主机名)打开前端。
现在,我们可以继续配对我们的第一个设备。
连接设备
查找你的设备的支持设备列表,并按照说明进行配对。
如果没有提供说明,该设备可能可以通过恢复出厂设置来进行配对。
一旦你在日志中看到类似下面的内容,你的设备就已经配对成功了,你可以开始使用前端和 MQTT 消息来控制它。
Zigbee2MQTT:info 2019-11-09T12:19:56: Successfully interviewed '0x00158d0001dc126a', device has successfully been paired
注意
重要的是在初始设置完成后,将 permit_join 设置为 false,以保持 Zigbee 网络的安全性,防止其他 Zigbee 设备的意外加入。