iwha 发表于 2019-2-21 16:03:10

解决空调伴侣控制格力空调【YAP0FB2】的问题及抓包分析

本帖最后由 iwha 于 2019-11-11 15:03 编辑

我的格力空调遥控器型号是YAP0FB2, 米家app使用正常,但是ha插件https://github.com/rytilahti/python-miio 以及 https://github.com/syssi/xiaomi_airconditioningcompanion 都无法使用
安装了homebridge-miio 也不能使用

只好自己动手抓包分析, 经过反复对比终于确定了最终匹配模式,然后在现有插件基础上做了写改动和补充。

针对python-miio的改动:
》更具体精准的 发送码 模式

针对syssi大拿的代码改动:
》添加了led灯初始化状态, 原来的代码开机是关闭led灯

我的米家空调伴侣V2, V3 都可以使用配合格力空调使用, 只适用于遥控器型号为YAP0FB2的格力空调以及米家app匹配格力第2、3套方案

使用方式: 下载压缩包,把两个文件放入~/.homeassistant/custom_component/climate/
配置和https://github.com/syssi/xiaomi_airconditioningcompanion 基本相同,只需要修改一下platform
climate:
- platform: xiaomi_miio_gree
    name: AC
    host: 192.168.10.12
    token: 【token】
    target_sensor: sensor.temperature_158d0001f53706
    scan_interval: 10

抓包分析(只针对格力空调 设备类型为gree_2 - 0100010727)
如果你的空调还是不能完全匹配,可以试试自己抓包分析几个计算用的常数
抓包分析很简单
1. 安装wireshark
2. 安装android模拟器(我用的是Nox App Player)然后安装android版米家app
3. 安装nodejs 版的miio , 主要用来解析通讯包

npm install -g miio

4. 代开模拟器中的米家app,并打开空调伴侣控制界面
5. 打开wireshark, 选择网络接口,一般可忽略

6. 在wireshark 顶部 “Apply a display filter“ 填写

udp.dstport == 54321 or udp.srcport == 54321

7. 点击蓝色鲨鱼鳍 按钮开始监听
8. 在模拟器米家app操作伴侣, 刚开始的时候最好记住自己进行了那些操作和温度、扫风灯状态
9. 点击wireshar红色停止按钮 结束抓包
10. 选择wireshark 菜单 文件 -》 Export Packwt Dissections -》 As JSON导出 json 文件
11. 打开命令行运行, 其中token就是空调伴侣的token

miio protocol json-dump dump.json--token 【伴侣token】

12. 解析出的params 中类似
010001072711011801001908205002102000E01908207002000010C0
就是我们需要的


13.然后按照匹配模式分组,002050021020000207002000000

然后根据公式计算
( x + 设定温度 - 17 ) % 16 = 红框中的数


其中tt1、tt2、tt3 都按上面的公式计算x

tt1 x变化不大, 我的空调除了auto外的模式都为1
tt2、tt3 x每个模式都不同
pmp 是常数 每种模式以及关闭状态都可能不一样


HomeAssistant > 0.89 自定义路径变化为conf/custom_components/xiaomi_miio_gree/climate.py
修复最新空调伴侣固件无法关空调的问题
修复不同风速无法开机的问题





* 2019.11.11 修复了HA 0.101.3的兼容性问题 (基于https://github.com/syssi/xiaomi_airconditioningcompanion修改版本,感谢syssi)








新生活 发表于 2019-2-21 17:04:39

本帖最后由 新生活 于 2019-2-21 17:06 编辑

谢谢分享,赞,请问led状态可以设置吗?

iwha 发表于 2019-2-21 17:12:59

新生活 发表于 2019-2-21 17:04
谢谢分享,赞,请问led状态可以设置吗?

现在是根据上一次的状态设置的

chenquanhao 发表于 2019-2-21 18:10:11

没明白,用ha控制,不也是先通过米家匹配了,ha控制空调伴侣发送匹配好的指令的吗?为什么会出现米家可以ha不可以的情况?

iwha 发表于 2019-2-21 18:13:22

chenquanhao 发表于 2019-2-21 18:10
没明白,用ha控制,不也是先通过米家匹配了,ha控制空调伴侣发送匹配好的指令的吗?为什么会出现米家可以ha ...

米家app也是发送指令给伴侣,再根据匹配空调找到合适的红外码再发送
因为miio发送的空调码不匹配,所以伴侣不能正确解析指令导致我的空调不工作

honry 发表于 2019-2-21 18:25:25

看一下怎么解决的,看样子我的也可以继续用了

wukequdai5426 发表于 2019-2-21 19:01:13

感谢分享

chenquanhao 发表于 2019-2-21 20:39:13

iwha 发表于 2019-2-21 18:13
米家app也是发送指令给伴侣,再根据匹配空调找到合适的红外码再发送
因为miio发送的空调码不匹配,所以伴 ...

空调码不是通过米家使空调伴侣找了合适的红外码,保存到伴侣机器中。

之后无论米家还是ha,都只是让空调伴侣发送之前保存好的红外码吗?

难道是每次发送操作指令时匹配一次红外码?
虚心求教:)

iwha 发表于 2019-2-21 21:15:36

chenquanhao 发表于 2019-2-21 20:39
空调码不是通过米家使空调伴侣找了合适的红外码,保存到伴侣机器中。

之后无论米家还是ha,都只是让空调 ...

米家App的工作流程是这样的:
伴侣界面操作 -》 发送http请求到小米服务器 -》返回红外码 -》 发射红外码

如果通过udp发送给伴侣的请求码 格式不正确的话,结果是无法得到正确的红外码,要么干脆不发射红外命令(多数是这种情况),要么发射错误的红外命令

chenquanhao 发表于 2019-2-21 22:22:48

iwha 发表于 2019-2-21 21:15
米家App的工作流程是这样的:
伴侣界面操作 -》 发送http请求到小米服务器 -》返回红外码 -》 发射红外码 ...

谢谢指教。如果这样,空调伴侣岂不是不能在局域网下工作?我找时间试验下才行,我一直以为初次匹配好了,就下载了一套红外码保存里本地。
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 解决空调伴侣控制格力空调【YAP0FB2】的问题及抓包分析