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

 找回密码
 立即注册
查看: 218592|回复: 109

[插件集成] 终于搞定了格力云控,控制中央空调【局域网协议】

  [复制链接]

4

主题

67

帖子

734

积分

论坛技术达人

积分
734
金钱
657
HASS币
60
发表于 2020-1-7 18:36:05 | 显示全部楼层 |阅读模式
本帖最后由 goto100 于 2020-1-17 12:51 编辑

1月17更新:

建议使用 https://github.com/xcy1231/Ha-GreeCentralClimate 版本,可自动发现子设备,无需手动获取子设备 mac

原文:

自从家里安装了格力中央空调,接入 HA 就成了一个难啃的骨头。趁着最近手热,彻底研究了一下,终于被我搞定了。
过程就不细说了,非常曲折,曾一度想放弃走 modbus rtu 方案,但最终在严酷的现实(穷)面前(设备价格小2000),坚持了下来……

格力的通信协议采用的 udp,抓包不太方便,为了看代码各种逆向安卓 apk,最后终于被我找到相关协议代码,上网一搜,居然已经有了?!

https://github.com/arthurkrupa/gree-hvac-mqtt-bridge
https://github.com/RobHofmann/HomeAssistant-GreeClimateComponent

原来,格力云控的原理是把自己作为一个父设备,下面的空调作为子设备,而格力云控则直接通过格力普通空调的局域网 udp 协议对外暴露接口,问题在于,以上两个项目都是从普通空调做的逆向,并没有处理父子设备相关的逻辑,且中央空调和普通空调的功能上也有差异,需要做一些适配工作,HomeAssistant-GreeClimateComponent 的适配修改我已经做完了,目前还未合入,可以使用我的修改版 fork:

https://github.com/goto100/HomeAssistant-GreeClimateComponent

最终效果比较满意,状态读取、模式、温度、风向控制一应俱全。除了云控 api 偶尔会报错 400,状态更新可能有延迟。

此方案需要先获取到子设备的 mac 地址,此 mac 地址并不是真实 mac 地址,无法从路由器看到,还得通过官方云 api 获取,后续的运行时为完全局域网通信。感谢群内大佬 yinzhennan 之前的成果,这部分代码我可以不用重新写了:
https://github.com/goto100/HomeAssistant-GreeClimateComponent/blob/master/scripts/mac.py

python3 mac.py 用户名 密码


会输出所有子设备的名字和 mac,这里的 mac 就是 HA 插件配置文件中的 mac 了。

评分

参与人数 4金钱 +64 HASS币 +40 收起 理由
luzai + 8 论坛有你更精彩!
yinzhennan + 16 大神666!
Roger + 20 + 20 墙都不扶,就服楼主!
+ 20 + 20 膜拜大神!

查看全部评分

回复

使用道具 举报

27

主题

2143

帖子

8930

积分

论坛元老

Rank: 8Rank: 8

积分
8930
金钱
6782
HASS币
30

论坛元老

发表于 2020-1-7 18:55:26 | 显示全部楼层
感谢分享,请教下这个是否适用于非中央空调的型号呢?
回复

使用道具 举报

4

主题

68

帖子

916

积分

论坛技术达人

积分
916
金钱
843
HASS币
0
发表于 2020-1-7 19:10:14 | 显示全部楼层
本帖最后由 zxytddd 于 2020-1-7 19:34 编辑

感谢大佬,成功帮我节省了2000 购买 modbus RTU 的成本!
有一个疑问,
这个项目的README.md里提到,如果使用了安卓app,那么加密key可能会变化。
If your HVAC has already been configured to be controled remotely by an android app, the encryption key might have changed.

但是为了获取真实的MAC地址,又要先配置官方的API,就要使用安卓APP。
我的理解对么?
回复

使用道具 举报

4

主题

67

帖子

734

积分

论坛技术达人

积分
734
金钱
657
HASS币
60
 楼主| 发表于 2020-1-7 19:33:40 | 显示全部楼层
情非殇 发表于 2020-1-7 18:55
感谢分享,请教下这个是否适用于非中央空调的型号呢?

https://github.com/arthurkrupa/gree-hvac-mqtt-bridge
https://github.com/RobHofmann/HomeAssistant-GreeClimateComponent

这两个应该都可以。我的修改版理论上也是支持的。
回复

使用道具 举报

4

主题

67

帖子

734

积分

论坛技术达人

积分
734
金钱
657
HASS币
60
 楼主| 发表于 2020-1-7 19:41:56 | 显示全部楼层
zxytddd 发表于 2020-1-7 19:10
感谢大佬,成功帮我节省了2000 购买 modbus RTU 的成本!
有一个疑问,
这个项目的README.md里提到,如果使 ...

获取子设备 mac 地址的脚本应该不会影响这个,我也用 android 模拟器发送过相关请求,并未出现 key 变了的情况。

至于原组件中提到的情况,我用的 iOS,无法确认这个,不过理论上如果出现了,就用原文中提到的方法应该也可以解决。
回复

使用道具 举报

8

主题

870

帖子

5218

积分

论坛元老

Rank: 8Rank: 8

积分
5218
金钱
4348
HASS币
0
发表于 2020-1-7 21:14:23 | 显示全部楼层
学习,谢谢分享
回复

使用道具 举报

5

主题

142

帖子

968

积分

高级会员

Rank: 4

积分
968
金钱
825
HASS币
0
发表于 2020-1-8 08:48:10 | 显示全部楼层
留个脚印先
回复

使用道具 举报

4

主题

294

帖子

3982

积分

论坛元老

Rank: 8Rank: 8

积分
3982
金钱
3688
HASS币
0
发表于 2020-1-9 11:39:23 | 显示全部楼层
想从nodered直接控制,大佬这个可以在nodered里搞不
回复

使用道具 举报

0

主题

18

帖子

55

积分

注册会员

Rank: 2

积分
55
金钱
37
HASS币
0
发表于 2020-1-9 13:29:34 | 显示全部楼层
高手 什么时候能出 松下中央空调 接入协议啊
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2020-1-9 14:02:37 | 显示全部楼层
honry 发表于 2020-1-9 11:39
想从nodered直接控制,大佬这个可以在nodered里搞不

你中毒了!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 10:31 , Processed in 0.184582 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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