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

标题: 【全网首发】日立中央空调i-EZII成功接入HA [打印本页]

作者: cjnt007    时间: 2024-6-7 16:54
标题: 【全网首发】日立中央空调i-EZII成功接入HA
本帖最后由 cjnt007 于 2025-2-24 09:04 编辑

最新


今天(2025年2月24日),在米家APP中可以看到绑定的日立中央空调在设备列表里显示出来了,这样就可以直接在米家里控制,不像以前只能通过小爱同学语音控制。于是在HA里打开插件Xiaomi Miot Auto 1.0.12配置,其中空调内机的设备实体都在列表里,勾选添加提交,就加到了HA中了。有此好事,下面的教程大家就不用看了。

[attach]68472[/attach]


########### 分割线 ###########


[attach]60082[/attach]


背景


家里空调用的是日立的,其专用i-EZII远程控制器虽然能接入到小度、米家、天猫精灵、华为等智能平台,但就是无法接入到HA,万物HA的乐趣就多了一丝遗憾,真是后悔当初没有下狠心花重金直接入手米家的VRF中央空调控制器或相关兼容产品,那样一步到位就省了后续的折腾,当然可能也就没有今天这篇分享了。


一直在网上搜索i-EZII接入HA方面的资料,用抓包工具查看过【日立智家】的数据,做过一些研究,无奈能力不行、精力也有限,整个项目基本没什么进展。幸运的是,2022年论坛上的一篇帖子海信5G中央空调抓包接入HA并打通Homekit让我看到了项目有望实现的曙光,该帖作者hudan717介绍的是实现海信中央空调接入HA的案例,而日立与海信是两个深度绑定的品牌,从抓包数据上看,实现远程控制的服务器,甚至API接口也几乎是一致的,这就有戏了。


因此,我也就顺理成章地站在巨人的肩膀上实现了日立中央空调接入HA的重大突破,所以,非常有必要特别感谢hudan717所做的探索!虽然时隔两年,但总算完成了,懒癌啊,没办法!


下面就正式进入正文。


实现


日立接入基本原理与海信接入是一样的,区别于hudan717的方案,我在他基础上以模块化的思路精简优化了一些代码,特别是增加了自动更新访问令牌功能,这样就再也不用频繁抓包手动更换token了。


HA配置文件里添加MQTT climate配置代码:


mqtt:
  #日立空调配置
  climate:
    - name: '储藏室空调'
      unique_id: chu_cang_shi_kong_diao
      modes:     #空调支持的模式
        - "off"
        - "cool"
        - "dry"
        - "fan_only"
        - "heat"
      fan_modes:    #风力
        - "low"
        - "medium"
        - "high"
      max_temp: 32        #空调最高温度
      min_temp: 16        #最低温度
      power_command_topic: "/ac_00/power"        #电源开关,climate.turn_on/off调用需要
      mode_command_topic: "/ac_00/mode"                #模式控制
      temperature_command_topic: "/ac_00/temp"        #温度控制
      fan_mode_command_topic: "/ac_00/fan"        #风力控制
      current_temperature_topic: "/ac_00/tempnow"        #当前室温(如果空调本身由这个功能可以加上)
      fan_mode_state_topic: "/ac_00/fannow"                #当前风力状态
      mode_state_topic: "/ac_00/state"                        #当前模式
      temperature_state_topic: "/ac_00/tempstate"        #当前选择的温度

此处配置代码里各topic定义上要注意几点:



Node-RED里导入以下流程:

[attach]60083[/attach]

[attach]60084[/attach]

[attach]60085[/attach]

[attach]60086[/attach]

上面所示“00 储藏室”“01 次卧”内机控制模块,按自己实际情况添加。


根据自己抓包获取的信息,修改下面所示几个function节点里的数据。抓包技能相信玩HA的终归要自行掌握的,我也就不多啰嗦了。


[attach]60087[/attach]

[attach]60094[/attach]

[attach]60095[/attach]

补充说明:上图中content-length后面的436是按我自己的请求体长度计算的,没有测试字符数是否会影响request,如果提交报失败,需要各位按自己的msg.payload内容重新计算下,或者按“控制指令配置”节点里的代码,用JSON.stringify(msg.payload).length来自动计算。

[attach]60096[/attach]

[attach]60088[/attach]

[attach]60089[/attach]

[attach]60090[/attach]


MQTT In/Out节点里的服务端,要按自己系统配置,主题要按HA里配置代码更改。


[attach]60091[/attach]


几个模块之间,使用link节点连接,按以下总览图恢复:


[attach]60092[/attach]


