hudan717 发表于 2022-11-28 13:27:36

海信5G中央空调抓包接入HA并打通Homekit

本帖最后由 hudan717 于 2023-2-24 00:37 编辑

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



看下大致效果




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

以下原文


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

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

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

开始抓包

打开Stream和海信Ai享家APP
在APP任意发送一个控制指令

随后查看Stream的抓包结果

可以看到只有两种POST,分别是Ctrl跟Status,显而易见一个是发送控制,一个是获取状态
将两种报文都导出,可以看到类似的东西


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

抓包完成,我们开始配置Nodered跟MQTT

在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

将提供的流导入以后,把自己抓包的TXT中的相关参数填入我打#的地方


其中控制指令中需要自己在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了


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

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

cjnt007 发表于 2022-11-28 15:42:36

谢谢楼主的分享,看来我家的日立空调接入HA的想法能实现了。我家是用i-ezii连接的,也曾给app抓过包,但没有能花精力梳理出接入方案,现在正好可以蹭楼主的成熟方案啦!:lol

有情人好聚好散 发表于 2022-11-28 15:55:47

同海信荣耀家,刚装完ha,还在摸索,大佬现在就搞定空调了,不用买单独的vrf控制器了

trz0332 发表于 2022-11-28 21:12:50

这个可以有。回头研究一下我家那破还想冰箱能不能用

就要注册 发表于 2022-11-28 23:26:03

终于等到大神的方案,赶紧抄作业

sktyou 发表于 2022-11-29 11:48:25

这个方案是不是所有海信的智能设备都可以接入了

a97328371 发表于 2022-11-29 21:51:07

这个厉害,同理是不是很多设备都可以了

linjizhou 发表于 2022-12-1 08:29:07

cjnt007 发表于 2022-11-28 15:42
谢谢楼主的分享,看来我家的日立空调接入HA的想法能实现了。我家是用i-ezii连接的,也曾给app抓过包,但没 ...

我家也是日立的   不过是接485网关的app控制是跟智能家居一个app的   有空也试下抓包

sandra602 发表于 2023-1-3 15:55:17

谢谢楼主 我家用的是iez 的 :P

sandra602 发表于 2023-1-3 16:41:32

楼主 我用的是日立智家 抓的数据麻烦帮我看看设置的对不对另外 "iuIdList"这个是在哪里找啊? 找不到:'( 求指教
页: [1] 2 3 4 5
查看完整版本: 海信5G中央空调抓包接入HA并打通Homekit