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

 找回密码
 立即注册
查看: 5327|回复: 10

给大金空调加装远程控制

[复制链接]

4

主题

32

帖子

541

积分

论坛技术达人

积分
541
金钱
504
HASS币
20
发表于 2022-6-18 01:49:10 | 显示全部楼层 |阅读模式
本帖最后由 honglei 于 2022-6-18 01:51 编辑

睡着了找空调遥控器是一件难受的事情,有时候找半天找不到,搞得睡意全无。
床头就有Home Pod,而且手机相对好找,就想着把空调也接入homekit吧,但是空调比较老,没有智能模块;
其实也有很多解决方案,比如空调伴侣;单总觉得那样不是一体的,反正自己动手能力强要不拆了加装一个智能模块。
第一想法是找找控制协议,看看能不能直接通讯。拆开一看,线巨多,真的懒得测试了,加上红外接收器非常明显,参考空调伴侣的工作模式,可以做个红外反馈式的专用空调伴侣

IMG_0141.JPG IMG_0140.JPG
我的空调就长上面那个样子,空调型号比较复杂,就不写了,翻开盖子就能拆,4个螺丝拧了就好。

IMG_0122.JPG
里面就是这样,一开始想直接红外接收头取电就好,最后发现不行,带不动负载;很幸运,红圈的位置有个电容空着,刚好是5V电压,也能带动ESP8266

那就设计线路打板,电路很简单,一个ESP8266、、一个红外发射、一个红外接收(就共用原有的)。
Screen Shot 2022-06-18 at 1.27.27 AM.png

下载IRremoteESP8266库,根据自己的空调类型简单开发;可能有些功能没有,红外抓包自己改下原有的库,基本功能都能实现。
在Home Assistant上基本都能控制,HomeKit就只有最简单功能了,模式只有"自动、制热、制冷、关闭";风量只有"大、中、小",还有个风摆;反正也够用吧。

做的板子,因为空间有限,背面供电的用了贴片焊接模式,针脚自己弯一个就好
IMG_0137.JPG IMG_0138.JPG

成品图(红外接收直接焊上,立创做半孔巨贵无比,做全孔,自己切割下就好)
IMG_0136.JPG IMG_0139.JPG

相关的控制界面
IMG_0147.PNG IMG_0143.PNG IMG_0145.PNG IMG_0146.PNG

通过Siri控制还要注意,有时候“关闭空调不好使”,需要说“将空调模式调整为关闭”
通过遥控器遥控也反馈正常,Home Assistant和HomeKit都能正常显示状态。
也有不足的,比如通过空调上的开关,打开关闭空调就不能反馈了。

搞定卧室的,想着反正空调类型一样,只是型号不一样,代码通用,就把客厅的也改了
IMG_0142.JPG IMG_0135.JPG
客厅的就无法共用接收了,主要是懒得拆,也怕拆坏。

整体看,空调这么大的设备,空间足够放下控制版,就是位置要找找;供电基本也不是问题,基本控制板上都有5V或3.3V的电源;再不济也能从220V取点接变压器(变压器模块有很小的,客厅空调就是这么干的)
有兴趣的小伙伴也可以试试,整体成本在10元以内,打板不要钱,电子元件很便宜,就是有点费时间。

回复

使用道具 举报

32

主题

119

帖子

749

积分

高级会员

Rank: 4

积分
749
金钱
630
HASS币
0
发表于 2022-6-18 02:49:25 来自手机 | 显示全部楼层
大牛逼了,可否开源分享?先感谢!
回复

使用道具 举报

35

主题

984

帖子

4766

积分

论坛元老

Rank: 8Rank: 8

积分
4766
金钱
3782
HASS币
20
发表于 2022-6-18 07:02:06 来自手机 | 显示全部楼层
膜拜大神,不过相对于空调8年10年的质保,我选择质保,然后买个空调伴侣
回复

使用道具 举报

17

主题

251

帖子

1894

积分

论坛DIY达人

积分
1894
金钱
1643
HASS币
20
发表于 2022-6-18 07:30:31 | 显示全部楼层
真厉害,我就只能外挂一个博联红外……
回复

