使用CC2531 USB Zigbee Dongle通过Zigbee2mqtt自建网关并接入HomeAssistant

1、准备工作

设备:已刷固件的 CC2531 USB Zigbee Dongle

系统:Windows10 Linux子系统 Debian(Linux DESKTOP-1ABHLTE 4.4.0-18362-Microsoft)

CC2531 USB Zigbee Dongle

将 CC2531 USB Zigbee Dongle 插到PC的USB口,等待驱动安装完成,正常会有弹窗提示安装到哪个COM口,比如我的是COM3。

启用 Windows10 Linux子系统,在Microsoft 应用商店下载Debian。

Debian

在开始菜单搜索 启用功能

启用或者关闭Windows功能

找到 适用于Linux的Windows子系统,点击启用,等待Windows启用功能并按要求重启。

重启完毕后,可以在开始中找到Debain的图标,点击即可打开Linux终端。

第一次启动会要求填写账号密码(密码输入时不可见)。

2、安装Python环境

建议安装Conda包管理器,这样可以随意切换环境而互相不影响。

终端命令:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh && ./Miniconda3-latest-Linux-x86_64.sh

按照提示安装即可,安装完成后,新建一个Python环境。

这时候需要关闭终端重新打开才能生效,否则conda命令找不到。

当然你也可以把conda的全路径写出来,这样就能找到了。

根据多次踩坑的经验,HA依赖的一些库对Python3.9.0还不支持,所以这次安装Python3.8.0的版本即可。

conda create -n ha python=3.8.0

会提示安装一些库,输入 y 同意即可,安装完成后,切换环境。

conda activate ha

记得,退出环境的命令是:

conda deactivate

切换环境成功的标记如下:

conda activate ha

3、安装HomeAssistant

先更改pip仓库源为阿里云的再下载 homeassistant 库,否则国内下载非常慢。

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install homeassistant

等待下载完成,还会有一些库需要安装。

pip install sqlalchemy==1.3.20 hass-nabucasa==0.37.1 home-assistant-frontend==20201021.4

安装完成后,进入.homeassistant 文件夹下(路径是: /home/你之前创建的用户名/.homeassistant)

# 进入.homeassistant 文件夹,这里是HA的配置文件所在目录
cd .homeassistant
ls

编辑 configuration.yaml 文件

vim configuration.yaml

输入内容

mqtt:
  discovery: true
  broker: localhost  # Remove if you want to use builtin-in MQTT broker
  # birth_message and will_message is not required anymore for Home Assistant 0.113 >=
  birth_message:
    topic: 'hass/status'
    payload: 'online'
  will_message:
    topic: 'hass/status'
    payload: 'offline'

这部分官方教程是:https://www.zigbee2mqtt.io/integration/home_assistant.html

保存,然后这里先暂停,从 Windows桌面->开始中找到 Debian 打开另外一个Linux终端。

4、安装Zigbee2mqtt

Zigbee2mqtt 是一个将 Zigbee 协议转化成 MQTT 的桥接工具。

按照官方教程安装Zigbee2mqtt:Running Zigbee2MQTT

简单来说就是安装NodeJs,然后通过 npm 下载Zigbee2MQTT,然后运行。

由于我使用apt命令下载的NodeJs版本太低,所以我直接从官网下载最新的版本压缩包,直接使用了,你如果会安装NodeJs,这一步完全可以不看我的教程。

在打开的新Linux终端中输入以下命令:

wget https://npm.taobao.org/mirrors/node/v14.15.0/node-v14.15.0-linux-x64.tar.xz
# 下载完成后,解压文件
xz -d node-v14.15.0-linux-x64.tar.xz
tar xvf node-v14.15.0-linux-x64.tar
# 解压后重命名文件夹为node
mv node-v14.15.0-linux-x64 node

然后设置环境变量

sudo vim /etc/profile

打开后,按一下 i ,按方向键下到最后一行,输入:

export PATH=$PATH:/home/你之前创建的用户名/node/bin

然后按一下 ESC,输入 :wq 退出。

重新加载profile文件

source  /etc/profile

看一下node 版本号有没有输出

node -v
npm -v

如下所述就正常

node -v

