米家/飞利浦/宜家 Zigbee 智能家居设备接入 ThingsCloud
米家/飞利浦/宜家 Zigbee 智能家居设备接入 ThingsCloud
搭建 Zigbee2MQTT 网关
通过架设自己的 Zigbee 网关,我们可以将米家的 Zigbee 设备轻松接入 ThingsCloud。借助 ThingsCloud 平台的内置应用和开放性,我们可以在很多行业项目和应用场景中灵活自如的发挥 Zigbee 无线设备的优势。例如:楼宇办公、温室大棚、小型仓库、环境监测、工业控制等一些非家居场景。
这里要用到开源项目 Zigbee2MQTT ,它采用 NodeJS 编写,可以运行在 Linux/Windows 下,详细的搭建过程这里略过,官网有详细的介绍。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/rpi-zigbee2mqtt1_i92c0abd6282e11edbb6e525400a243f4.jpg)
Zigbee2MQTT 支持的 Zigbee 设备多大2000多种。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/zigbee2mqtt1_i3fa69d58284511edaa4e525400470b60.jpg)
通常来说,搭建 Zigbee2MQTT 网关需要以下硬件:
- Linux 小型主机,可通过 WiFi/以太网/4G 连接互联网,支持 USB 接口。我们这里以树莓派为例。
- Zigbee 适配器,支持 USB 或以太网接口。采用 CC25xx 或 CC26xx 的 Zigbee 芯片。CC26xx 具有更远的传输距离和更好的稳定性。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/rpi-zigbee2mqtt4_i92977660282e11edaa4e525400470b60.jpg)
树莓派 4B + USB Zigbee 适配器
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/rpi-zigbee2mqtt3_i92dc3c8d282e11edbb6e525400a243f4.jpg)
树莓派 Zero + USB Zigbee 适配器
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/rpi-zigbee2mqtt5_i92e65cf6282e11edbb6e525400a243f4.jpg)
版本适配说明
如果使用的 Zigbee2MQTT 是 1.8.0
以上的版本,需要对代码进行一点小小的修改。在本地源代码目录中找到该文件 lib/mqtt.ts,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20231119101636_4855c2c881364b8c167c93dc8c039386.png)
将以下代码:
this.subscribe(`${settings.get().mqtt.base_topic}/#`);
修改为:
this.subscribe(`${settings.get().mqtt.base_topic}/+/set`);
修改后保存,由于修改了 lib 下的文件,需要重新编译,方法如下:
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20231119102006_ff8b7012d0c58965689773bae5e4219e.png)
npm run build
Zigbee 优势
Zigbee 无线设备的主要优势包括:
- 低功耗:例如小米温湿度传感器使用 3V 纽扣锂电池,可以续航长达一年多时间。
- 低延迟:设备响应速度快,从睡眠状态切换到工作状态通常仅需要 15ms,节点访问网络仅需要 30ms,从而进一步节省了电量。
- 容量大:Zigbee 可以采用星状,片状和网状的网络结构,最多可以形成 65000 个节点的大型网络。
- 低成本:Zigbee 协议免专利费,且市面上支持 Zigbee 标准协议的传感器、灯、开关、电源等产品非常多,价格低廉。仅 Zigbee2MQTT 支持的设备就有超过 2000 多种,包括小米、绿米、宜家、飞利浦等。
Zigbee2MQTT 接入 ThingsCloud
Zigbee2MQTT 网关准备好后,我们来重点介绍 ThingsCloud 平台的接入和应用,对于其它 Zigbee 网关的接入同样具有参考意义。
创建项目
打开 ThingsCloud 控制台,如果还没有创建项目,先创建一个项目。
创建设备类型
为了定义网关设备的功能,我们需要先创建一个设备类型,这里可以直接使用我们已经发布的模板,创建类型时选择产品类型,输入产品 ID:7892219658
。如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway-type1_iaa87fd36282d11edaa4e525400470b60.png)
这样会自动生成一些规则,用来解析网关和子设备的消息,直接使用即可。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway-rule1_iaa77a88f282d11edbb6e525400a243f4.png)
同时还有自动生成的自定义数据流,支持 Zigbee2MQTT 的 MQTT 主题。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway-custom-topic1_i933fe555283711edbe28525400a8700f.jpg)
创建网关设备
接下来创建一个设备,绑定到刚创建的设备类型下。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway-create1_i955ee966283611edbe28525400a8700f.jpg)
进入设备>连接,可以看到设备证书和 MQTT 连接地址,稍后会用到。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway2_i957da232283611edaa4e525400470b60.jpg)
编辑 Zigbee2MQTT 配置
接下来配置 Zigbee2MQTT,以默认安装路径为例,打开配置文件:
nano /opt/zigbee2mqtt/data/configuration.yaml
需要注意的几点:
base_topic
:必须修改为data/zigbee2mqtt
server
:修改为从网关设备页面复制的 MQTT 接入点完整地址,例如mqtt://xxx.iot-api.com:1883
user
:修改为从网关设备页面复制的 AccessTokenpassword
:修改为从网关设备页面复制的 ProjectKeyhomeassistant
:设置为false
permit_join
:当需要添加子设备时,设置为true
。
如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/zigbee2mqtt-config_i1f0a2f52282f11edaa4e525400470b60.jpg)
保存配置文件,重启 Zigbee2MQTT,网关设备连接成功,会上报网关的基本信息。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway1_i958e4f13283611edbb6e525400a243f4.jpg)
添加子设备
创建子设备类型
所有 Zigbee 设备都是网关的子设备,我们以温湿度传感器为例,创建一个子设备类型。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/type-create2_i0357f200283911edaa4e525400470b60.jpg)
创建子设备
然后在该类型下创建多个温湿度传感器设备。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/temp-devices1_i181d6eeb282f11edbb6e525400a243f4.jpg)
添加子设备到网关
最后,进入网关设备的子设备管理列表,将创建好的多个子设备添加到网关下,并且设置子设备地址。
子设备地址可以有两种方式找到:
- 在 Zigbee2MQTT 的本地日志中,可以找到类似
data/zigbee2mqtt/0xXXXXXXXXXXXXXXXX
的主题,这里的0xXXXXXXXXXXXXXXXX
就是子设备地址。 - 或者在 ThingsCloud 网关设备的调试消息历史中,查看自定义上报消息的详情,也可以找到如上设备地址。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/gateway-devices1_i0358ee26283911edbe28525400a8700f.jpg)
配置子设备地址后,就可以立即看到传感器上报的数据被网关设备转发到了子设备,子设备显示在线状态。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/devices1_i8ff361ef282d11edaa4e525400470b60.png)
查看设备当前状态
进入不同的子设备,可以看到 Zigbee 设备的当前属性数据。
绿米温湿度传感器
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device1_id41aa1db283a11edbb6e525400a243f4.jpg)
绿米门窗状态传感器
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device2_id43730dd283a11edaa4e525400470b60.jpg)
小米人体存在传感器
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device3_id42187eb283a11edbe28525400a8700f.jpg)
小米智能电源
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device4_id4240752283a11edaa4e525400470b60.jpg)
小米无线开关
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device5_id4035dc3283a11edbb6e525400a243f4.jpg)
查看设备历史数据
进入设备页面,对于数值型属性,直接点击属性面板上的历史数据图标,即可打开历史数据曲线图。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device6_if4dcf6a6283b11edbe28525400a8700f.jpg)
可以选择时间范围、聚合时间段,以及聚合方式。来看看最近三天每小时湿度的中位数,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/device7_ia51548c2283c11edbe28525400a8700f.jpg)
实时控制
一些 Zigbee 设备具备控制功能,例如小米智能电源,可以从云平台下发指令控制电源开关,从而控制使用市电的设备,相当于继电器。
在智能电源设备类型中定义开关量属性,并且使用设备云端共享的属性类型,这样该属性既可以由智能电源上报,也可以通过控制台、App 或调用 API 下发给设备。
例如:在控制台操作开关,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/power-control2.gif)
在设备调试消息中,可以看到下发的 JSON
指令,同时设备更新状态后会立即上报一条最新 JSON
属性数据。从消息时间可见,Zigbee 的传输延迟非常低。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/control1_i10a478c2284611edbe28525400a8700f.jpg)
可视化看板
当我们希望通过统一的看板来方便的掌握多个设备的数据,并且快速的控制设备,ThingsCloud 可视化看板派上用场。
创建看板
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/board1_i4e4569dd282f11edbe28525400a8700f.jpg)
添加看板组件
通过不同的看板组件,可以将不同设备的不同属性,以可视化的形式呈现出来。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/board2_i4e7025db282f11edbe28525400a8700f.jpg)
看板全屏
可视化看板支持全屏,可以利用这个特性,将看板呈现在大屏幕上。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/board3_i4e74c34b282f11edaa4e525400470b60.jpg)
看板中的设备实时互动
看板中实时更新门窗传感器状态,我们也可以随时打开或关闭电源,请观看以下视频:
设计 App 界面
到目前为止,我们已经通过 ThingsCloud 获取所有 Zigbee 子设备的状态数据,并可以对一些设备下发实时控制指令。
接下来,我们来为生成用户 App 做一些准备,对于不同的设备类型,我们编辑相应的 App 设备面板。
小米智能电源
添加基本的属性定义,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/power-attributes1_icd1f5d4e282d11edbb6e525400a243f4.png)
进入 App 界面编辑,如下:
小米智能开关
小米智能开关支持上报多种开关动作,对应的属性标识符是 click
,它的取值包括:
- 点击
- 双击
- 三击
- 四击
- 多击(超过四击)
- 长按
- 长按释放
添加基本的属性定义,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/switch-attributes1_if4bd233a282e11edbb6e525400a243f4.jpg)
这里,我们希望根据单击来生成开关状态 status
,例如用来控制灯的开关。为此,我们编写了一个简单的属性上报预处理规则,如下:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/switch-rule1_if4dfcf0f282e11edaa4e525400470b60.jpg)
进入 App 界面编辑,如下:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/switch-appeditor1_if4af4796282e11edaa4e525400470b60.jpg)
门窗传感器
进入 App 界面编辑,如下:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/window-appeditor1_i1bc6ff28282f11edbb6e525400a243f4.jpg)
温湿度传感器
添加基本的属性定义,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/temp-attributes1_i1818cd40282f11edbe28525400a8700f.jpg)
进入 App 界面编辑,如下:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/temp-appeditor1_i17f98bba282f11edbe28525400a8700f.jpg)
创建用户 App
对设备类型完成 App 界面设计后,我们来创建用户应用,即可获得支持多个移动平台的用户 App,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/app1_ic3550080284811edbb6e525400a243f4.jpg)
接下来创建用户账号,用来登录用户 App。然后为用户关联多个设备。当用户登录后,便可以查看或控制这些设备。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/customer1_i8ff36625282d11edaa4e525400470b60.png)
告警通知
利用 ThingsCloud 的内置告警规则和通知组,可以轻松实现强大的告警通知,通知方式支持丰富的选择,包括邮件、短信、钉钉群通知、企业微信通知、飞书群通知等。
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/alarm1_if7da4b0e283b11edaa4e525400470b60.jpg)
告警通知的详细介绍,请参考 告警规则
应用端设备 API
除了内置的可视化看板及通用应用。我们还可以利用 API,将设备的数据和控制集成到任何第三方应用系统中。
以小米智能电源为例,我们通过 HTTP 客户端工具来实现数据读取和控制。
读取智能电源的当前所有属性值,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/api1_i2e4f699c282d11edaa4e525400470b60.png)
读取指定的属性值,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/api2_i2e38be2d282d11edbe28525400a8700f.png)
立即闭合电源,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/api3_i2e4f66a1282d11edaa4e525400470b60.png)
立即断开电源:如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/202208/xiaomi-zigbee/api4_i2e48bd71282d11edbe28525400a8700f.png)
详细介绍,请参考 应用端设备访问 API
设备联动
通过在 ThingsCloud 云平台的消息规则,可以跨越网关,实现项目内任何设备之间的智能联动。
这里不详细介绍,请参考 消息规则
项目 API
通过项目 API 的使用,您可以完全按照自己的需求,实现设备的展现和控制。
项目 API 基于标准的 HTTP 协议和 MQTT 协议,对于不支持 MQTT 的浏览器应用,我们提供了 MQTT@Websocket。这使得项目 API 兼容几乎所有应用程序运行平台,因此,基于项目 API 可以开发的应用软件,包括但不限于以下:
- 基于 Web 浏览器的 SaaS 软件
- 运行在桌面的客户端软件
- 运行在手机端的 App
- 运行在工业平板上的可视化应用
- 运行在电视屏上的大屏应用
详细介绍,请参考 项目 API