使用道具 举报

17

主题

251

帖子

1894

积分

论坛DIY达人

积分
1894
金钱
1643
HASS币
20
发表于 2022-6-18 07:35:42 | 显示全部楼层
请教一下楼主,您是如何获取红外代码的?原先尝试过ESPHome+红外接收模块,结果所有的遥控器(空调、电视、风扇)获取的都是pronto格式,用作发射的时候,没法儿用,无奈还是选择了博联。
回复

使用道具 举报

80

主题

388

帖子

1680

积分

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1292
HASS币
0
发表于 2022-6-18 08:40:09 | 显示全部楼层
本帖最后由 ciasdmxhxjjpd@c 于 2022-6-18 08:54 编辑

esp8266 代码能分享下?共同研究下?
homeassissant 上用的是哪个集成插件?如何接入esp8266的,中间没有说明。遥控状态与esphome获取的状态能否同步?

板子上没有画usb串口模块,esp8266 模组在焊接之前要通过什么工具烧写?


红外学习码,怎么学,没有写呢
另,从电容焊盘上取电时,建议加一个470uf以上的电容。

麻烦有空列一个元器件清单,谢谢。


回复

使用道具 举报

11

主题

271

帖子

2658

积分

金牌会员

Rank: 6Rank: 6

积分
2658
金钱
2377
HASS币
50
发表于 2022-6-18 10:50:52 来自手机 | 显示全部楼层
太牛噶了,膜拜大佬!
回复

使用道具 举报

4

主题

32

帖子

541

积分

论坛技术达人

积分
541
金钱
504
HASS币
20
 楼主| 发表于 2022-6-18 12:03:25 | 显示全部楼层
