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

标题: 海尔空调接入到HASS [打印本页]

作者: keln    时间: 2022-10-31 11:41
标题: 海尔空调接入到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,双击该节点,在打开的窗口里单击服务器后面的那个笔的按钮
[attach]42687[/attach][attach]42688[/attach]
账号密码输不输不知道有没有影响,反正我是输了
node-red-contrib-haier(我们的主角,感谢ningcol的分享(海尔NodeRed节点发布【node-red-contrib-haier】 - 『Node-RED』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com))
随意拖一个海尔机器人到流程中,双击进行配置
[attach]42689[/attach][attach]42690[/attach]
安全性自己评估,没有研究,反正我是输了
hass配置:
node-red配置:参考论坛帖子,很多都有,只做集成如果不想再hass访问node-red的编辑页面视乎也可以不配置
0x04 海尔空调接入,其他设备需要自行研究此处只讲思路
1、hass添加mqtt的设备,需要修改configuration.yaml文件,参考附件里的内容,你可以自行修改
命令构成(仅配合我的流程):/{1}/{2}/{3}
{1}:在海尔智家中设置的设备名称,很重要,一定要设置,不然无法使用
{2}:cmd:设置命令,state:表示状态接收命令
{3}:实际命令
具体参考如下:
  1.   #设置风力的命令
  2.   fan_mode_command_topic: "/次卧空调/cmd/fan"   
  3.   #接收空调风力状态的命令
  4.   fan_mode_state_topic: "/次卧空调/state/fan"
  5.   #接收可用状态状态的命令
  6.   availability_topic: '/次卧空调/state/state'
  7.   #设置温度的命令
  8.   temperature_command_topic: '/次卧空调/cmd/temperature'
  9.   #接收温度状态的命令
  10.   temperature_state_topic: '/次卧空调/state/temperature'
  11.   #接收当前温度状态的命令
  12.   current_temperature_topic: '/次卧空调/state/currtemp'
复制代码

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


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





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

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

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

设备在哪里显示不可用,是配置里显示不可用还是在仪表台显示不可用,两个是不同意思,在配置里应该是你配置不对,在仪表台应该是状态不对,你可以把的你的配置发个出来一起研究研究
作者: astang    时间: 2022-10-31 15:48
在配置-设备与集成-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
本帖最后由 keln 于 2022-10-31 16:11 编辑
astang 发表于 2022-10-31 15:48
在配置-设备与集成-MQTT集成里可以看到空调设备(根据yaml生成的),但是进去设备界面显示不可用,添加到主 ...

你可以试试一个调试方法:[attach]42713[/attach]

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



