基于Home Assistant与ESP8266的空调智能节能本地自动化方案
2026/7/28 7:35:53 网站建设 项目流程

1. 项目概述:从“空调关关”看现代家居的节能与智能控制

最近在社区里看到不少朋友在讨论“空调关关”这个词,乍一听有点摸不着头脑,但仔细一想,这背后其实是我们每天都会遇到,却又常常忽略的一个生活场景:如何更合理、更智能地管理空调的开关。这不仅仅是按一下遥控器那么简单,它涉及到家庭能耗管理、设备寿命、人体舒适度,乃至整个智能家居系统的联动逻辑。作为一个在智能家居和节能领域折腾了十多年的老玩家,我深感这个话题值得深入聊聊。

“空调关关”这个略带口语化的表述,精准地捕捉了用户的核心痛点——我们总是在“开空调”和“关空调”之间反复横跳。夏天出门忘关空调,回家面对的是高昂的电费和冰冷的房间;晚上睡觉定时关闭,后半夜又被热醒;想远程控制,却发现APP操作繁琐,响应迟缓。这些问题,本质上是对空调这一高能耗电器的“精细化运营”需求。它适合所有希望提升生活便利性、降低能源开支,并对智能设备有一定兴趣的家庭用户。今天,我就结合自己的实操经验,从硬件改造、软件逻辑到场景设计,为你拆解一套行之有效的“空调关关”自动化解决方案。

2. 核心思路与方案选型:为什么“智能开关”是基石

要实现“空调关关”的自动化,首要问题是解决控制信号的接入。市面上的空调大多通过红外遥控器控制,这是一个单向、非联网的协议。因此,我们的核心思路是:用一个智能中枢,学习并模拟红外遥控信号,再通过这个中枢接入家庭网络,从而实现远程、定时、自动化控制。

这里有几个主流方案可选:

  1. 智能红外遥控器(如小米万能遥控器、Broadlink RM系列):这是最直接、成本较低的方案。它是一个独立的设备,可以学习空调遥控器的所有按键,并通过厂商的APP进行控制。优点是设置简单,兼容性强。缺点是依赖厂商云服务,断网可能失效,且自动化能力受限于APP功能,难以与其他智能设备深度联动。

  2. 带红外功能的智能音箱/网关:一些智能音箱(如小爱音箱Pro)或网关集成了红外发射模块。方案与独立遥控器类似,但更集成化。优势是能与语音助手无缝结合,实现“小爱同学,关闭空调”这样的语音控制。劣势同样是云依赖和有限的本地自动化逻辑。

  3. 开源智能家居平台+红外发射模块(如Home Assistant + ESPHome):这是我最推荐,也是可玩性和自由度最高的方案。你需要一个运行Home Assistant(以下简称HA)的主机(树莓派、旧电脑或NAS均可),再搭配一个能刷入ESPHome固件的开发板(如ESP8266),接上一个红外发射管。这个方案的所有逻辑都在本地局域网运行,完全断网可用,自动化能力极其强大,可以与你家中任何支持HA的设备(如人体传感器、温湿度计、门窗传感器)进行任意复杂的联动。

注意:选择开源方案需要一定的动手能力和学习成本,但它带来的稳定性、私密性和无限可能性是前两者无法比拟的。对于“空调关关”这种需要可靠、复杂判断的场景,本地自动化是终极答案。

我最终选择了方案三。理由很简单:“空调关关”不是一个孤立的动作。它应该和“是否有人”、“室内外温差”、“时间段”、“湿度”等多个条件绑定。只有HA这样的本地化平台,才能处理如此复杂的“如果...就...”逻辑,且响应速度在毫秒级,不受外网波动影响。

3. 硬件准备与搭建:打造你的本地红外中枢

确定了方案,接下来就是动手。硬件清单很简单:

  • 主机:一台安装好Home Assistant OS的设备。我用的是一台闲置的英特尔NUC,树莓派4B 2G版本也完全足够。
  • 红外发射端:ESP8266开发板(如NodeMCU)、红外发射管(940nm)、一个220Ω电阻、杜邦线若干。
  • 可选-红外接收端:如果你不确定空调的红外码,或者想学习更多设备的遥控码,可以增加一个红外接收管(VS1838B),用于抓取原始信号。