特别说明下,HA的MQTT Climate集成对于开机控制的机理我还没有完全搞明白,仪表板里,只提供了“关闭、制冷、除湿、送风、制热”几个模式按钮,查了一大堆资料后,只能在控制模块里添加代码变通实现,即判断在模式按钮点击时,如果是关机状态,则先发送开机指令,再发送模式切换指令,这样来实现开机。坛友们有如更好方法,也请多赐教!


[attach]60093[/attach]


最后


本接入方案是在坛友基础上进一步修改完成的,本着共享互助的精神分享到论坛上,也算是对多年来从论坛索取的回报,希望大家能把这样的理念宗旨传递下去,造福广大坛友。


此方案只经过短期的试用,还没有经过长时间的测试,在稳定、安全、合规等方面没有任何承诺。如果在按此方案实现过程中造成任何有形或无形的财产损失、人身伤害,或面临任何法律风险,本人不承担任何责任。






作者: ympchuan    时间: 2024-6-7 18:09
先赞,再慢慢学习,一直等着有大佬把i-EZII成功接入HA。
作者: wuqiyu007    时间: 2024-6-12 09:55
感谢感谢,我终于等到了。马上试验
作者: ybcswz    时间: 2024-6-12 11:30
先恭喜楼主。我的是老一代的i-EZ,用不了海信智家,之前也抓过包,因为懒+菜,没有搞定。
我之前在海鲜市场看过这个控制器,很便宜,貌似不能控制vam mini系列,放弃折腾的念头了
作者: cjnt007    时间: 2024-6-12 14:17
ybcswz 发表于 2024-6-12 11:30
先恭喜楼主。我的是老一代的i-EZ,用不了海信智家,之前也抓过包,因为懒+菜,没有搞定。
我之前在海鲜市场 ...

老一代的i-EZ控制器就是那个大很多的黑盒子吧,我最开始也是入的这个,1000大洋从海鲜市场淘的,搁置一年多后装修好房子,才装上没用几天就发现时常离线,咨询本地日立售后,都说一代盒子不稳定。这时候再找当时的卖家已经退不了了,就这样砸在手里。之后发现反而二代的更便宜,现在300多就可以从PDD上入一个支持米家的wifi版VRF盒子,唉!说多了心酸。
作者: wuqiyu007    时间: 2024-6-12 15:16
有几个问题问问楼主。运行这个的时候,需要退出APP 吗?
作者: cjnt007    时间: 2024-6-12 15:29
wuqiyu007 发表于 2024-6-12 15:16
有几个问题问问楼主。运行这个的时候,需要退出APP 吗?

是这样的,Node-RED与APP用同一个账号同时登录,会导致令牌不停刷新,虽然我也加入了自动更新令牌的流程,但多少会有点影响,如果不在意这些也无所谓。
最好的解决办法是,用一个家人的手机号注册一个新日立账号,再把设备分享给这个新账号,用新的账号登录,杜绝令牌重复刷新的问题。
作者: eric    时间: 2024-6-12 15:45
感谢分享!!这个是不是要定时更新token?
作者: cjnt007    时间: 2024-6-12 17:39
eric 发表于 2024-6-12 15:45
感谢分享!!这个是不是要定时更新token?

流程里检测到令牌失效会自动更新
作者: ybcswz    时间: 2024-6-14 12:47
cjnt007 发表于 2024-6-12 14:17
老一代的i-EZ控制器就是那个大很多的黑盒子吧,我最开始也是入的这个,1000大洋从海鲜市场淘的,搁置一年 ...

没错,就是这货,我也是一千多从海鲜市场买的。之前装空调外机的时候,我就让师傅预留了一根网线,回来自己摸索着装上,用着还行。

之前还从github上把Android应用源码找到了,因为比较菜,一直没怎么研究,按理说有源码比较容易搞定
作者: wuqiyu007    时间: 2024-6-14 15:55
搞好了,特别来感谢楼主。[attach]60330[/attach]
作者: cjnt007    时间: 2024-6-15 13:52
wuqiyu007 发表于 2024-6-14 15:55
搞好了,特别来感谢楼主。

祝贺,自己动手,丰衣足食
作者: wuqiyu007    时间: 2024-6-15 16:45
本帖最后由 wuqiyu007 于 2024-6-15 19:19 编辑
cjnt007 发表于 2024-6-15 13:52
祝贺,自己动手,丰衣足食

再次感谢楼主
作者: cjnt007    时间: 2024-6-19 16:18
本帖最后由 cjnt007 于 2024-6-19 17:18 编辑

