找回密码
 立即注册
搜索
查看: 17087|回复: 47

[新奇玩法] 海信5G中央空调抓包接入HA并打通Homekit

  [复制链接]

14

主题

75

回帖

1067

积分

金牌会员

积分
1067
金钱
968
HASS币
90
发表于 2022-11-28 13:27:36 | 显示全部楼层 |阅读模式
本帖最后由 hudan717 于 2023-2-24 00:37 编辑

2.24更新
1.修改了一个在线下空调面板上操作时可能导致MQTT状态不同步更新的小BUG,已经在原文的MQTT代码中更新,照搬即可
2.原先NR中是将状态流同统一的节点去分配,可能导致各个空调之间状态发生同步。因此建议大家把每个分机的控制流跟状态流都分开,直接在原来的NR流附件中编辑分离开即可。改成下图这样,节点内容不变,我就不另外上传附件了。
微信截图_20230224001249.png


看下大致效果


GIF.gif

可以注意到,HA上发送指令以后,状态并不是实时更新的,而是需要通过MQTT返回的状态来进行实体的状态变更

以下原文


据说海信是第一家支持直连HomeKit的中央空调厂家,可惜我买的并不是那个型号,也没了解过价格。


这个教程理论上支持所有支持接入“海信Ai享家”APP的空调设备,包括海信的“荣耀家”“Ai家”“别墅家”等等。

设备控制基于MQTT实现,因此如果其他品牌的空调也能通过各自的APP进行远程控制,那么理论上只要修改抓包参数,也能实现相同效果。

开始抓包

打开Stream和海信Ai享家APP
在APP任意发送一个控制指令
微信图片_20221128124217.jpg
随后查看Stream的抓包结果
微信图片_20221128124223.jpg
可以看到只有两种POST,分别是Ctrl跟Status,显而易见一个是发送控制,一个是获取状态
将两种报文都导出,可以看到类似的东西
微信截图_20221128124630.png

红框中的就是最重要的认证密钥,海信使用的是比较原始的Bearer Token。因此可以省去验证,只要不修改APP登录密码,理论上就可以一直用
但是,在成功抓包并在HA运行成功后,非必要,不要重新打开APP进行控制,否则会刷新Token,导致原来抓包来的这个密钥失效,需要重新获取并在Nodered上进行修改!

抓包完成,我们开始配置Nodered跟MQTT
微信图片_20221128125321.png
在Configuration.yaml添加如下代码(上图是我把MQTT单独分开一个文档存到package,正常情况下只要在Configuration中配置即可)
mqtt:
  climate:
    - name: '卧室空调'
      modes:     #空调支持的模式
        - "off"
        - "cool"
        - "dry"
        - "fan_only"
        - "heat" 
        - "auto" 
      fan_modes:    #风力
        - "low"
        - "medium"
        - "high"
      max_temp: 32    #空调最高温度
      min_temp: 16     #最低温度
      mode_command_topic: "/woshikongtiao/mode"       #模式控制,冒号后面的mqtt地址自行修改,以下相同
      temperature_command_topic: "/woshikongtiao/temp"    #温度控制
      fan_mode_command_topic: "/woshikongtiao/fan"               #风力控制
      current_temperature_topic: "/woshikongtiao/tempnow"         #当前室温(如果空调本身由这个功能可以加上)
      fan_mode_state_topic: "/woshikongtiao/fannow"             #当前风力状态,用来进行同步,以下相同
      mode_state_topic: "/woshikongtiao/state"          #当前模式
      temperature_state_topic: "/woshikongtiao/tempstate"        #当前选择的温度


代码是一台内机,有几台就要继续往下加

配置好MQTT,可以先重启一下HA让设置生效,方便接下来在NR中进行调试

来到Nodered
flows.zip (8.71 KB, 下载次数: 110)
将提供的流导入以后,把自己抓包的TXT中的相关参数填入我打#的地方
微信截图_20221128130528.png

其中控制指令中需要自己在ctrllist中进行修改,找到
{"iuIdList":[{"iezCode":"861883……………………这段指令中的"ctrljson":{ xxxxx },更换成对应的指令,即可实现控制

低风:"ctrlJson": { "wind": 1 }
中风:"ctrlJson": { "wind": 2 }
高风:"ctrlJson": { "wind": 3 }
关闭:"ctrlJson": { "onoff": 0 }
打开:"ctrlJson": { "onoff": 1 }
制冷:"ctrlJson": { "mode": 1 }
除湿:"ctrlJson": { "mode": 2 }
送风:"ctrlJson": { "mode": 3 }
制热:"ctrlJson": { "mode": 4 }
温度调节:"ctrlJson": { "temp": 16 }  #温度默认就填写16即可,因为我在流中需要搜索16并替换成你设置的温度来实现控制

在HA中把生成的空调实体接入到homekit,调试无问题后就可以开始使用了,记住,一旦调试通过,没有事情就不要重新打开APP了


这个教程相对比较小众,但是作为抛砖引玉,其他品牌的中央空调如果也能抓到包的话,稍微修改一下流也能实现相同的控制。

帖子写的比较潦草,也没排版,如果有其他问题的话欢迎留言。
总.png

评分

参与人数 5金钱 +61 HASS币 +20 收起 理由
Alkali + 10 高手,这是高手!
隔壁的王叔叔 + 10 感谢楼主分享!
tianxi2003 + 5
windgo + 16 论坛有你更精彩!
+ 20 + 20 高手,这是高手!

查看全部评分

回复

使用道具 举报

14

主题

75

回帖

1067

积分

金牌会员

积分
1067
金钱
968
HASS币
90
 楼主| 发表于 2023-2-15 19:30:00 | 显示全部楼层
chaozhao20 发表于 2023-2-15 16:14
这个是什么意思呢?改成什么?

mqtt的topic自己编辑就可以,想改什么改什么
回复

使用道具 举报

14

主题

75

回帖

1067

积分

金牌会员

积分
1067
金钱
968
HASS币
90
 楼主| 发表于 2023-2-17 14:33:11 | 显示全部楼层
chaozhao20 发表于 2023-2-16 03:57
大佬能否详细说下这个空调mqtt的配置使用,我在ha里面没有办法控制空调,有空调实体(不能通过ui设置)但 ...

看一下mqtt的yaml配置跟nr节点里的topic有没有对上, 名字对不上的话就没法控制。
https://www.home-assistant.io/integrations/climate.mqtt/
具体的可以看一下官方文档
回复

使用道具 举报

14

主题

75

回帖

1067

积分

金牌会员

积分
1067
金钱
968
HASS币
90
 楼主| 发表于 2023-3-17 12:17:53 | 显示全部楼层
chaozhao20 发表于 2023-3-17 01:54
'X-His-Timestamp': #,
大佬,控制流里面这个时间戳不能填固定的呀,厂家那边会报警, ...

可以,只要符合mysql标准就行,这个应该没有什么影响
回复

使用道具 举报

14

主题

75

回帖

1067

积分

金牌会员

积分
1067
金钱
968
HASS币
90
 楼主| 发表于 2023-3-20 20:35:04 | 显示全部楼层
chaozhao20 发表于 2023-3-19 03:42
兄弟,一个off  模式,如何能实现开机或者关机的,我抄的你的nodered,没有这个功能,一直都是发送off。就 ...

要跟抓包数据中的开关状态对应,off就是0
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-6-29 19:32 , Processed in 0.079620 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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