硬件连接原理是让ESP8266通过GPIO引脚控制红外发射管,模拟遥控器信号。接线图虽然简单,但有几个关键点:

  • 供电:ESP8266的VIN接5V电源,GND接地。红外发射管长脚(阳极)通过一个220Ω电阻连接到ESP8266的某个GPIO口(如D2),短脚(阴极)直接接地。这个电阻是必须的,用于限流,保护GPIO口和LED。
  • 引脚选择:避免使用ESP8266用于系统功能的GPIO口(如GPIO0, GPIO2, GPIO15在启动时有特殊电平要求)。我常用GPIO4(D2)或GPIO5(D1),它们比较“安静”。

连接好后,下一步是给ESP8266刷入ESPHome固件。ESPHome是HA的“最佳拍档”,它能让你用YAML配置文件轻松定义设备功能。首先在HA的“加载项”商店安装ESPHome,然后在ESPHome的Web界面中创建一个新设备,配置如下:

esphome: name: air-conditioner-ir-controller platform: ESP8266 board: nodemcu wifi: ssid: "你的Wi-Fi名称" password: "你的Wi-Fi密码" # 启用AP模式,万一配网失败还能连上 ap: ssid: "AirCtrl Fallback Hotspot" password: "fallback密码" # 启用日志和OTA(无线更新),方便调试 logger: api: ota: # 定义红外发射组件 remote_transmitter: pin: GPIO4 carrier_duty_percent: 50% # 载波占空比,通常50%兼容性最好 # 定义一个可以发送原始信号的开关(用于后续学习并测试码值) switch: - platform: template name: "Test IR Send" turn_on_action: - remote_transmitter.transmit_raw: code: [9000, 4500, 500, 650, 500, 650, ...] # 这里需要填入真实的原始红外码数组 carrier_frequency: 38kHz # 绝大多数家电红外频率

配置完成后,点击“安装”,选择“通过线缆下载”,用USB线连接ESP8266和电脑,刷入固件。成功后,设备就会出现在你的HA设备列表里。

4. 抓取与解析空调红外码:让智能中枢“学会”遥控

这是最关键也最需要耐心的一步。我们需要让ESP8266学会空调遥控器发出的红外信号。这里有两种方法:

方法一:使用红外接收管抓取原始码(推荐)如果你准备了红外接收管,将其数据脚连接到ESP8266的另一个GPIO(如GPIO13/D7),并在ESPHome配置中添加:

remote_receiver: pin: number: GPIO13 dump: raw # 关键!设置为raw模式,才能捕获原始时序数据

更新固件后,打开HA的“开发者工具”->“日志”,查看ESPHome设备的日志。然后用空调遥控器对准接收管,按下“开机”键。你会在日志里看到一串非常长的Received Raw:数据,这就是原始红外时序数组,格式如[9000, 4500, 560, 560, 560, 1690, ...]。这个数组就是空调开机的“密码”。将其复制下来,替换掉上面switch配置中的code部分。然后触发这个测试开关,看空调是否有反应。用同样的方法,抓取“关机”、“调温+”、“调温-”、“模式”等关键功能的码值。

方法二:使用现成的红外码库有些开源项目(如IRremoteESP8266库)收集了常见品牌的空调码值。你可以在ESPHome配置中直接使用climate组件,并指定空调品牌和型号。这种方法更简单,但兼容性取决于库的完善度。对于不常见的型号,还是得自己抓。

实操心得:抓取原始码时,务必在安静、无强红外干扰的环境下进行。同一个按键,多抓几次,对比码值,开头的引导码和结尾的间隔可能每次略有不同,但中间的数据部分应该是一致的。建议将成功控制空调的原始码数组妥善保存到记事本中,这是你最宝贵的资产。

抓取到所有必要码值后,我们就可以在ESPHome中配置一个完整的“空调实体”了。这会让它在HA中像一个真正的智能空调一样被识别和控制。