这两天看了一些MQTT的技术资料,发现上面分享的方案里还有可以进一步优化精简的地方:
1、可以直接在Node-RED里使用MQTT自动发现功能创建Climate,不需要到HA的配置文件里添加那些配置代码。原先的内机配置代码复制一套改为json格式放到msg.payload里,topic采用'homeassistant/climate/内机ID/config',其中“内机ID”与unique_id保持一致,这样用MQTT发布到HA就可以创建一台内机,用个循环代码就可以创建多台内机,当然payload里面的name、unique_id、以及相应功能的topic都要用变量替换。
2、可以使用MQTT主题通配符精简mqtt in订阅节点,需要先把配置代码里所用的topic改为形如"climate/ac_00/xxxx",即前面加个"climate"前缀,然后在控制部分用一个mqtt in订阅节点,其中主题设置为"climate/+/#"即可代替掉所有室内机的mqtt in节点。
这样一来,极大降低了与HA的耦合性,流程节点也大量精简。
以上本人已经优化测试完成,感兴趣的朋友可以自己尝试优化下,不清楚的地方可以跟帖探讨

[attach]60498[/attach]

[attach]60499[/attach]

作者: wuqiyu007    时间: 2024-6-19 17:06
cjnt007 发表于 2024-6-19 16:18
这两天看了一些MQTT的技术资料,发现上面分享的方案里还有可以进一步优化精简的地方:
1、可以直接在Node-R ...

求精简方案,哈哈哈
作者: wuqiyu007    时间: 2024-6-20 09:11
content-length后面的数值在抓包信息里面有,这个应该是要修改成自己的才行。
作者: cjnt007    时间: 2024-6-21 15:20
本帖最后由 cjnt007 于 2024-6-21 15:22 编辑
wuqiyu007 发表于 2024-6-19 17:06
求精简方案,哈哈哈

首先,把【提取令牌】节点里的代码修改如下(要按自己实际情况对应修改):
  1. //global.set('ac_list', ['ac_00', 'ac_01', 'ac_02', 'ac_03', 'ac_04', 'ac_05', 'ac_06']);
  2. let ac_list_array = {
  3.         ac_sn: ['ac_00', 'ac_01', 'ac_02', 'ac_03', 'ac_04', 'ac_05', 'ac_06'],
  4.         ac_name: ['储藏室空调','次卧空调','书房空调','客房空调','餐厅空调','客厅空调','主卧空调'],
  5.         ac_id: ['chu_cang_shi_kong_diao', 'ci_wo_kong_diao', 'shu_fan_kong_diao', 'ke_fang_kong_diao', 'can_ting_kong_diao', 'ke_ting_kong_diao', 'zhu_wo_kong_diao']
  6. }
  7. global.set('ac_list_array', ac_list_array);
复制代码
注意:原先相关function节点里读取global.get('ac_list')的要更改为global.get('ac_list_array').ac_sn

生成空调实体【配置MQTT Climate】里的代码如下:

  1. let ac_list_array = global.get('ac_list_array');
  2. let ac_count = ac_list_array.ac_sn.length;    //内机数
  3. //生成x台空调内机的MQTT Climae配置信息,依次发送到HA
  4. for (let index = 0; index < ac_count; index++) {
  5.         let ac_name = ac_list_array.ac_name[index];
  6.         let ac_sn = ac_list_array.ac_sn[index];
  7.         let ac_id = ac_list_array.ac_id[index];
  8.         msg.payload = {
  9.                 name: ac_name,
  10.                 unique_id: ac_id,
  11.                 modes: ['off','cool','dry','fan_only','heat'],
  12.                 fan_modes: ['low','medium','high'],
  13.                 max_temp: 32,
  14.                 min_temp: 16,
  15.                 power_command_topic: `climate/${ac_sn}/power`,
  16.                 mode_command_topic: `climate/${ac_sn}/mode`,
  17.                 temperature_command_topic: `climate/${ac_sn}/temp`,
  18.                 fan_mode_command_topic: `climate/${ac_sn}/fan`,
  19.                 current_temperature_topic: `climate/${ac_sn}/tempnow`,
  20.                 fan_mode_state_topic: `climate/${ac_sn}/fannow`,
  21.                 mode_state_topic: `climate/${ac_sn}/state`,
  22.                 temperature_state_topic: `climate/${ac_sn}/tempstate`
  23.         }
  24.         msg.retain = true;
  25.         msg.qos = 0;
  26.         msg.topic = `homeassistant/climate/${ac_id}/config`;
  27.         node.send(msg);

  28. }
  29. return;
复制代码
【预处理】节点的代码因topic调整,substr函数截取字符参数作如下修改:
  1. /*
  2.   topic形如以下:
  3.   climate/ac_00/fan
  4.   climate/ac_00/temp
  5.   climate/ac_00/mode
  6.   climate/ac_00/power
  7. */

  8. let ctrl_value = msg.payload; //读取控制值
  9. let ctrl_code = msg.topic.substr(14);    //读取控制码
  10. let ac_name = msg.topic.substr(8,5); //读取内机名称
  11. msg.ac_sn = msg.topic.substr(11,2); //读取内机序号