从GitHub把 zigbee2mqtt 项目文件下载到本地

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
# 将这个文件夹的所有权转交给你创建的账号
sudo chown -R 你创建的账号名称:你创建的账号名称 /opt/zigbee2mqtt
# 安装项目运行所需库
cd /opt/zigbee2mqtt
npm ci

如果一切正常,则输出npm ci类似于(设备上的包数和秒数可能不同):

node-pre-gyp info ok
added 383 packages in 111.613s

配置zigbee2mqtt

vim /opt/zigbee2mqtt/data/configuration.yaml

目前我的配置文件内容如下:

# HomeAssistant集成(MQTT 发现)
homeassistant: true

# 允许新设备加入
permit_join: true

# MQTT settings
mqtt:
  # MQTT消息的MQTT基本主题
messages
  base_topic: zigbee2mqtt
  # MQTT 服务器 URL,如果你有MQTT地址也可以改一下里面的内容,我们写localhost是因为等会我们会自己运行一个在本地的MQTT服务
  # server: 'mqtt://localhost'
  server: 'mqtt://localhost'
  # MQTT 服务器身份验证,如果需要,请取消注释:
  # user: my_user
  # password: my_password

# Serial 设置
serial:
  # CC2531 USB sniffer 的位置
  port: /dev/ttyS3

特别说明:Serial settings 中的 port 参数其实是与 COM 口对应的,COMx对应WSL的/dev/ttySx,例如COM3对应WSL的/dev/ttyS3

你创建的账号名称可能没有权限访问/dev/ttyS3,可以这样:

sudo chown -R 你创建的账号名称:你创建的账号名称 /dev/ttyS3

4、在本地搭建EMQTT服务器

官网下载地址:https://www.emqtt.io/downloads/

Windows下的话可以参照这个教程操作 :Windows上搭建EMQTT服务器

当然可以自己构建:https://github.com/emqx/emqx-rel

运行起来后,在浏览器中输入:http://localhost:18083/ 就可以打开了,用户名:admin,密码:public

EMQTT 后台

5、运行Zigbee2mqtt和HomeAssistant

第二个Linux终端窗口中,启动Zigbee2mqtt

cd /opt/zigbee2mqtt
npm start

正常情况下,Zigbee2mqtt连接MQTT服务后你可以在EMQTT后台中看到有一个新连接。

同时,你可以让Zigbee子设备进入配对模式,这样扫描到后,终端也会有输出记录,比如这样的消息就是扫描到小米的Zigbee插座。

Zigbee2MQTT:info  2020-11-13 09:50:41: MQTT publish: topic 'homeassistant/sensor/0x00158d0013a34fdf/power/config', payload '{"availability":[{"topic":"zigbee2mqtt/bridge/state"},{"topic":"zigbee2mqtt/0x00158d0013a34fdf/availability"}],"device":{"identifiers":["zigbee2mqtt_0x00158d0013a34fdf"],"manufacturer":"Xiaomi","model":"Mi power plug ZigBee (ZNCZ02LM)","name":"0x00158d0013a34fdf","sw_version":"Zigbee2MQTT 1.16.1"},"icon":"mdi:flash","json_attributes_topic":"zigbee2mqtt/0x00158d0013a34fdf","name":"0x00158d0013a34fdf_power","state_topic":"zigbee2mqtt/0x00158d0013a34fdf","unique_id":"0x00158d0013a34fdf_power_zigbee2mqtt","unit_of_measurement":"W","value_template":"{{ value_json.power }}"}'

然后在另外一个Linux终端窗口中,启动HomeAssistant

hass --open-ui

如果没有报错的话,应该是会显示URL地址。

HomeAssistant执行

进入后台后,第一次会要求设置账号密码,进入主页后,应该可以看到非常多的实体设备,你需要自己编辑UI。

先在 配置->实体注册表 中你不需要的设备全部删除吧,保留你需要的Zigbee子设备即可。

实体注册表

然后在 概览中,编辑仪盘表->编辑UI

编辑仪盘表

把不需要的UI删除掉,添加你需要的UI(添加->按实体),最终效果如下:

主页面

由于我只是演示,所以没有改卡片组件名称,你有需要可以改,就这样。

你可能感兴趣的:(使用CC2531 USB Zigbee Dongle通过Zigbee2mqtt自建网关并接入HomeAssistant)