有关我做的这个网关的硬件信息, 我都更新到此贴. 感兴趣的玩家可以加入进来~
为什么要自己做zigbee网关
- 小米网关协议时不时的变化,导致设备接入时常不好用。
- 小米网关局域网接入使用UDP组播,并不是所有的wifi路由器都支持的。
- 小米网关版本更新,有些设备的数据就被网关吃掉,直接发云端,不转发局域网协议了。更有甚者,有一些zigbee设备直接无法支持局域网协议!!
- 如果家里有其他品牌zigbee设备,比如宜家,飞利浦的灯,涂鸦的传感器等,都需要专门的zigbee网关,管理复杂。
- TB上有大把的标准ZHA,ZLL协议的小厂家终端设备,无法接入。
支持设备列表
自己制作的zigbee网关支持近100种zigbee设备,包括我们常用的小米(aqare),飞利浦Hue,宜家等品牌。具体支持设备列表参考链接。
简述zigbee网络
图片来源:https://baijiahao.baidu.com/s?id=1597593171433294352&wfr=spider&for=pc
设备角色
- 协调器(Coordinator):网络中唯一的管理者。
- 路由器(Router):可以转发数据的设备。设备本身可以有实际功能,也可以单纯的转发数据。
- 终端设备(End-Device):具有具体功能的设备,不可以转发数据。
那小米的设备举例,小米网关就是协调器。一般情况,直接有220V供电的设备,比如86墙壁插座,窗帘充当的是路由器。电池供电设备,单火线供电设备是终端设备。
网络类型
不想详细的讲网络类型,我也不专业。我只说一点和我们部署有关系的点:
- source_routing: 协调器支持source routing的话,对网络节点数量多的用户很有帮助。但是!!实际测试小米设备对source routing的协议似乎支持不标准, 打开source_routing之后, 有大量错误信息, 很恼人. 所以最后我还是选择了normal mode.
硬件准备
这个是我开源项目最后的成品硬件. 有以下几个特点:
-
使用E18-MS1PA1-IPX zigbee模组, 模组使用CC2592PA, 发射功率可以达到21dBm. 也可以使用E18-2G4Z27SI替换pin2pin兼容的E18-MS1PA1-IPX模组, 如何设置和实测信号发射功率请参考此链接.
-
模块自带ESP8266模组. 可以通过WiFi转串口接入智能家居系统, 不再受到主机摆放位置的约束而导致信号覆盖差. 而且可以配合使用Zigbee to Tasmota项目, 完全不需要上位机, 自己本身就是一个zigbee-wifi网关.
-
ESP8266模组和E18模组的CC-DEBUG程序下载引脚连接, 可以通过CCLib项目, 直接给E18 zigbee模组下载固件, 不需要另外购买CC-DEBUG在线仿真器.
-
可以通过拨码开关配置多种串口连接方式:
-
USB TTY <==> ESP 8266 TTY. 用于ESP模组和Zigbee模组下载固件.
-
USB TTY <==> E18 TTY. USB直连Zigbee模组, 上位机配置更加简单, 稳定性更强.
-
ESP 8266 TTY <==> E18 TTY. Connect though TTY. ESP模组和Zigbee模组对接, 可以刷WiFi串口固件, 实现WiFi接入上位机智能家居系统, 具体方法参考此链接. 或者直接配合Zigbee to Tasmota项目做独立的Zigbee网关.
-
USB TTY <==> ESP 8266 debug port. ESP 8266 TTY <==> E18 TTY. 和上一种连接方式一样, 多增加了一个debug串口.
-
使用USB Type-C接口. 紧跟时代潮流.
-
不管你怎么看, 我认为这个比USB dongle要好看几个数量级. 颜值即正义.
固件烧写
我专门为此项目定制化开发了Tasmota固件, 具体固件下载方法请见此贴
部署步骤
-
在ioBroker插件商店, 安装zigbee插件(版本v1.0以上)
-
添加插件实例.
-
配置插件, 选择SETTING,在COM port name处,填写
tcp://[你的设备IP]:[你配置的监听端口(默认8880)]
-
重启插件程序,等到程序状态为绿色。
-
再次进入程序配置页面,点击绿色图标按钮,开始添加自己的zigbee设备。这里注意,最右上角的绿色图标是指的添加直接连接协调器的子设备,而网络中,router属性的设备同样也有一个绿色的图标,可以由他发起设备接入。
-
添加完所有设备后,可以在NETWORK MAP页面查看网络情况。
-
在设备页面,可以看到已经添加的设备的属性,这里面可以发现,有很多小米子设备的数据,是比局域网协议更多的哦~
其他系统部署教程
外壳安装
如果你有3D打印机, 可以直接下载github上项目的3Dcover的文件, 直接打印. 外壳安装的视频在此
注意事项
- 牵扯到硬件,请大家根据自己情况酌情选择方案。
- router设备同样可以使用coordinator一样的硬件,只要刷不同的router固件即可。
- 小米设备,并没有完全遵守zigbee协议的规范,所以会有一些地方需要注意:
- 如果选择source_routing的协调器,小米的电池设备又会定期打印这样的错误log
Zigbee publish to '0x00158d00010b6cc9', genTime - readRsp - {"attrId":0,"status":0,"attrData":624267880,"dataType":226}] - 1 failed with error Error: AF data request fails, status code: 205.
。完全不影响使用,忽略即可。 - 小米设备的
Available
属性也完全不准,请不要忽略他的状态,不要依靠这个状态做任何自动化。 - 尽可能选择基于herdsman的库的zigbee插件, 包括ioBroker的zigbee插件和zigbee2mqtt的程序(他们都是基于同一个zigbee库建立的).
- 下面是这一条是如果没有选择herdsman的库才需要注意的.
- 添加设备的时候,尤其是电池供电设备时,在长按链接按钮5s后,设备开始链接zigbee网关,灯长闪一次,代表已经接入网络。但是zigbee标准协议里面还需要子设备再上报设备的一些信息,可是小米的电池设备并没有上报,如果一直等待的话,会出现类似这样的错误
Error: Cannot get the Node Descriptor of the Device: 0x00158d0000fd3145 (Error: Timed out after 10000 ms). undefined
。解决办法:再设备接入网络的长闪一次之后,继续按照1秒2次的频率短按设备配对按钮,直到程序配对输出页面上出现这样的日志为止Interview state: step 1/1. progress: 13%
。大约添加一个电池设备需要40s,如果失败请多尝试。
- 如果选择source_routing的协调器,小米的电池设备又会定期打印这样的错误log
开源硬件
我已经在大佬的基础上着手改良硬件,并且已经开源出来了。
大家可以在Github中找到项目