『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 50882|回复: 99

[进阶教程] zigbee2mqtt翻译件:四、运行Zigbee2mqtt

  [复制链接]

8

主题

63

帖子

431

积分

中级会员

Rank: 3Rank: 3

积分
431
金钱
368
HASS币
0
发表于 2020-1-29 19:44:13 | 显示全部楼层 |阅读模式
本帖最后由 tangqmxf 于 2020-1-29 19:45 编辑

被小米网关劝退后在论坛大神的怂恿下决定入坑zigbee2mqtt,论坛里面几个大神有介绍,但是还是不够全面。自己到官网去扒啦了一些东西来,给各位入坑的提供下参考。
注:以下内容均从官网扒啦下来的,只是自己翻译了以下罢了。
系列文章目录如下:
游客,如果您要查看本帖隐藏内容请回复




本文说明了如何在Linux上运行Zigbee2mqtt。
您还可以在Docker容器Hass.io Zigbee2mqtt add-onPython虚拟环境、甚至在Windows上运行Zigbee2mqtt 。

为了简单起见,本文假设在Raspberry Pi 3的Raspbian Stretch Lite上运行,但是也可以在任何Linux机器上运行。
在开始之前,请确保在系统上安装了MQTT代理。有很多关于如何做到这一点的教程,mosquito 是推荐的MQTT代理,但其他代理也可以正常工作。

1.确定CC2531 USB sniffer的位置并检查用户权限
我们首先需要确定CC2531 USB sniffer的位置。连接CC2531 USB到您的树莓派。大多数时候,CC2531的位置是/dev/ ttyacm0。这可以通过以下方式来验证:
pi@raspberry:~ $ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 May 16 19:15 /dev/ttyACM0  # <-- CC2531 on /dev/ttyACM0

另一种方法是,设备也可以通过ID进行映射。如果有多个串行设备连接到树莓派上,如下方法就很方便了。在下面的例子中,设备位置为:
/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


2.安装
# 设置node.js库
sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

# 注意:如果你看到下面的信息,请按该方法操作: https://gist.github.com/Koenkk/11fe6d4845f5275a2a8791d04ea223cb.
# ## You appear to be running on ARMv6 hardware. Unfortunately this is not currently supported by the NodeSource Linux distributions. Please use the 'linux-armv6l' binary tarballs available directly from nodejs.org for Node.js 4 and later.
# 重点:在这种情况下,安装Node.js请使用如下方法:sudo apt-get install -y git make g++ gcc

# 安装 Node.js;
sudo apt-get install -y nodejs git make g++ gcc

# 验证正确的nodejs和npm(自动安装nodejs)
#版本已安装
node --version  # 应该输出 v12.X or v10.X
npm --version  # 应该输出 6.X

# 克隆zigbee2mqtt库
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt

# 安装依赖项(作为用户“pi”)
cd /opt/zigbee2mqtt
npm install

如果一切顺利,npm install的输出信息是类似如下的(你的设备上的packages数值和seconds数值可能不同):
node-pre-gyp info ok
added 383 packages in 111.613s

注意,npm install会产生一些可以忽略的warning。

3.配置
在开始Zigbee2mqtt之前,我们需要编辑configuration.yaml文件。该文件包含Zigbee2mqtt将使用的配置信息。
打开配置文件:
nano /opt/zigbee2mqtt/data/configuration.yaml
对于基本配置,默认设置可能是好的。我们只需要更改MQTT服务器url和身份验证(如果需要)。这可以通过更改configuration.yaml中的以下部分来实现。
# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://localhost'
  # MQTT server authentication, uncomment if required:
  # user: my_user
  # password: my_password

保存文件并退出

4.开始zigbee2mqtt
现在我们已经正确地设置好了一切,我们可以启动zigbee2mqtt了。
cd /opt/zigbee2mqtt
npm start

