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

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:34

keln 发表于 2022-10-31 17:23
你这个是有问题:"retInfo": "/ù小优没有查到相关信息,请检查设备联网状态,/ù稍后再试",
有设备不是 ...

我在小优里问:挂式空调XXXX状态,他会回复现在空调是26.00度,希望是你喜欢的温度

keln 发表于 2022-10-31 17:34:12

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

那你用语音开机,然后再查下信息
从语音回执来看是没有找到设备的。

astang 发表于 2022-10-31 17:42:26

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

app用语音开关空调都是正常的,返回的信息“书房空调已打开”“下午好,没问题,正在关闭空调”。app是这样的,查看对话记录显示每一个反馈命令下面都跟着一个详情页。

keln 发表于 2022-10-31 18:00:05

应该小优不同空调反应的内容不太一样,要针对性的进行解析响应信息

astang 发表于 2022-10-31 18:15:04

keln 发表于 2022-10-31 18:00
应该小优不同空调反应的内容不太一样,要针对性的进行解析响应信息

能不能劳驾帮忙看看怎么解决,没学过编程实在是看不明白代码都是什么意思

keln 发表于 2022-10-31 19:15:02

本帖最后由 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
      }
      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 = result.state;
msg.payload = result.mode;
msg.payload = result.fan;
msg.payload = result.temperature;
msg.payload = result.power;
msg.payload = result.currtemp;
return msg;
替换处理语音结果的那个节点里试试,这个只能让你的状态正常

keln 发表于 2022-10-31 19:16:53

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


如果开机后状态显示还是不正常,那就要对你所有的回执都要重新解析,那就很麻烦了,我这边也没有你那的环境也无法知道怎么解析,你可以试试之前那位大神的

astang 发表于 2022-10-31 19:26:24

keln 发表于 2022-10-31 19:16
如果开机后状态显示还是不正常,那就要对你所有的回执都要重新解析,那就很麻烦了,我这边也没有你那的环 ...

好吧,我再试试,谢谢了

keln 发表于 2022-10-31 19:37:58

本帖最后由 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
      }
      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 = result.state;
msg.payload = result.mode;
msg.payload = result.fan;
msg.payload = result.temperature;
msg.payload = result.power;
msg.payload = result.currtemp;
return msg;

刚刚里面有个错误,重新替换下
页: 1 [2] 3 4
查看完整版本: 海尔空调接入到HASS