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

 找回密码
 立即注册
查看: 8025|回复: 30

[技术探讨] 分享将涂鸦zigbee电动开窗器(推拉窗)接入ZHA的心路历程

[复制链接]

2

主题

96

帖子

1016

积分

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
915
HASS币
30
发表于 2022-9-15 01:17:44 | 显示全部楼层 |阅读模式
本帖最后由 samhsba 于 2022-11-9 09:46 编辑

为啥要写心路历程呢,主要是分享一下选择适合自己的智能产品的逻辑,更重要的是怎么在没有绝对针对性资料的情况下,利用搜索引擎,依葫芦画瓢来解决全新的问题.

更新历史:

20220915 23:10 听取了10楼linoul的建议,去除冗余步骤,让方式二更加简单;添加演示视频.
20221001 00:57  方式二在上次更新的时候多去除了__init__.py这个脚本,这个脚本必须也复制过来
20221108 9:48   根据反馈提供文件路径搜索的命令  15:37 完善搜索命令,进行全盘搜索
一.背景介绍(都是废话可以不看)
最近几年入了HA的坑,在出租屋折腾各种智能设备,基本靠小米多模网关一把梭,基本也都是zigbee协议的设备(个人比较看好zigbee).也终于在今年初拿到人生第一套精装交付房,那自然是全屋智能的节奏.诸如墙壁开关,灯具,窗帘电机,人体传感器,门窗传感器等等常用设备基本都有品牌商推出成熟的产品(基本都海鲜市场搞得aqara,香!).
唯独自动开窗的设备,始终没看到大厂有类似的产品,马家基本上也都是小厂家做的,更多是平开窗开窗器.
平开窗:

                               
登录/注册后可看大图

推拉窗:

                               
登录/注册后可看大图

适配我家推拉窗的,我最近半年能找到的就两家,一个是论坛里能搜到的云仪(涂鸦wifi),另一个就是根本找不到任何资料的涂鸦zigbee,也就是本文的主角.


二.选品过程
  • 云仪
论坛上有些许资料可查https://bbs.hassbian.com/thread-15664-1-1.html,也是当时我能唯一确定可以接入ha的推拉窗设备.
由于是涂鸦wifi协议的设备,如果通过官方接入,就会存在延迟问题,也没办法做到本地执行.即便通过tuya local各种tricky的方式接入,也存在诸多问题,比如网站改版,亦或是tuya开发者账号拿key只能半年有效(道听途说,本人没有验证过),blabla...参考https://bbs.hassbian.com/thread-13396-1-1.html
整体这个产品给我的感觉就不是很靠谱,很可能涂鸦说给你ban了就ban了
另外就是个人比较热衷于zigbee设备,属于个人情结,故不得不把目光投向另一个不知名小厂的产品上.

  • 不知名产品
这个产品有多不知名呢,就连店铺名都不带品牌,所以我也不知道怎么称呼
不过虽然厂子不知名,但是产品真的是牛逼,有涂鸦zigbee,欧瑞博zigbee,米家wifi,涂鸦wifi等协议可以选配.
于是在犹豫许久后,在6月跟老板开始了漫长的沟通.

                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图

老板基本上都是答非所问,他是真的想帮我,奈何他真的不懂.....我想要的是zigbee的设备id,他给我发的啥也不是,哈哈哈.
没办法,最终还是硬着头皮上了车,想着自己研究下实在不行就把控制芯片寄回去换个米家wifi的,然后就开始了后面的安装调试.

三.尝试开窗器接入zha
设备到手后,根据说明书按3下按钮进入配对模式,zha正常识别,但没有生成任何有用实体,也终于知道设备id了....

                               
登录/注册后可看大图

于是乎开始根据型号TS0601 TZE200各种google,找到了加热器,墙壁开关,窗帘,开窗器等等,也试了搜索完整型号_TZE200_7upwjcca,那就是啥都搜不到.此刻内心是很芭比Q的

终于根据TS0601 TZE200 cover关键字,找到了github上一个issue,大概了解了一下zha quirks这个东西就是专门解决这类问题的.
看代码是肯定不会看的,但是依葫芦画瓢谁还不会呢

