如何在 Linux 上运行 Zigbee2MQTT

如何在 Linux 上运行 Zigbee2MQTT缩略图

本指南将教你如何在 Linux 上运行 Zigbee2MQTT。

虽然我们以在 Raspberry Pi 4 上使用 Raspbian Stretch Lite 为例,但这个指南基本上适用于所有的 Linux 设备。

有些用户可能会在不同的系统版本上操作,比如在 Openhabian.piopenhabian 上,所以具体步骤可能会略有不同。

开始前,请确保你的系统中已经配置了 MQTT broker。Mosquitto 是一个很好的选择,当然,其他的 broker 也可以。

确定适配器位置及检查权限
首先,你要确认适配器的具体位置。把适配器接到 Raspberry Pi 上,大部分时间它的位置都是 /dev/ttyACM0。可以用下面的命令检查:

pi@raspberry:~ $ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 May 16 19:15 /dev/ttyACM0  # <-- adapter (CC2531 in this case) on /dev/ttyACM0

如果你使用的是 Ethernet 连接的适配器,请按照适配器的说明书操作。

不过,建议使用 "by ID" 路径来找设备(详见“适配器设置”部分)。这种方法更加稳定,尤其是当 Raspberry Pi 连接了多个串行设备时。例如,设备位置可能是 /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00

pi@raspberry:/ $ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx. 1 root root 13 Oct 19 19:26 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00 -> ../../ttyACM0

安装步骤

  1. 安装 Node.js 和所需依赖
sudo curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc
  1. 确认正确安装了 nodejs 和 npm
node --version
npm --version
  1. 创建 zigbee2mqtt 的目录,并赋予权限
sudo mkdir /opt/zigbee2mqtt
sudo chown -R ${USER}: /opt/zigbee2mqtt
  1. 克隆 Zigbee2MQTT 仓库
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
  1. 安装必要的依赖
cd /opt/zigbee2mqtt
npm ci
  1. 构建应用程序
npm run build

在 Ubuntu 上的提示
你可以用 Snap 在 Ubuntu 上安装 Node.js。

sudo snap install node --classic
node --version

配置
在启动 Zigbee2MQTT 前,要复制并调整 configuration.yaml 文件的设置。

复制并编辑配置文件:

cp /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml
nano /opt/zigbee2mqtt/data/configuration.yaml

默认的配置已经很完善,你只需要修改 MQTT 服务器的 url/认证以及串口设置。

启动 Zigbee2MQTT
一切准备好后,就可以启动 Zigbee2MQTT 了。

cd /opt/zigbee2mqtt
npm start

如果成功,你会看到以下输出:

Zigbee2MQTT:info  开始 Zigbee2MQTT 版本 1.X.X
Zigbee2MQTT:info  启动 zigbee-herdsman

(可选) 使用 systemctl 使 Zigbee2MQTT 作为守护进程运行
若希望 Zigbee2MQTT 在后台作为守护进程运行,并在开机时自动启动,我们可以通过 systemctl 来实现。

为 Zigbee2MQTT 创建一个 systemctl 配置文件

sudo nano /etc/systemd/system/zigbee2mqtt.service

将以下内容添加到文件中:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
Environment=NODE_ENV=production
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# 若不希望 Zigbee2MQTT 的消息填充 syslog,可以使用 StandardOutput=null,更多选项参考 systemd.exec(5)
StandardError=inherit
Restart=always
RestartSec=10s
User=pi

[Install]
WantedBy=multi-user.target

如果你使用的是 Raspberry Pi 1 或 Zero 并且按照这个指南操作,将 ExecStart=/usr/bin/npm start 替换为 ExecStart=/usr/local/bin/npm start

如果你使用的是 Raspberry Pi 或一个从 SD 卡启动的系统,你可能希望减少写入到磁盘的日志文件数量。通过 Systemd 服务会导致所有内容都记录两次:一次通过 systemd 单元,另一次是 Zigbee2MQTT 默认记录到文件下。你可能只想保留其中之一:

  • 仅保留下面的日志 --> 在 systemd 单元中使用 StandardOutput=null
  • 仅保留日志 --> 在 Zigbee2MQTT 配置中设置 advanced.log_output = ['console']

如果想在另一个目录放置所有 Zigbee2MQTT 数据,加入 Environment=ZIGBEE2MQTT_DATA=/路径/到/数据[Service] 下。

保存文件并退出。

验证配置是否工作:

# 启动 Zigbee2MQTT
sudo systemctl start zigbee2mqtt

# 显示状态
systemctl status zigbee2mqtt.service

输出应如下:

[输出内容]

既然一切都正常,我们希望 systemctl 在开机时自动启动 Zigbee2MQTT,执行以下命令即可:

sudo systemctl enable zigbee2mqtt.service

完成!😃

以下是一些建议你可能会用到的小技巧:

停止 Zigbee2MQTT

sudo systemctl stop zigbee2mqtt

启动 Zigbee2MQTT

sudo systemctl start zigbee2mqtt

查看 Zigbee2MQTT 的日志

sudo journalctl -u zigbee2mqtt.service -f

(以后) 更新 Zigbee2MQTT 到最新版本
要更新 Zigbee2MQTT 到最新版本,执行以下命令:

# 停止 Zigbee2MQTT 并转到目录
sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt

# 备份配置
cp -R data data-backup

# 更新
git pull
npm ci
npm run build

# 恢复配置
cp -R data-backup/* data
rm -rf data-backup

# 启动 Zigbee2MQTT
sudo systemctl start zigbee2mqtt
技术术语(共 3 个)—— 点击展开
MQTT轻量级物联网消息传输协议,基于发布/订阅模式,适合低带宽不稳定网络
BrokerMQTT 代理服务器,负责接收发布消息并分发给订阅者
Mosquitto轻量级开源 MQTT Broker,适合边缘与嵌入式部署
来源/工具信息 —— 点击展开
来源 MQTT中文网(mqtt.cn) —— 国内领先的MQTT通信协议技术社区 分类 Zigbee2MQTT 字数 3151 字 · 阅读约 8 分钟 更新 2023-10-19 永久链接 https://www.mqtt.cn/1002.html
推荐工具:MQTT调试助手 微信小程序
MQTT中文网官方推出的MQTT调试工具,支持 MQTT 3.1.1/5.0 实时连接调试、主题订阅、消息收发监控与报文分析。 无需安装,微信搜索「MQTT调试助手」即可使用。 电脑端入口:https://www.mqtt.cn/mqtttool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 mqtt.cn
📝 作者声明
本文由 MQTT中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口