climate: - platform: template name: "客厅空调" # 定义这个虚拟空调支持的模式 modes: - "off" - "cool" - "heat" - "fan_only" - "dry" # 定义温度范围(根据你的空调实际范围调整) min_temperature: 16 max_temperature: 30 temperature_step: 1 # 定义当HA中操作这个空调实体时,实际触发的动作 turn_on_action: - remote_transmitter.transmit_raw: code: [这里放入开机的原始码数组] carrier_frequency: 38kHz turn_off_action: - remote_transmitter.transmit_raw: code: [这里放入关机的原始码数组] carrier_frequency: 38kHz set_mode_action: # 这是一个条件判断,根据HA发出的模式指令,发送不同的红外码 - choose: - conditions: - lambda: 'return mode == climate::CLIMATE_MODE_COOL;' then: - remote_transmitter.transmit_raw: code: [制冷模式码] carrier_frequency: 38kHz - conditions: - lambda: 'return mode == climate::CLIMATE_MODE_HEAT;' then: - remote_transmitter.transmit_raw: code: [制热模式码] carrier_frequency: 38kHz # ... 其他模式 set_temperature_action: # 调温逻辑更复杂,通常需要循环发送“温度+”或“温度-”信号直到达到目标温度 # 这里需要编写更复杂的lambda脚本,或者为每个温度值抓取独立的码(如果遥控器支持直接温度设定) # 更实用的做法是:结合“模式”和“温度”两个条件,发送一个组合指令(如果遥控器有“制冷26度”这种直接按键)

配置完成后,重新编译安装固件。此时在HA的概览页,你应该能看到一个名为“客厅空调”的温控器卡片,可以像操作原生智能空调一样开关、调节模式和温度了。至此,硬件和基础通信层的工作全部完成。

5. 自动化场景设计:让“关关”变得聪明

有了可控的空调实体,我们就可以设计自动化,解决文章开头提到的各种“关关”难题。HA的自动化采用“触发器(Trigger)- 条件(Condition)- 动作(Action)”逻辑。下面分享几个我家中在用的核心场景。

5.1 场景一:人走空调关,节能不操心

这是最基础的需求。你需要一个能可靠检测房间是否无人的传感器。推荐使用毫米波雷达存在传感器,而不是传统的人体红外传感器。因为人体红外只能检测移动,人静止不动时会误判为无人,而毫米波雷达可以检测微动甚至呼吸,判断“存在”的准确性极高。

自动化配置:

  • 触发器:客厅毫米波雷达传感器状态从“检测到有人”变为“无人”。
  • 条件
    1. 客厅空调状态为“开启”。
    2. 时间范围(例如,仅在白天8点到22点执行此自动化,避免夜间睡眠时误关)。
  • 动作
    1. 将客厅空调关闭。
    2. 向手机发送一条通知:“客厅无人,空调已自动关闭。”

注意事项:这里加了一个时间条件,是因为夜间睡眠时,人体几乎静止,毫米波雷达也可能短时判定为“无人”。为了避免半夜空调被误关,可以限制此自动化的执行时间,或者引入其他条件,如“且客厅灯已关闭超过30分钟”等,多重判断更保险。

5.2 场景二:回家提前启动,舒适不等待

夏天回家,谁都希望一进门就是清凉。这需要地理围栏(Geofencing)或门锁联动。

方案A(基于地理围栏):

  • 触发器:家庭成员手机(通过HA官方APP或Life360集成)位置进入“家”区域。
  • 条件
    1. 室外温度(通过天气集成获取) > 28度。
    2. 客厅空调状态为“关闭”。
    3. 当前时间在预计到家时间前后(例如,工作日的18点后)。
  • 动作
    1. 将客厅空调模式设置为“制冷”,温度设为26度并开启。
    2. (可选)同时打开客厅的智能风扇(循环空气)。

方案B(基于智能门锁):

  • 触发器:智能门锁从“未锁定”变为“锁定”,且解锁方式为“指纹/密码”(排除从室内反锁的情况)。
  • 条件:与方案A类似,判断室外高温和空调关闭状态。
  • 动作:同方案A。

5.3 场景三:睡眠曲线控制,兼顾舒适与节能

晚上睡觉,温度需要动态调整。我们可以创建一个“睡眠模式”的自动化。

  • 触发器:晚上11点,或“晚安”场景按钮被按下。
  • 动作
    1. 将空调模式设为“制冷”,温度设为26度,风速自动。
    2. 等待90分钟(假设入睡时间)。
    3. 将空调温度上调至27度。
    4. 再等待120分钟,将空调温度上调至28度。
    5. 在凌晨5点,将空调关闭(此时室内残余冷量通常足以维持到早晨醒来)。

这个逐步升温的曲线,既保证了入睡时的凉爽,又避免了后半夜过冷和持续运行的能耗。你可以根据自己对温度的敏感度,调整等待时间和温度设置点。