复制代码
其他参看14楼里的内容


作者: wuqiyu007    时间: 2024-6-21 21:10
cjnt007 发表于 2024-6-21 15:20
首先,把【提取令牌】节点里的代码修改如下(要按自己实际情况对应修改):
注意:原先相关function节点里 ...

感谢,明天试试看
作者: onlynull    时间: 2024-7-18 19:30
本帖最后由 onlynull 于 2024-7-18 19:32 编辑

不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然后快捷指令调用接口实现控制
作者: cjnt007    时间: 2024-7-18 20:45
onlynull 发表于 2024-7-18 19:30
不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然 ...

大写的NB!正所谓八仙过海,各显神通
作者: 砂糖    时间: 2024-7-19 20:21
onlynull 发表于 2024-7-18 19:30
不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然 ...

卧槽 老哥求分享  我家是P1HEQ2的控制器
作者: 砂糖    时间: 2024-7-19 20:25
onlynull 发表于 2024-7-18 19:30
不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然 ...

手机里也有stream等抓包软件  奈何小白根本不懂代码 求大哥带带
作者: ethanwain    时间: 2024-8-10 01:03
砂糖 发表于 2024-7-19 20:21
卧槽 老哥求分享  我家是P1HEQ2的控制器

https://bbs.hassbian.com/thread-26452-1-1.html
我更新了同款温控器的流
作者: chenyang11    时间: 2024-10-31 17:34
砂糖 发表于 2024-7-19 20:25
手机里也有stream等抓包软件  奈何小白根本不懂代码 求大哥带带

我是用  fidder 抓的ios的包   百度搜一下“fidder抓https”
作者: dingsongf    时间: 2024-12-6 09:15
我的P1HVQA怎么抓到的是这个地址的。。。完全不一样
作者: wuqiyu007    时间: 2025-1-2 10:25
本帖最后由 wuqiyu007 于 2025-1-2 10:35 编辑

日立好像做了反抓包,抓不到了。以前的好像还可以用
作者: donghang1986    时间: 2025-2-23 12:26
正好需要,感谢
作者: BWMZYZ    时间: 2025-2-28 11:25
25年来问下是否成功了
作者: chaozhao20    时间: 2025-3-1 15:03
米家APP中可以看到绑定的日立中央空调? 我看不到啊,我也是iez的,用的抓包办法,米家绑定日立智家没有设备显示啊?求指教
作者: cjnt007    时间: 2025-3-2 11:14
chaozhao20 发表于 2025-3-1 15:03
米家APP中可以看到绑定的日立中央空调? 我看不到啊,我也是iez的,用的抓包办法,米家绑定日立智家没有设备 ...

会不会跟APP版本有关系,我使用的是9.10.701.8860。在“我的-添加其他平台-日立中央空调”里绑定了设备,在“米家”页面的设备列表里就会有内机列表显示。
作者: gaspar    时间: 2025-5-15 00:50
好东西,学习啦
作者: chris840903    时间: 2025-5-16 09:22
我对米家app列表添加第三方平台设备非常有兴趣,到底怎么实现的,难道只有日立的可以?
作者: cjnt007    时间: 2025-5-16 09:59
chris840903 发表于 2025-5-16 09:22
我对米家app列表添加第三方平台设备非常有兴趣,到底怎么实现的,难道只有日立的可以? ...

米家第三方平台的设备好像不是都能在HA里作为设备或实体列出的,能不能添加到HA里,看我1楼第一段描述的操作方法尝试下就知道了。
其规律好像是,第三方平台添加后,如果能在米家里列出,那么HA里也没有问题。
作者: suk    时间: 2025-7-5 14:32
cjnt007 发表于 2025-5-16 09:59
米家第三方平台的设备好像不是都能在HA里作为设备或实体列出的,能不能添加到HA里,看我1楼第一段描述的 ...

我的米家加完三方后,ha里显示不出来,这是咋回事啊,求指教。
作者: cjnt007    时间: 2025-7-6 07:16
suk 发表于 2025-7-5 14:32
我的米家加完三方后,ha里显示不出来,这是咋回事啊,求指教。

1、首先判断是否是账号冲突,尽可能不要用同一个账号(可用家人手机号重新注册一个日立账号,然后将新账号加入同一个家庭)。
2、前段时间APP强制升级了,“配置更新令牌”、“配置请求”和“控制指令配置”三个节点里,http请求头更新下:'x-his-version': '7.3.2.250526093027_release',另外'accept-encoding': 'gzip'这行注释掉或直接删除。





欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5