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

 找回密码
 立即注册
楼主: cjnt007

[经验分享] 【全网首发】日立中央空调i-EZII成功接入HA

[复制链接]

0

主题

279

帖子

2146

积分

金牌会员

Rank: 6Rank: 6

积分
2146
金钱
1867
HASS币
0
发表于 2024-6-14 15:55:35 | 显示全部楼层
搞好了,特别来感谢楼主。 微信截图_20240614155509.png
回复

使用道具 举报

20

主题

485

帖子

3206

积分

论坛元老

Rank: 8Rank: 8

积分
3206
金钱
2721
HASS币
8
 楼主| 发表于 2024-6-15 13:52:44 | 显示全部楼层
wuqiyu007 发表于 2024-6-14 15:55
搞好了,特别来感谢楼主。

祝贺,自己动手,丰衣足食
回复

使用道具 举报

0

主题

279

帖子

2146

积分

金牌会员

Rank: 6Rank: 6

积分
2146
金钱
1867
HASS币
0
发表于 2024-6-15 16:45:04 | 显示全部楼层
本帖最后由 wuqiyu007 于 2024-6-15 19:19 编辑
cjnt007 发表于 2024-6-15 13:52
祝贺,自己动手,丰衣足食

再次感谢楼主
回复

使用道具 举报

20

主题

485

帖子

3206

积分

论坛元老

Rank: 8Rank: 8

积分
3206
金钱
2721
HASS币
8
 楼主| 发表于 2024-6-19 16:18:53 | 显示全部楼层
本帖最后由 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的耦合性,流程节点也大量精简。
以上本人已经优化测试完成,感兴趣的朋友可以自己尝试优化下,不清楚的地方可以跟帖探讨

01.jpg

02.jpg
回复

使用道具 举报

0

主题

279

帖子

2146

积分

金牌会员

Rank: 6Rank: 6

积分
2146
金钱
1867
HASS币
0
发表于 2024-6-19 17:06:20 | 显示全部楼层
cjnt007 发表于 2024-6-19 16:18
这两天看了一些MQTT的技术资料,发现上面分享的方案里还有可以进一步优化精简的地方:
1、可以直接在Node-R ...

求精简方案,哈哈哈
回复

使用道具 举报

0

主题

279

帖子

2146

积分

金牌会员

Rank: 6Rank: 6

积分
2146
金钱
1867
HASS币
0
发表于 2024-6-20 09:11:02 | 显示全部楼层
content-length后面的数值在抓包信息里面有,这个应该是要修改成自己的才行。
回复

使用道具 举报

20

主题

485

帖子

3206

积分

论坛元老

Rank: 8Rank: 8

积分
3206
金钱
2721
HASS币
8
 楼主| 发表于 2024-6-21 15:20:17 | 显示全部楼层
本帖最后由 cjnt007 于 2024-6-21 15:22 编辑
wuqiyu007 发表于 2024-6-19 17:06
求精简方案,哈哈哈

首先,把【提取令牌】节点里的代码修改如下(要按自己实际情况对应修改):
//global.set('ac_list', ['ac_00', 'ac_01', 'ac_02', 'ac_03', 'ac_04', 'ac_05', 'ac_06']);
let ac_list_array = {
        ac_sn: ['ac_00', 'ac_01', 'ac_02', 'ac_03', 'ac_04', 'ac_05', 'ac_06'],
        ac_name: ['储藏室空调','次卧空调','书房空调','客房空调','餐厅空调','客厅空调','主卧空调'],
        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']
}
global.set('ac_list_array', ac_list_array);
注意:原先相关function节点里读取global.get('ac_list')的要更改为global.get('ac_list_array').ac_sn

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

let ac_list_array = global.get('ac_list_array');
let ac_count = ac_list_array.ac_sn.length;    //内机数
//生成x台空调内机的MQTT Climae配置信息,依次发送到HA
for (let index = 0; index < ac_count; index++) {
        let ac_name = ac_list_array.ac_name[index];
        let ac_sn = ac_list_array.ac_sn[index];
        let ac_id = ac_list_array.ac_id[index];
        msg.payload = {
                name: ac_name,
                unique_id: ac_id,
                modes: ['off','cool','dry','fan_only','heat'],
                fan_modes: ['low','medium','high'],
                max_temp: 32,
                min_temp: 16,
                power_command_topic: `climate/${ac_sn}/power`,
                mode_command_topic: `climate/${ac_sn}/mode`,
                temperature_command_topic: `climate/${ac_sn}/temp`,
                fan_mode_command_topic: `climate/${ac_sn}/fan`,
                current_temperature_topic: `climate/${ac_sn}/tempnow`,
                fan_mode_state_topic: `climate/${ac_sn}/fannow`,
                mode_state_topic: `climate/${ac_sn}/state`,
                temperature_state_topic: `climate/${ac_sn}/tempstate`
        }
        msg.retain = true;
        msg.qos = 0;
        msg.topic = `homeassistant/climate/${ac_id}/config`;
        node.send(msg);

}
return;
【预处理】节点的代码因topic调整,substr函数截取字符参数作如下修改:
/*
  topic形如以下:
  climate/ac_00/fan
  climate/ac_00/temp
  climate/ac_00/mode
  climate/ac_00/power
*/

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

回复

使用道具 举报

0

主题

279

帖子

2146

积分

金牌会员

Rank: 6Rank: 6

积分
2146
金钱
1867
HASS币
0
发表于 2024-6-21 21:10:30 | 显示全部楼层
cjnt007 发表于 2024-6-21 15:20
首先,把【提取令牌】节点里的代码修改如下(要按自己实际情况对应修改):
注意:原先相关function节点里 ...

感谢,明天试试看
回复

使用道具 举报

0

主题

1

帖子

22

积分

新手上路

Rank: 1

积分
22
金钱
21
HASS币
0
发表于 2024-7-18 19:30:16 | 显示全部楼层
本帖最后由 onlynull 于 2024-7-18 19:32 编辑

不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然后快捷指令调用接口实现控制
F3F249624B8F6A3D7F7058C3D430AAB8.png
回复

使用道具 举报

20

主题

485

帖子

3206

积分

论坛元老

Rank: 8Rank: 8

积分
3206
金钱
2721
HASS币
8
 楼主| 发表于 2024-7-18 20:45:27 | 显示全部楼层
onlynull 发表于 2024-7-18 19:30
不会写ha的集成,然后把日立智家app的登录、设备状态获取、控制的api给抓包了,写了个脚本放在nas上,然 ...

大写的NB!正所谓八仙过海,各显神通
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 18:54 , Processed in 0.063827 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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