成功启动后,您将看到如下内容:
zigbee2mqtt:info  2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01'
zigbee2mqtt:info  2019-11-09T13:04:01: Starting zigbee2mqtt version 1.6.0 (commit #720e393)
zigbee2mqtt:info  2019-11-09T13:04:01: Starting zigbee-herdsman...
zigbee2mqtt:info  2019-11-09T13:04:03: zigbee-herdsman started
zigbee2mqtt:info  2019-11-09T13:04:03: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20190425}}'
zigbee2mqtt:info  2019-11-09T13:04:03: Currently 0 devices are joined:
zigbee2mqtt:warn  2019-11-09T13:04:03: `permit_join` set to  `true` in configuration.yaml.
zigbee2mqtt:warn  2019-11-09T13:04:03: Allowing new devices to join.
zigbee2mqtt:warn  2019-11-09T13:04:03: Set `permit_join` to `false` once you joined all devices.
zigbee2mqtt:info  2019-11-09T13:04:03: Zigbee: allowing new devices to join.
zigbee2mqtt:info  2019-11-09T13:04:03: Connecting to MQTT server at mqtt://localhost
zigbee2mqtt:info  2019-11-09T13:04:03: Connected to MQTT server

可以按下CTRL+C来停止Zigbee2mqtt。

5. (可选)使用systemctl作为后台进程运行
为了在后台运行zigbee2mqtt并在启动时自动启动它,我们将使用systemctl运行zigbee2mqtt。
# 为zigbee2mqtt创建systemctl配置文件
sudo nano /etc/systemd/system/zigbee2mqtt.service

