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

 找回密码
 立即注册
查看: 7649|回复: 39

[教程系列] 海尔空调接入到HASS

[复制链接]

1

主题

28

帖子

169

积分

论坛分享达人

积分
169
金钱
141
HASS币
0
发表于 2022-10-31 11:41:58 | 显示全部楼层 |阅读模式
本帖最后由 keln 于 2022-10-31 11:43 编辑

家里买了两台海尔空调,可以用海尔智家App控制,使用起来其实并不是很方便,这几天接触到了HASS,在论坛中搜索解决方案,终于在node-red板块搜到了解决方案,经过坛友提供的方法及摸索终于将这两台空调接入到了Hass中,看到原帖(海尔NodeRed节点发布【node-red-contrib-haier】 - 『Node-RED』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com))中还有不少坛友问如何接入,想到很多坛友也和我一样是hass和node-red的小白用户,正所谓取之于论坛,回馈于论坛,遂将研究结果和大家一起共享,大神略过。。。。思路参考风雨透大神的思路(海尔NodeRed节点发布【node-red-contrib-haier】 - 第10页 - 『Node-RED』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com)第98楼)
0x01、使用的工具
本人使用的群晖里的docker进行部署以下均为群晖里设置,其他请网上查找对应方法。
HASS: 采用的是docker部署,部署方式参考(Home Assistant 智能家居系统搭建指南(米家+Siri) - 知乎 (zhihu.com)),这里就不赘述了,这里注意如果想使用homekit网络采用使用与docker host相同的网络,不然iPhone等设备无法连接。
MQTT:采用docker部署(查找emqx镜像)进行部署即可(登入用户:admin 、public),此处注意两个端口的映射
1、18083:  管理界面端口
2、1883:服务的端口后面节点的配置里需要使用
其他很多端口我没有用到也没有研究,有兴趣的可以去研究下
NODE-RED:采用docker部署,此处网络我也是采用docker host相同的网络
0x02、安装:
HASS: 需要安装Node-RED Companion(可以通过hacs安装,部署参考里面有安装这个的方法)
NODE-RED: 需要node-red-contrib-haier(在节点管理->安装里查找管理,很方便)
0x03、配置:
node-red(地址:http://你的部署服务器地址:1880)
mqtt配置:
1、随意拖一个mqtt-in,双击该节点,在打开的窗口里单击服务器后面的那个笔的按钮
image_4.png image_7.png
账号密码输不输不知道有没有影响,反正我是输了
node-red-contrib-haier(我们的主角,感谢ningcol的分享(海尔NodeRed节点发布【node-red-contrib-haier】 - 『Node-RED』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com))
随意拖一个海尔机器人到流程中,双击进行配置
image_5.png image_6.png
安全性自己评估,没有研究,反正我是输了
hass配置:
node-red配置:参考论坛帖子,很多都有,只做集成如果不想再hass访问node-red的编辑页面视乎也可以不配置
0x04 海尔空调接入,其他设备需要自行研究此处只讲思路
1、hass添加mqtt的设备,需要修改configuration.yaml文件,参考附件里的内容,你可以自行修改
命令构成(仅配合我的流程):/{1}/{2}/{3}
{1}:在海尔智家中设置的设备名称,很重要,一定要设置,不然无法使用
{2}:cmd:设置命令,state:表示状态接收命令
{3}:实际命令
具体参考如下:
  #设置风力的命令
  fan_mode_command_topic: "/次卧空调/cmd/fan"    
  #接收空调风力状态的命令
  fan_mode_state_topic: "/次卧空调/state/fan"
  #接收可用状态状态的命令
  availability_topic: '/次卧空调/state/state'
  #设置温度的命令
  temperature_command_topic: '/次卧空调/cmd/temperature'
  #接收温度状态的命令
  temperature_state_topic: '/次卧空调/state/temperature'
  #接收当前温度状态的命令
  current_temperature_topic: '/次卧空调/state/currtemp'

2、node-red流程,具体流程参考附件
如果是空调需要变动以下就可以使用,
1、海尔默认配置(海尔机器人)和nas(MQTT的配置)配置
image_10.png
2、mqtt接收命令
image_9.png


hass开机自动获取一次状态:
image_8.png
触发条件:home assistant 开机
动作:mqtt publish:
Topic:你要获取的设备的状态,比如我要获取我的次卧空调如下:
/次卧空调/cmd/state
payload:20
为了防止开机mqtt设备还没有初始化故意延时20s,可以自己定义
以上就是本次将海尔空调接入到hass的过程,本人也是刚接触Hass,有很多不足,请大家包涵




haier空调示例.zip

3.3 KB, 下载次数: 312

评分

参与人数 2金钱 +32 收起 理由
+ 20 感谢楼主分享!
zxyny1989 + 12 感谢楼主分享!

查看全部评分

回复

使用道具 举报

9

主题

178

帖子

1363

积分

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1185
HASS币
0
发表于 2022-10-31 12:27:49 | 显示全部楼层
感谢楼主分享,虽然刚刚也才初步弄好,不过楼主这个帖子真的能帮助想我一样的小白!
回复

使用道具 举报

1

主题

28

帖子

169

积分

论坛分享达人

积分
169
金钱
141
HASS币
0
 楼主| 发表于 2022-10-31 12:50:48 | 显示全部楼层
astang 发表于 2022-10-31 12:27
感谢楼主分享,虽然刚刚也才初步弄好,不过楼主这个帖子真的能帮助想我一样的小白! ...

我看到你的疑问,可以参考我的例子,我的里面是做设备不是做实体的
回复

使用道具 举报

9

主题

178

帖子

1363

积分

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1185
HASS币
0
发表于 2022-10-31 15:17:31 | 显示全部楼层
keln 发表于 2022-10-31 12:50
我看到你的疑问,可以参考我的例子,我的里面是做设备不是做实体的

我又按照你的设置了一遍,现在设备显示的不可用,不知道问题出到哪里了
回复

使用道具 举报

1

主题

28

帖子

169

积分

论坛分享达人

积分
169
金钱
141
HASS币
0
 楼主| 发表于 2022-10-31 15:28:26 | 显示全部楼层
astang 发表于 2022-10-31 15:17
我又按照你的设置了一遍,现在设备显示的不可用,不知道问题出到哪里了 ...

设备在哪里显示不可用,是配置里显示不可用还是在仪表台显示不可用,两个是不同意思,在配置里应该是你配置不对,在仪表台应该是状态不对,你可以把的你的配置发个出来一起研究研究
回复

使用道具 举报

9

主题

178

帖子

1363

积分

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1185
HASS币
0
发表于 2022-10-31 15:48:49 | 显示全部楼层
在配置-设备与集成-MQTT集成里可以看到空调设备(根据yaml生成的),但是进去设备界面显示不可用,添加到主页卡片也是不可用。我是用addon安装的nodered插件,不是hacs
yaml里的配置
mqtt:
  button:
  - unique_id: zwkt-zt
    name: '主卧空调状态查看'
    command_topic: '/主卧空调/cmd/state'
  climate:
    - device:
        identifiers: zw-haier-kt
        manufacturer: Haier
        model: Haier
        name: 主卧空调
        sw_version: 1.1.3
      fan_mode_command_topic: "/主卧空调/cmd/fan"
      fan_mode_state_topic: "/主卧空调/state/fan"
      fan_modes:
        - auto
        - low
        - medium
        - high
      max_temp: 32.0
      min_temp: 16.0
      mode_command_topic: '/主卧空调/cmd/mode'
      mode_state_topic: '/主卧空调/state/mode'
      modes:
        - auto
        - 'off'
        - cool
        - heat
        - dry
        - fan_only
      name: 主卧空调
      availability_topic: '/主卧空调/state/state'
      availability_mode: all
      payload_off: 1
      payload_on:        0
      precision: 1
      temp_step: 1
      temperature_command_topic: '/主卧空调/cmd/temperature'
      temperature_state_topic: '/主卧空调/state/temperature'
      temperature_unit: C
      unique_id: zw-haier-kt
      current_temperature_topic: '/主卧空调/state/currtemp'
Snipaste_2022-10-31_15-48-13.png
回复

使用道具 举报

1

主题

28

帖子

169

积分

论坛分享达人

积分
169
金钱
141
HASS币
0
 楼主| 发表于 2022-10-31 16:09:59 | 显示全部楼层
本帖最后由 keln 于 2022-10-31 16:11 编辑
astang 发表于 2022-10-31 15:48
在配置-设备与集成-MQTT集成里可以看到空调设备(根据yaml生成的),但是进去设备界面显示不可用,添加到主 ...

你可以试试一个调试方法: 下载1.png

添加一个inject,一个function, 一个debug放到我图里的位置
cmdFrom =你要查看的空调
function3里填写代码
let cmdFrom = '主卧空调';
msg.cmdFrom = cmdFrom;
if (msg.payload != undefined && msg.payload != null && msg.payload != '') {
    msg.delay = msg.payload;
}
else {
    msg.delay = 0;
}

if (cmdFrom != '') {
    msg.payload = cmdFrom + "状态";
}

return msg;
然后部署,完成后,点击 2.png 在看看结果 3.png


回复

使用道具 举报

9

主题

178

帖子

1363

积分

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1185
HASS币
0
发表于 2022-10-31 16:53:26 | 显示全部楼层
keln 发表于 2022-10-31 16:09
你可以试试一个调试方法:

添加一个inject,一个function, 一个debug放到我图里的位置

好像是空调名字的问题,我输入主卧空调会显示:{"/主卧空调/state/state":"offline","/主卧空调/state/mode":"","/主卧空调/state/fan":"","/主卧空调/state/temperature":"","/主卧空调/state/power":"","/主卧空调/state/currtemp":""}。
在智家的语音助手里会显示主卧没有找到空调。我要是把空调名字改成默认的“挂式空调XXXX”,语音助手就会显示空调状态,但是返回的信息是:TypeError: Cannot read properties of null (reading 'length')
回复

使用道具 举报

1

主题

28

帖子

169

积分

论坛分享达人

积分
169
金钱
141
HASS币
0
 楼主| 发表于 2022-10-31 17:01:50 | 显示全部楼层
本帖最后由 keln 于 2022-10-31 17:09 编辑
astang 发表于 2022-10-31 16:53
好像是空调名字的问题,我输入主卧空调会显示:{"/主卧空调/state/state":"offline","/主卧空调/state/mo ...

你可以在 下载.png 后面加一个debug看下原生输出的是什么,估计不同的空调输出不一样,处理语音结果的模块要修正才行
回复

使用道具 举报

9

主题

178

帖子

1363

积分

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1185
HASS币
0
发表于 2022-10-31 17:10:41 | 显示全部楼层
本帖最后由 astang 于 2022-10-31 19:15 编辑
keln 发表于 2022-10-31 17:01
你可以在后面加一个debug看下原生输出的是什么,估计不同的空调输出不一样
...

我把cmdFrom = '挂式空调XXXX'输出的是:{"data":{"nlpTime":{"query_device_table":0,"nlpTimecost":0,"device_execute":0},"termAction":"response","nlpResult":{"isContinuousDialogue":false,"sync_tts":"小优没有查到相关信息,请检查设备联网状态,稍后再试","appVersion":"7.0.4","retStatus":2,"userQuery":"挂式空调XXX状态","playtts":3,"parseStatus":true,"isDialog":false,"response":"小优没有查到相关信息,请检查设备联网状态,稍后再试","domain":"Dev.airConditioner","moreDevice":false,"nlpVersion":"dm.2.1.18_2-nlu.TPL","category":"command","quitContinuousDialogue":"yes","results":[{"dev":{"nickName":"挂式空调XXXX","wifiType":".....","name":"挂式空调XXXX","id":"......","type":"airConditioner"},"nlpParams":{},"params":{"domain":"Dev.airConditioner","nickname":"挂式空调XXXX","property":"all","name":"挂式空调XXXX","action":"statusEnquiry"}}],"isMultiDialogue":false}},"processorContextList":[],"response":"/ù空调现在的温度是26.00度","retCode":"00000","retInfo":"/ù小优没有查到相关信息,请检查设备联网状态,/ù稍后再试","sn":"......","triggerId":"","uSpanId":"","uTraceId":""}
改成智家里改过的设备名字“书房空调”会输出:{"data":{"nlpTime":{"query_device_table":0,"nlpTimecost":0,"device_execute":0},"termAction":"termDecide","nlpResult":{"isContinuousDialogue":false,"sync_tts":"书房没有找到空调呢","appVersion":"7.0.4","retStatus":2,"errorInfo":"没有找到当前设备","userQuery":"书房空调状态","playtts":3,"parseStatus":true,"isDialog":false,"response":"书房没有找到空调呢","domain":"Dev.airConditioner","moreDevice":false,"nlpVersion":"dm.2.1.18_2-nlu.TPL","category":"command","quitContinuousDialogue":"yes","results":[{"nlpParams":{},"params":{"domain":"Dev.airConditioner","property":"all","action":"statusEnquiry","errorCode":"0002","errorInfo":"没有找到当前设备","device":"空调","room":"书房"}}],"isMultiDialogue":false}},"processorContextList":[],"response":"/ù书房没有找到空调呢","retCode":"I00004-00011","retInfo":"/ù书房没有找到空调呢","sn":"......","triggerId":"","uSpanId":"","uTraceId":""}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-26 20:16 , Processed in 0.061029 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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