1、准备工作
设备:已刷固件的 CC2531 USB Zigbee Dongle
系统:Windows10 Linux子系统 Debian(Linux DESKTOP-1ABHLTE 4.4.0-18362-Microsoft)
将 CC2531 USB Zigbee Dongle 插到PC的USB口,等待驱动安装完成,正常会有弹窗提示安装到哪个COM口,比如我的是COM3。
启用 Windows10 Linux子系统,在Microsoft 应用商店下载Debian。
在开始菜单搜索 启用功能
找到 适用于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
切换环境成功的标记如下:
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
如下所述就正常
从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
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地址。
进入后台后,第一次会要求设置账号密码,进入主页后,应该可以看到非常多的实体设备,你需要自己编辑UI。
先在 配置->实体注册表 中你不需要的设备全部删除吧,保留你需要的Zigbee子设备即可。
然后在 概览中,编辑仪盘表->编辑UI
把不需要的UI删除掉,添加你需要的UI(添加->按实体),最终效果如下:
由于我只是演示,所以没有改卡片组件名称,你有需要可以改,就这样。