作者: astang    时间: 2022-10-31 16:53
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
本帖最后由 keln 于 2022-10-31 17:09 编辑
astang 发表于 2022-10-31 16:53
好像是空调名字的问题,我输入主卧空调会显示:{"/主卧空调/state/state":"offline","/主卧空调/state/mo ...

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

作者: astang    时间: 2022-10-31 17:10
本帖最后由 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":""}
作者: keln    时间: 2022-10-31 17:23
astang 发表于 2022-10-31 17:10
我把cmdFrom = '挂式空调C3CE'输出的是:{"data":{"nlpTime":{"query_device_table":0,"nlpTimecost":0," ...

你这个是有问题:"retInfo": "/ù小优没有查到相关信息,请检查设备联网状态,/ù稍后再试",
有设备不是返回这个:
{"data":{"nlpTime":{"query_device_table":0,"nlpTimecost":0,"device_execute":0},"termAction":"response","nlpResult":{"isContinuousDialogue":false,"sync_tts":"小优为你查到,当前空调为关机状态,风速为高风,设置温度为20度,已开启制热,","appVersion":"7.0.4","retStatus":2,"userQuery":"次卧空调状态","playtts":3,"parseStatus":true,"isDialog":false,"response":"小优为你查到,当前空调为关机状态,风速为高风,设置温度为20度,已开启制热,","domain":"Dev.airConditioner","moreDevice":false,"nlpVersion":"dm.2.1.18_2-nlu.TPL","category":"command","quitContinuousDialogue":"yes","results":[{"dev":{"nickName":"次卧空调","wifiType":"00000000000000008080000000041410","name":"次卧空调","id":"04FA83851160","type":"airConditioner","room":"次卧"},"nlpParams":{},"params":{"save":"","consumption":"","currenttemperature":"20","powerstate":"关机","mode":"制热模式","domain":"Dev.airConditioner","nickname":"次卧空调","property":"all","name":"次卧空调","action":"statusEnquiry","windspeed":"高风","device":"空调","direction":""}}],"isMultiDialogue":false}},"processorContextList":[],"response":"/ù小优为你查到,当前空调为关机状态,/ù风速为高风,设置温度为20度,已开启制热","retCode":"00000","retInfo":"/ù小优为你查到,当前空调为关机状态,/ù风速为高风,设置温度为20度,已开启制热","sn":"20221031172206726000714840","triggerId":"","uSpanId":"","uTraceId":""}
你可以用你的海尔智家里用小优问相同的问题看他返回什么
作者: astang    时间: 2022-10-31 17:28
keln 发表于 2022-10-31 17:23
你这个是有问题:"retInfo": "/ù小优没有查到相关信息,请检查设备联网状态,/ù稍后再试",
有设备不是 ...

我在小优里问:挂式空调XXXX状态,他会回复现在空调是26.00度,希望是你喜欢的温度
作者: keln    时间: 2022-10-31 17:34
astang 发表于 2022-10-31 17:28
我在小优里问:挂式空调XXXX状态,他会回复现在空调是26.00度,希望是你喜欢的温度 ...

那你用语音开机,然后再查下信息
从语音回执来看是没有找到设备的。
作者: astang    时间: 2022-10-31 17:42
keln 发表于 2022-10-31 17:34
那你用语音开机,然后再查下信息
从语音回执来看是没有找到设备的。

app用语音开关空调都是正常的,返回的信息“书房空调已打开”“下午好,没问题,正在关闭空调”。app是这样的,查看对话记录显示每一个反馈命令下面都跟着一个详情页。
作者: keln    时间: 2022-10-31 18:00
应该小优不同空调反应的内容不太一样,要针对性的进行解析响应信息
作者: astang    时间: 2022-10-31 18:15
keln 发表于 2022-10-31 18:00
应该小优不同空调反应的内容不太一样,要针对性的进行解析响应信息

能不能劳驾帮忙看看怎么解决,没学过编程实在是看不明白代码都是什么意思
作者: keln    时间: 2022-10-31 19:15
本帖最后由 keln 于 2022-10-31 19:23 编辑
astang 发表于 2022-10-31 18:15
能不能劳驾帮忙看看怎么解决,没学过编程实在是看不明白代码都是什么意思 ...

给你一个
let result = {
    state: 'offline',
    mode: '',
    fan: '',
    temperature: '',
    currtemp: '',
    power: ''
}
let topic = "/" + msg.cmdFrom + "/state";
if (msg.payload && msg.payload.retCode) {
    let retcode = msg.payload.retCode;
    if (retcode == '00000') {
        result.state = 'online'
        let retParams = msg.payload.data.nlpResult.results;
        let retParam = undefined;
        if (retParams.length > 0) {
            retParam = retParams[0]
        }
        if (retParam != undefined && retParam.params != undefined) {
            if (retParam.params.powerstate != undefined) {
                if (retParam.params.powerstate != '关机') {
                    result.power = 0;
                }
                else {
                    result.power = '1';
                    result.mode = "off";
                    result.currtemp = '0';
                }
            }
            if (retParam.params.mode != undefined) {
                let mode = retParam.params.mode.replace('模式', '')
                switch (mode) {
                    case '制冷':
                        result.mode = 'cool'
                        break;
                    case '制热':
                        result.mode = 'heat'
                        break;
                    case '除湿':
                        result.mode = 'dry'
                        break;
                    case '送风':
                        result.mode = 'fan_only'
                        break;
                    case '智能':
                        result.mode = 'auto'
                        break;
                    default:
                        result.mode = 'off'
                        break;
                }
            }
            if (retParam.params.windspeed != undefined) {
                let fan = retParam.params.windspeed;
                switch (fan) {
                    case '低风':
                        result.fan = 'low'
                        break;
                    case '中风':
                        result.fan = 'medium'
                        break;
                    case '高风':
                        result.fan = 'high'
                        break;
                    case '自动风':
                        result.fan = 'auto'
                        break;
                    default:
                        result.fan = ''
                        break;
                }
            }
            if (retParam.params.currenttemperature != undefined) {
                let temperature = retParam.params.currenttemperature;
                if (temperature == '') {
                    result.temperature = 0;
                }
                else {
                    result.temperature = temperature;
                }
                if (result.power == '0') {
                    result.currtemp = result.temperature;
                }
            }
        }
    }
}
msg.payload = {};
msg.payload[topic + "/state"] = result.state;
msg.payload[topic + "/mode"] = result.mode;
msg.payload[topic + "/fan"] = result.fan;
msg.payload[topic + "/temperature"] = result.temperature;
msg.payload[topic + "/power"] = result.power;
msg.payload[topic + "/currtemp"] = result.currtemp;
return msg;
替换处理语音结果的那个节点里试试,这个只能让你的状态正常


作者: keln    时间: 2022-10-31 19:16
keln 发表于 2022-10-31 19:15
给你一个
let result = {
    state: 'offline',

如果开机后状态显示还是不正常,那就要对你所有的回执都要重新解析,那就很麻烦了,我这边也没有你那的环境也无法知道怎么解析,你可以试试之前那位大神的
作者: astang    时间: 2022-10-31 19:26
keln 发表于 2022-10-31 19:16
如果开机后状态显示还是不正常,那就要对你所有的回执都要重新解析,那就很麻烦了,我这边也没有你那的环 ...

好吧,我再试试,谢谢了
作者: keln    时间: 2022-10-31 19:37
本帖最后由 keln 于 2022-10-31 19:39 编辑
astang 发表于 2022-10-31 19:26
好吧,我再试试,谢谢了

let result = {
    state: 'offline',
    mode: '',
    fan: '',
    temperature: '',
    currtemp: '',
    power: ''
}
let topic = "/" + msg.cmdFrom + "/state";
if (msg.payload && msg.payload.retCode) {
    let retcode = msg.payload.retCode;
    if (retcode == '00000') {
        result.state = 'online'
        let retParams = msg.payload.data.nlpResult.results;
        let retParam = undefined;
        if (retParams.length > 0) {
            retParam = retParams[0]
        }
        if (retParam != undefined && retParam.params != undefined) {
           
            if (retParam.params.mode != undefined) {
                let mode = retParam.params.mode.replace('模式', '')
                switch (mode) {
                    case '制冷':
                        result.mode = 'cool'
                        break;
                    case '制热':
                        result.mode = 'heat'
                        break;
                    case '除湿':
                        result.mode = 'dry'
                        break;
                    case '送风':
                        result.mode = 'fan_only'
                        break;
                    case '智能':
                        result.mode = 'auto'
                        break;
                    default:
                        result.mode = 'off'
                        break;
                }
            }
            if (retParam.params.windspeed != undefined) {
                let fan = retParam.params.windspeed;
                switch (fan) {
                    case '低风':
                        result.fan = 'low'
                        break;
                    case '中风':
                        result.fan = 'medium'
                        break;
                    case '高风':
                        result.fan = 'high'
                        break;
                    case '自动风':
                        result.fan = 'auto'
                        break;
                    default:
                        result.fan = ''
                        break;
                }
            }

            if (retParam.params.powerstate != undefined) {
                if (retParam.params.powerstate != '关机') {
                    result.power = '0';
                }
                else {
                    result.power = '1';
                    result.mode = "off";
                    result.currtemp = '0';
                }
            }            if (retParam.params.currenttemperature != undefined) {
                let temperature = retParam.params.currenttemperature;
                if (temperature == '') {
                    result.temperature = 0;
                }
                else {
                    result.temperature = temperature;
                }
                if (result.power == '0') {
                    result.currtemp = result.temperature;
                }
            }
        }
    }
}
msg.payload = {};
msg.payload[topic + "/state"] = result.state;
msg.payload[topic + "/mode"] = result.mode;
msg.payload[topic + "/fan"] = result.fan;
msg.payload[topic + "/temperature"] = result.temperature;
msg.payload[topic + "/power"] = result.power;
msg.payload[topic + "/currtemp"] = result.currtemp;
return msg;

刚刚里面有个错误,重新替换下

作者: tianya2002    时间: 2022-10-31 20:26
感谢楼主,小白的福音,一会儿回家试试
作者: astang    时间: 2022-11-2 17:30
keln 发表于 2022-10-31 19:37
let result = {
    state: 'offline',
    mode: '',

又试了一下,我这个空调好像不能直接问“挂式空调XXXX状态”,这么问只会回复设定的温度。每个状态都得单独问,比如“挂式空调XXXX什么温度”“挂式空调XXXX什么模式”“挂式空调XXXX什么风速”“挂式空调XXXX开关机状态”,是不是和这有关系?
作者: keln    时间: 2022-11-4 14:01
astang 发表于 2022-11-2 17:30
又试了一下,我这个空调好像不能直接问“挂式空调XXXX状态”,这么问只会回复设定的温度。每个状态都得单 ...

是的,和这个是有关系的,要看空调回应什么内容,如果只能单独问就需要单独处理,所以你这个和我的空调还是有很大的区别的
作者: astang    时间: 2022-11-4 17:00
keln 发表于 2022-11-4 14:01
是的,和这个是有关系的,要看空调回应什么内容,如果只能单独问就需要单独处理,所以你这个和我的空调还 ...

我参考拎一个帖子把问询命令单个拆开弄好了了, 只是不知道为什么询问当前室温的时候弄不成。只要用手机APP发文字“书房当前温度时多少”就能回复正确信息,用这个节点发同样的命令就会回复没有找到书房这个房间,简直是神奇。而且还有一点就是想空调的防直吹、静音这些模式用小优只能打开或者关闭,没办法询问状态,海尔不知道怎么想的。
作者: roba    时间: 2022-12-7 22:03
本帖最后由 roba 于 2022-12-7 22:24 编辑

今天起报错了,
{"retCode":"I00001-00001","retInfo":"/ù小优发现你的海尔账号信息出错了,/ù请升级到最新版本吧","data":null,"sn":null,"response":null,"uTraceId":null,"uSpanId":null,"triggerId":null,"processorContextList":null}
并没有,是我的问题

作者: wingcky    时间: 2023-1-31 19:58
核心方式是用的一个叫“海尔机器人”的节点,这个节点可以实现与海尔智家APP中小优机器人的对话,从而控制几乎有所海尔的智能家电。如,想打开客厅空调,只需在节点的指令中输入“打开客厅空调”,就可以。
这种方式的好处当然是方便快捷,几乎都不用特别适配具体型号的家电,就可以将此海尔家电接入HA,只要在海尔智家APP中小优机器人能控制的,HA都能控制。
缺点是,对于设备的状态查询就不那么实时,比如要知道空调的状态,你需要在“海尔机器人”节点中输入“客厅空调模式是什么”等指令,并且需要不断间隔一定时间轮询,不像其他通过集成方式实现的设备、实体,只要设备状态变化就可以实时生成事件或状态的变化。
作者: yurunze    时间: 2023-2-10 19:35
请问海尔机器人节点下方没出现提交成功和后边的数字是什么情况
作者: fenglou777    时间: 2023-3-10 15:02
TypeError: Cannot read properties of null (reading 'length')
作者: llgxdnn    时间: 2023-3-19 17:55
TypeError: Cannot read property 'length' of null
作者: zsuygl    时间: 2023-3-20 15:50
完全看不懂啊,就客厅有一个海尔空调而已

作者: aabbcc7788    时间: 2023-4-2 20:05
谢谢!!!!!!!!!非常有用的教程

作者: yangrusen    时间: 2023-4-20 22:07
拆了海尔的模块,换成用esphome刷的模块,直接接入HA.
作者: sandy242    时间: 2023-4-21 14:42
感谢分享,又能省点事了
作者: hxymdt    时间: 2023-4-25 01:58
感谢楼主分享
作者: astang    时间: 2023-4-25 20:17
yangrusen 发表于 2023-4-20 22:07
拆了海尔的模块,换成用esphome刷的模块,直接接入HA.

有没有相应的教程?
作者: yangrusen    时间: 2023-4-26 22:37
刷写部分参见esphome Haier climate。
拆机部分网上查找对应机型。
我还没有完全弄好,因为空调在老家,不常回去。但已经确定可以自制模块控制。
作者: astang    时间: 2023-4-27 19:54
yangrusen 发表于 2023-4-26 22:37
刷写部分参见esphome Haier climate。
拆机部分网上查找对应机型。
我还没有完全弄好,因为空调在老家,不 ...

看不太懂,只等大神完成以后抄作业了
作者: Ari    时间: 2023-6-26 16:41
yangrusen 发表于 2023-4-20 22:07
拆了海尔的模块,换成用esphome刷的模块,直接接入HA.

大佬,求esphome的模块怎么接入空调,求求求
作者: chenlei2580    时间: 2023-6-29 22:18
纯小白,能不能求大佬分享个海尔热水器的configuration.yaml和node-red流程啊
作者: guang511    时间: 2024-4-4 01:02
感谢楼主大大。按照你的思路,终于调整好了。
还有个问题想请教一下,HASS可以控制空调了,也可以巴法云接入米家,用小爱控制了。
但是如果用小爱打开空调,海尔智家或者遥控器关闭空调,mqtt就不能同时获取空调状态,需要怎么解决呢?
还有一个问题,小爱不能控制空调风速。
作者: psk50    时间: 2024-5-23 00:31
本帖最后由 psk50 于 2024-5-23 16:18 编辑

发现的几个问题:
1、我这边返回的payload.retInfo永远出错,需要改成payload.response
2、处理语音结果中,目前的正则表达式,跟海尔机器人返回的字符串已经不能很好的适配了
3、上一步中的正则可改为'/.*?空调现在是(.*?)模式.*?温度(.*?)度.*?风速(.*?)(,|$)/g',但有时返回的字符串也匹配不太上,如果能用in就方便很多;后续的length各位就自己改了哈




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