mrlaogui 发表于 2022-6-18 07:35
请教一下楼主,您是如何获取红外代码的?原先尝试过ESPHome+红外接收模块,结果所有的遥控器(空调、电视、 ...

IRremoteESP8266库里有空调相关的部分,按照你的空调类型找下
IRrecvDumpV2是获取的Demo,还有TurnOnXXXAC,是最简单的空调控制
回复

使用道具 举报

4

主题

32

帖子

541

积分

论坛技术达人

积分
541
金钱
504
HASS币
20
 楼主| 发表于 2022-6-18 12:09:17 | 显示全部楼层
本帖最后由 honglei 于 2022-6-18 12:12 编辑
ciasdmxhxjjpd@c 发表于 2022-6-18 08:40
esp8266 代码能分享下?共同研究下?
homeassissant 上用的是哪个集成插件?如何接入esp8266的,中间没有说 ...

感谢建议
我给家里的所有DIY智能设备写了一个基础框架,比较复杂;代码比较多;个人也懒,很多模块没有完善,我完善下再发git吧
整体上用了MQTT Discovery(https://www.home-assistant.io/docs/mqtt/discovery/);然后通过IRremoteESP8266来获取和发送
空调(恒温器)文档:https://www.home-assistant.io/integrations/climate.mqtt/

先分享下空调部分的,如下
#include "device_daikin.h"
#include "debug.h"
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <IRrecv.h>
#include <IRutils.h>
#include <ir_Daikin.h>

namespace VIMEE_DEVICE_CLIMATE {
    //Tag
    static char *TAG = "Daikin";

    //IR输出IO
    static uint16_t IRout = 5;
    static uint16_t IRin = 4;
    IRDaikin152 ac = IRDaikin152(IRout);
    IRrecv irrecv = IRrecv(IRin, 1024, 50, true);
    decode_results results;

    bool lock = false;

    //初始化
    device_daikin::device_daikin (String nm, String dc) {
        this->init(nm, dc);

        //模式
        char *ml[] = {"auto","off","dry","cool","heat","fan_only"};
        set_mode_list(ml, 6);

        //风扇模式
        char *fl[] = {"low", "middle-low", "medium", "middle-high", "high", "auto", "quiet"};
        set_fan_list(fl, 7);
        
        //预设模式
        char *pl[] = {"econo","comfort","powerful"};
        set_preset_list(pl, 3);

        //默认导风模式
        char *sl[] = {"on","off","v-on", "h-on"};
        set_swing_list(sl, 4);
    }

    //启动方法
    void device_daikin::device_setup () {
        ac.begin();
        irrecv.enableIRIn();
    }

    void device_daikin::IR_recv (decode_results *results) {
        if (results->bits != 152) {
            return;
        }

        if (lock) {
            lock = false;
            return;
        }

        ac.setRaw(results->state);

        //调试接收信息
        VIMEE_DEBUG::print("{RECV} " + ac.toString(), 3, TAG);

        //设置模式
        if (ac.getPower() == 0) {
            change_mode(get_mode_list(1));
        } else if (ac.getMode() == 6) {
            change_mode(get_mode_list(5));
        } else {
            change_mode(get_mode_list(ac.getMode()));
        }

        //设置预设
        change_preset("none");
        if (ac.getPowerful() == 1) {
            change_preset("powerful");
        }
        if (ac.getEcono() == 1) {
            change_preset("econo");
        }

        //设置风扇
        if (ac.getFan() < 10) {
            change_fan(get_fan_list(ac.getFan()-1));
        } else {
            change_fan(get_fan_list(ac.getFan()-5));
        }

        //设置导风
        change_swing("off");
        if (ac.getSwingV() == 1 && ac.getSwingH() == 1) {
            change_swing("on");
        } else if (ac.getSwingV() == 1) {
            change_swing("v-on");
        } else if (ac.getSwingH() == 1) {
            change_swing("h-on");
        }

        //设置温度
        change_temp(ac.getTemp());

        //发送状态
        mqtt_send_state();
    }

    void device_daikin::device_loop () {
        if (irrecv.decode(&results)) {
            IR_recv(&results);
            yield();
        }
    }

    void device_daikin::action(){
        IR_send();
        mqtt_send_state();
    }

    void device_daikin::IR_send(){
        //获取模式
        String m = get_mode();
        if(m != "off"){
            //打开
            ac.on();

            //设置模式
            if (m == "cool") {
                ac.setMode(kDaikinCool);
            } else if (m == "heat") {
                ac.setMode(kDaikinHeat);
            } else if (m == "dry") {
                ac.setMode(kDaikinDry);
            } else if (m == "fan_only") {
                ac.setMode(kDaikinFan);
            } else {
                ac.setMode(kDaikinAuto);
            }

            //预设模式
            String p = get_preset();
            if (p == "powerful") {
                ac.setPowerful(true);
            } else if(p == "econo") {
                ac.setEcono(true);
            }

            //设置温度
            ac.setTemp(get_temp());

            //设置风扇
            String f = get_fan();
            if (f == "low"){
                ac.setFan(1);
            } else if (f == "middle-low"){
                ac.setFan(2);
            } else if (f == "medium"){
                ac.setFan(3);
            } else if (f == "middle-high"){
                ac.setFan(4);
            } else if (f == "high"){
                ac.setFan(5);
            } else if (f == "quiet"){
                ac.setFan(kDaikinFanQuiet);
            } else {
                ac.setFan(kDaikinFanAuto);
            }

            //设置风摆
            String s = get_swing();
            ac.setSwingV(false);
            ac.setSwingH(false);
            if (s == "on") {
                ac.setSwingV(true);
                ac.setSwingH(true);
            } else if (s == "v-on") {
                ac.setSwingV(true);
            } else if (s == "h-on") {
                ac.setSwingH(true);
            }
        } else {
            //关闭
            ac.off();
        }

        //调试发送信息
        VIMEE_DEBUG::print("{SEND}" + ac.toString(), 3, TAG);

        //锁定接收
        lock = true;

        ac.send();
    }
}




回复

使用道具 举报

80

主题

388

帖子

1680

积分

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1292
HASS币
0
发表于 2022-6-18 16:43:11 | 显示全部楼层
honglei 发表于 2022-6-18 12:09
感谢建议
我给家里的所有DIY智能设备写了一个基础框架,比较复杂;代码比较多;个人也懒,很多模块没有完 ...

感谢,写的非常详细
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 02:50 , Processed in 0.056805 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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