四.正式接入zha
由于对zha quirks代码结构不是很熟,国内资料也是极其少,所以以下操作或许不一定完全正确,如有更好方式还请大佬指教.
以下操作基于Home Assistant 2022.7.6
如果ha是以容器运行,请先进入到ha容器内再进行下述操作:
docker exec -it 你的ha容器名 bash

第一种方式:
1.在ha运行的机器中,进入到/usr/local/lib/python3.10/site-packages/zhaquirks/tuya/目录中.
cd /usr/local/lib/python3.10/site-packages/zhaquirks/tuya/

注意:因为很多同学安装位置不同,找不到上述路径也不知道如何查找,请尝试用root用户按以下命令进行搜索:
find / -path */site-packages/zhaquirks/tuya/ts0601_cover.py -type f



注意,不同的ha版本,python版本号可能不一样,请根据读者实际情况修改路径中红色部分.

2.在这个目录下找到ts0601_cover.py这个文件,编辑他
vi ts0601_cover.py
3.找到  "class TuyaMoesCover0601(TuyaWindowCover):"  这一行,大概在165行.
然后再随后的几行找到 "MODELS_INFO: ["  这一行
并在参考下面的设备型号格式,将这台不知名开窗器设备id啥的加一行进去,最终结果参考如下:

                               
登录/注册后可看大图

4.保存退出,重启ha,再重新进行添加zha设备,开窗器实体就会出现了,并且基本能完美工作.
注意,这种方式可能会在ha进行版本升级的时候失效,因为升级会把你之前修改好的文件覆盖成新版.新版如果还是没有加入这个型号的适配,就需要你再根据上述步骤操作一遍即可.

第二种方式:
以下内容假设ha配置文件所在目录为/config
1.在ha配置文件configuration.yaml同级目录下创建zha_quirks文件夹
cd /config
mkdir zha_quirks

2.进入zha_quirks目录并再创建tuya文件夹
cd /config/zha_quirks
mkdir tuya

3.将/usr/local/lib/python3.10/site-packages/zhaquirks/tuya/目录下的ts0601_cover.py和__init__.py这2个文件复制到步骤2创建的tuya文件夹中
注意,不同的ha版本,python版本号可能不一样,请根据读者实际情况修改路径中红色部分.
cp /usr/local/lib/python3.10/site-packages/zhaquirks/tuya/ts0601_cover.py /config/zha_quirks/tuya/

注意:因为很多同学安装位置不同,找不到上述路径也不知道如何查找,请尝试用root用户按以下命令进行搜索
find / -path */site-packages/zhaquirks/tuya/ts0601_cover.py -type f




4.编辑复制过来的这个ts0601_cover.py文件
vi /config/zha_quirks/tuya/ts0601_cover.py
5.找到  "class TuyaMoesCover0601(TuyaWindowCover):"  这一行,大概在165行.
然后再随后的几行找到 "MODELS_INFO: ["  这一行
并在参考下面的设备型号格式,将这台不知名开窗器设备id啥的加一行进去并保存,最终结果参考如下:

                               
登录/注册后可看大图



6.在ha配置文件configuration.yaml中加入以下内容并保存:
zha:
  enable_quirks: true
  custom_quirks_path: /config/zha_quirks
/config/zha_quirks是存放zha_quirks代码的文件夹路径,请根据读者实际情况填写

                               
登录/注册后可看大图



7.重启ha,并重新添加该设备,即可生成可用控制实体.

方式二相较于方式一操作繁杂一些,但是可以一定程度上避免升级带来的问题.但不能完全避免,如果升级变动过大,相关的初始化脚本有可能会报错导致实体失效,那么就再按照方式二的教程把新版文件再捣腾一遍基本就能解决.

附一下正确识别的实体图:

                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图