在这个文件中添加以下内容:
[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

保存文件并退出。

验证配置是否工作:
# 开始zigbee2mqtt
sudo systemctl start zigbee2mqtt

# 显示状态
systemctl status zigbee2mqtt.service

输出应该是这样的:
pi@raspberry:/opt/zigbee2mqtt $ systemctl status zigbee2mqtt.service
● zigbee2mqtt.service - zigbee2mqtt
   Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-06-07 20:27:22 BST; 3s ago
 Main PID: 665 (npm)
   CGroup: /system.slice/zigbee2mqtt.service
           ├─665 npm
           ├─678 sh -c node index.js
           └─679 node index.js

Jun 07 20:27:22 raspberry systemd[1]: Started zigbee2mqtt.
Jun 07 20:27:23 raspberry npm[665]: > [email protected] start /opt/zigbee2mqtt
Jun 07 20:27:23 raspberry npm[665]: > node index.js
Jun 07 20:27:24 raspberry npm[665]: zigbee2mqtt:info  2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01'
Jun 07 20:27:25 raspberry npm[665]: zigbee2mqtt:info  2019-11-09T13:04:01: Starting zigbee2mqtt version 1.6.0 (commit #720e393)


现在一切正常运行,我们希望通过systemctl添加zigbee2mqtt的自动启动,这可以通过执行:
sudo systemctl enable zigbee2mqtt.service

完成!
以下是一些稍后会很有用的小技巧:
# 停止zigbee2mqtt
sudo systemctl stop zigbee2mqtt

# 开始zigbee2mqtt
sudo systemctl start zigbee2mqtt

# 查看zigbee2mqtt的日志
sudo journalctl -u zigbee2mqtt.service -f

6. (用于以后)将Zigbee2mqtt更新到最新版本
要将Zigbee2mqtt更新到最新版本,请执行:
# 停止zigbee2mqtt并转到目录
sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt

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

# 更新
git checkout HEAD -- npm-shrinkwrap.json
git pull
rm -rf node_modules
npm install

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

# 开始zigbee2mqtt
sudo systemctl start zigbee2mqtt


7.Zigbee2mqtt启动失败解决方案
大多数情况下,这是由 zigbee-herdsman 无法与您的网关通信造成的(例如:CC2531)。

检查您是否在configuration.yaml中填写了正确的端口信息。

可以通过运行以下命令以找出正确的端口号:
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


在这个例子中正确的端口是/dev/ttyAMC0

出现多个端口号时通常最低的数字是设备数据端口,另一个是debugger设备端口。
例如
lrwxrwxrwx 1 root root 13 Jan  6 19:07 usb-Texas_Instruments_XDS110__03.00.00.05__Embed_with_CMSIS-DAP_L1100BTD-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Jan  6 19:07 usb-Texas_Instruments_XDS110__03.00.00.05__Embed_with_CMSIS-DAP_L1100BTD-if03 -> ../../ttyACM1

if00对应的ttyACM0就是数据端口(选择这个)
if03对应的ttyACM1就是debugger设备端口

验证您运行 Zigbee2mqtt 的用户是否具有对端口的写入访问权限

可以通过执行以下命令来测试:
test -w [PORT] && echo success || echo failure


例如:
test -w /dev/ttyACM0 && echo success || echo failure


如果它输出failure.可以通过执行如下命令来分配权限:
sudo chown [USER] [PORT] 

举例:
sudo chown pi /dev/ttyACM0

8.卸载ModemManager
某些系统默认安装了ModemManger这个软件将会导致一系列未知的问题。可通过如下命令卸载ModemManger。
sudo apt-get purge modemmanager

9.按下设备上的复位按钮 (仅适用于 CC2531)
当您将 CC2531 插入电脑时,绿色指示灯会亮起。 通过按下 CC2531 上的复位按钮,绿色 LED 应该熄灭。 CC2531 上有两个按钮,重置按钮是最靠近 USB 端口的按钮。 现在尝试再次启动 zibee2mqtt。

评分

参与人数 2金钱 +22 收起 理由
cym9007 + 2 感谢楼主分享!
+ 20 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

2

主题

712

帖子

4900

积分

论坛元老

Rank: 8Rank: 8

积分
4900
金钱
4188
HASS币
85
发表于 2020-1-29 21:35:44 | 显示全部楼层
感謝樓主分享
回复

使用道具 举报

0

主题

166

帖子

4207

积分

论坛元老

Rank: 8Rank: 8

积分
4207
金钱
4041
HASS币
0
发表于 2020-1-30 09:15:12 | 显示全部楼层
感謝大大的分享,來學習了 ^^y
回复

使用道具 举报

4

主题

209

帖子

1406

积分

金牌会员

Rank: 6Rank: 6

积分
1406
金钱
1197
HASS币
0
发表于 2020-1-30 19:32:01 | 显示全部楼层
谢谢填坑!
回复

使用道具 举报

8

主题

382

帖子

1779

积分

金牌会员

Rank: 6Rank: 6

积分
1779
金钱
1397
HASS币
0
发表于 2020-1-31 00:19:59 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

0

主题

90

帖子

761

积分

高级会员

Rank: 4

积分
761
金钱
671
HASS币
0
发表于 2020-1-31 16:23:36 | 显示全部楼层
谢谢填坑,慢慢学习
回复

使用道具 举报

0

主题

79

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
金钱
187
HASS币
0
发表于 2020-2-2 12:03:53 | 显示全部楼层
看看先~~~~~
回复

使用道具 举报

0

主题

14

帖子

103

积分

注册会员

Rank: 2

积分
103
金钱
89
HASS币
0
发表于 2020-2-3 14:57:10 | 显示全部楼层
谢谢分享!我用群晖安装m2q的一直启动不了
回复

使用道具 举报

0

主题

127

帖子

1838

积分

论坛积极会员

积分
1838
金钱
1711
HASS币
0
发表于 2020-2-3 23:40:11 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

78

帖子

380

积分

中级会员

Rank: 3Rank: 3

积分
380
金钱
302
HASS币
0
发表于 2020-2-6 20:04:51 | 显示全部楼层
总是出错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-11 22:20 , Processed in 0.334118 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表