5.4 场景四:温湿度联动,除湿妙用

在梅雨季节,空调的除湿模式比单纯制冷更舒适、更省电。可以设计一个温湿度联动的自动化。

  • 触发器:客厅温湿度传感器读数更新。
  • 条件
    1. 湿度 > 70% 且 温度在24-28度之间(这个温度区间人体感觉闷热主要源于湿度)。
    2. 客厅有人。
    3. 空调处于关闭或非除湿模式。
  • 动作:将空调模式切换为“除湿”,风速自动。

6. 高级技巧与避坑指南

在实际部署中,你会遇到一些细节问题,这里分享我的经验。

1. 红外信号的覆盖与反射ESP8266的红外发射管功率有限,且红外线直线传播,容易被遮挡。解决方法:

  • 位置:将发射端粘贴在空调室内机的红外接收窗附近,并确保中间无遮挡。
  • 多发射头:如果客厅面积大或有柱子遮挡,可以在ESP8266上并联2-3个红外发射管,指向不同角度,扩大覆盖范围。
  • 利用反射:可以将发射头对准天花板或墙壁,利用漫反射让信号覆盖更广。

2. 自动化冲突与竞态条件当多个自动化可能同时触发时(例如,人走关空调的自动化和睡眠升温自动化),需要设置合理的条件自动化模式

  • 在“人走关机”自动化中,加入条件“不在睡眠模式下”。
  • 将“睡眠模式”设置为一个独立的场景(Scene)输入布尔(Input Boolean),其他自动化通过检查这个标志位来判断是否执行。
  • 在HA自动化编辑器中,可以设置模式为“单次(Single)”、“队列(Queued)”或“重启(Restart)”,根据需求选择。

3. 状态反馈与容错红外是单向信号,HA里的空调实体状态(开/关)只是我们“认为”的状态,如果红外信号发送失败,或者被人用实体遥控器操作了,状态就会不同步。

  • 定期同步:可以设置一个每天凌晨执行的自动化,强制将空调关闭一次(发送关机码),然后将HA实体状态重置为“关”,作为基准。
  • 功率监测:如果条件允许,最好的方案是给空调插座加一个智能插座(带功率监测功能)。通过实时功率判断空调的真实工作状态(制冷/制热功率远大于待机功率),并以此同步或覆盖HA中的虚拟状态,实现100%的状态同步。

4. 网络与本地稳定性务必确保你的HA主机和ESP8266设备连接的家庭Wi-Fi稳定。建议为智能家居设备分配静态IP或使用DHCP保留。核心自动化务必使用“本地”执行模式,减少对云服务的依赖。

5. 空调码值的复杂性部分高端空调的遥控码带有复杂的校验和或状态编码,每次按键发送的码值可能因当前状态而异。对于这种空调,抓取“开关”码可能无法实现“切换”功能,而是需要分别抓取“开机”和“关机”两个独立的码。如果遇到问题,可以去开源社区(如ESPhome、IRremoteESP8266的GitHub页面)搜索你的空调型号,很可能已经有人分享了解码方案。

7. 效果评估与未来扩展

部署完这套系统后,最直观的感受就是“无感”。你再也不需要惦记空调是否关了,夏天回家推开门就是适宜的凉爽,睡眠质量也因恒定的温度曲线而提升。从电费账单上看,一个夏季下来,节省15%-25%的空调能耗是完全可以实现的,这不仅是因为避免了遗忘关闭带来的浪费,更得益于像睡眠曲线、温湿度联动这类精细化控制策略。

这个“空调关关”项目,可以成为你智能家居体系的一个核心节点。未来可以轻松扩展:

  • 与窗户传感器联动:开窗自动关闭空调,防止能源浪费。
  • 与天气预报联动:在电价低谷时段(如有峰谷电价)或室外温度适宜时,自动开启新风或风扇,减少空调使用。
  • 融入家庭能源管理:将空调功耗数据与其他电器结合,在HA的能源面板中形成完整的家庭用电画像,为进一步节能优化提供数据支持。

折腾的过程或许有些门槛,但一旦跑通,那种“机器默默为你服务”的体验和实实在在的节能回报,会让你觉得一切投入都是值得的。智能家居的真谛,不在于炫技,而在于让科技真正融入生活,解决像“空调关关”这样具体而微的烦恼。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询