五.产品功能
虽然是涂鸦zigbee,但是产品本身的使用可以完全跟涂鸦无关,不需要涂鸦网关,也不需要下载任何app,单纯通过机器上唯一的一个按键就可以调整所有参数,比如开关正反转,防夹手力道,重新配对,重置等等功能.
目前使用下来效果真的很惊喜,基本是完美的.
为什么是基本完美呢,因为目前发现,调节开窗百分比的时候,只有很小的概率能收到停止信号.比方说从0调整到10%,当机器开到10%停下来后,ha上电机的状态仍然是opening,始终无法达到open终态.这就导致了当你在根据百分比打开窗户的时候,左边的全开按钮就一直是不可点击状态,只有手动点一下中间的停止按钮,全开按钮才会亮起来.当然,根据百分比关闭窗户情况类似,反之亦然就不再解释了.

六.产品演示









评分

参与人数 2金钱 +30 HASS币 +10 收起 理由
hyq + 10 感谢楼主分享!
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

2

主题

96

帖子

1016

积分

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
915
HASS币
30
 楼主| 发表于 2022-9-15 01:39:40 | 显示全部楼层
如果有大佬对github提pr流程熟悉,对zha的代码也熟悉,可以帮忙提交个pr
回复

使用道具 举报

27

主题

2143

帖子

8934

积分

论坛元老

Rank: 8Rank: 8

积分
8934
金钱
6786
HASS币
30

论坛元老

发表于 2022-9-15 08:28:49 | 显示全部楼层
想看看大佬安装出来的实际效果,我是那种平开+内倒的窗,想改怕丑而且好像我这个窗没有特别好的方案
回复

使用道具 举报

0

主题

608

帖子

2516

积分

金牌会员

Rank: 6Rank: 6

积分
2516
金钱
1908
HASS币
0
发表于 2022-9-15 08:48:29 | 显示全部楼层
也想看看效果
回复

使用道具 举报

22

主题

612

帖子

2757

积分

金牌会员

Rank: 6Rank: 6

积分
2757
金钱
2145
HASS币
0
发表于 2022-9-15 08:49:52 | 显示全部楼层
我有一个博云的zigbee燃气报警,在ZHA下被识别成了开关,然后重复报错,也可以用这个方法改嘛?
回复

使用道具 举报

5

主题

471

帖子

2114

积分

金牌会员

Rank: 6Rank: 6

积分
2114
金钱
1643
HASS币
0
发表于 2022-9-15 09:05:42 | 显示全部楼层
您好!我全屋涂鸦zigbee我想问一下您zha网关用的那一种?可否给一个网关链接!谢谢!
回复

使用道具 举报

2

主题

96

帖子

1016

积分

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
915
HASS币
30
 楼主| 发表于 2022-9-15 09:59:05 来自手机 | 显示全部楼层
之前拍了个视频,前面两楼的想看的啥效果?现在手机回复先贴个b站链接看看是不是你们想看的效果~【涂鸦zigbee推拉窗开窗器通过zha介入homeassistant和homekit-哔哩哔哩】 https://b23.tv/Xjyekpg
回复

使用道具 举报

2

主题

96

帖子

1016

积分

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
915
HASS币
30
 楼主| 发表于 2022-9-15 10:01:18 来自手机 | 显示全部楼层
a_dongde 发表于 2022-9-15 08:49
我有一个博云的zigbee燃气报警,在ZHA下被识别成了开关,然后重复报错,也可以用这个方法改嘛? ...

理论上只要是zigbee就能用这个方法,不过我买的这个小众产品恰好跟之前适配过得其他型号差不多,只是这个新型号没被录入,所以简单加一行型号进去就能正常用。如果之前完全没人适配过类似的,不是这么简单一行代码能解决的
回复

使用道具 举报

2

主题

96

帖子

1016

积分

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
915
HASS币
30
 楼主| 发表于 2022-9-15 10:02:53 来自手机 | 显示全部楼层
hyq 发表于 2022-9-15 09:05
您好!我全屋涂鸦zigbee我想问一下您zha网关用的那一种?可否给一个网关链接!谢谢! ...

小米多模网关刷的固件,论坛有教程的~大部分常用涂鸦zigbee都可以直接接入啥都不用改
回复

使用道具 举报

6

主题

170

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
金钱
2048
HASS币
20
发表于 2022-9-15 10:34:37 | 显示全部楼层
方式2 从第五步开始就行了 不用复制const.py __init__.py
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 09:37 , Processed in 0.138783 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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