keln 发表于 2022-10-31 11:41:58

海尔空调接入到HASS

本帖最后由 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,双击该节点,在打开的窗口里单击服务器后面的那个笔的按钮

账号密码输不输不知道有没有影响,反正我是输了
node-red-contrib-haier(我们的主角,感谢ningcol的分享(海尔NodeRed节点发布【node-red-contrib-haier】 - 『Node-RED』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com))
随意拖一个海尔机器人到流程中,双击进行配置

安全性自己评估,没有研究,反正我是输了
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的配置)配置

2、mqtt接收命令



hass开机自动获取一次状态:

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




astang 发表于 2022-10-31 12:27:49

感谢楼主分享,虽然刚刚也才初步弄好,不过楼主这个帖子真的能帮助想我一样的小白!

keln 发表于 2022-10-31 12:50:48

astang 发表于 2022-10-31 12:27
感谢楼主分享,虽然刚刚也才初步弄好,不过楼主这个帖子真的能帮助想我一样的小白! ...

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

astang 发表于 2022-10-31 15:17:31

keln 发表于 2022-10-31 12:50
我看到你的疑问,可以参考我的例子,我的里面是做设备不是做实体的

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

keln 发表于 2022-10-31 15:28:26

astang 发表于 2022-10-31 15:17
我又按照你的设置了一遍,现在设备显示的不可用,不知道问题出到哪里了 ...

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

astang 发表于 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'

keln 发表于 2022-10-31 16:09:59

本帖最后由 keln 于 2022-10-31 16:11 编辑

astang 发表于 2022-10-31 15:48
在配置-设备与集成-MQTT集成里可以看到空调设备(根据yaml生成的),但是进去设备界面显示不可用,添加到主 ...
你可以试试一个调试方法:

添加一个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;
然后部署,完成后,点击在看看结果


astang 发表于 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')

keln 发表于 2022-10-31 17:01:50

本帖最后由 keln 于 2022-10-31 17:09 编辑

astang 发表于 2022-10-31 16:53
好像是空调名字的问题,我输入主卧空调会显示:{"/主卧空调/state/state":"offline","/主卧空调/state/mo ...
你可以在后面加一个debug看下原生输出的是什么,估计不同的空调输出不一样,处理语音结果的模块要修正才行

astang 发表于 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":""}
页: [1] 2 3 4
查看完整版本: 海尔空调接入到HASS