基于Home Assistant与ESP8266的空调智能节能本地自动化方案
1. 项目概述从“空调关关”看现代家居的节能与智能控制最近在社区里看到不少朋友在讨论“空调关关”这个词乍一听有点摸不着头脑但仔细一想这背后其实是我们每天都会遇到却又常常忽略的一个生活场景如何更合理、更智能地管理空调的开关。这不仅仅是按一下遥控器那么简单它涉及到家庭能耗管理、设备寿命、人体舒适度乃至整个智能家居系统的联动逻辑。作为一个在智能家居和节能领域折腾了十多年的老玩家我深感这个话题值得深入聊聊。“空调关关”这个略带口语化的表述精准地捕捉了用户的核心痛点——我们总是在“开空调”和“关空调”之间反复横跳。夏天出门忘关空调回家面对的是高昂的电费和冰冷的房间晚上睡觉定时关闭后半夜又被热醒想远程控制却发现APP操作繁琐响应迟缓。这些问题本质上是对空调这一高能耗电器的“精细化运营”需求。它适合所有希望提升生活便利性、降低能源开支并对智能设备有一定兴趣的家庭用户。今天我就结合自己的实操经验从硬件改造、软件逻辑到场景设计为你拆解一套行之有效的“空调关关”自动化解决方案。2. 核心思路与方案选型为什么“智能开关”是基石要实现“空调关关”的自动化首要问题是解决控制信号的接入。市面上的空调大多通过红外遥控器控制这是一个单向、非联网的协议。因此我们的核心思路是用一个智能中枢学习并模拟红外遥控信号再通过这个中枢接入家庭网络从而实现远程、定时、自动化控制。这里有几个主流方案可选智能红外遥控器如小米万能遥控器、Broadlink RM系列这是最直接、成本较低的方案。它是一个独立的设备可以学习空调遥控器的所有按键并通过厂商的APP进行控制。优点是设置简单兼容性强。缺点是依赖厂商云服务断网可能失效且自动化能力受限于APP功能难以与其他智能设备深度联动。带红外功能的智能音箱/网关一些智能音箱如小爱音箱Pro或网关集成了红外发射模块。方案与独立遥控器类似但更集成化。优势是能与语音助手无缝结合实现“小爱同学关闭空调”这样的语音控制。劣势同样是云依赖和有限的本地自动化逻辑。开源智能家居平台红外发射模块如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在启动时有特殊电平要求。我常用GPIO4D2或GPIO5D1它们比较“安静”。连接好后下一步是给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 场景一人走空调关节能不操心这是最基础的需求。你需要一个能可靠检测房间是否无人的传感器。推荐使用毫米波雷达存在传感器而不是传统的人体红外传感器。因为人体红外只能检测移动人静止不动时会误判为无人而毫米波雷达可以检测微动甚至呼吸判断“存在”的准确性极高。自动化配置触发器客厅毫米波雷达传感器状态从“检测到有人”变为“无人”。条件客厅空调状态为“开启”。时间范围例如仅在白天8点到22点执行此自动化避免夜间睡眠时误关。动作将客厅空调关闭。向手机发送一条通知“客厅无人空调已自动关闭。”注意事项这里加了一个时间条件是因为夜间睡眠时人体几乎静止毫米波雷达也可能短时判定为“无人”。为了避免半夜空调被误关可以限制此自动化的执行时间或者引入其他条件如“且客厅灯已关闭超过30分钟”等多重判断更保险。5.2 场景二回家提前启动舒适不等待夏天回家谁都希望一进门就是清凉。这需要地理围栏Geofencing或门锁联动。方案A基于地理围栏触发器家庭成员手机通过HA官方APP或Life360集成位置进入“家”区域。条件室外温度通过天气集成获取 28度。客厅空调状态为“关闭”。当前时间在预计到家时间前后例如工作日的18点后。动作将客厅空调模式设置为“制冷”温度设为26度并开启。可选同时打开客厅的智能风扇循环空气。方案B基于智能门锁触发器智能门锁从“未锁定”变为“锁定”且解锁方式为“指纹/密码”排除从室内反锁的情况。条件与方案A类似判断室外高温和空调关闭状态。动作同方案A。5.3 场景三睡眠曲线控制兼顾舒适与节能晚上睡觉温度需要动态调整。我们可以创建一个“睡眠模式”的自动化。触发器晚上11点或“晚安”场景按钮被按下。动作将空调模式设为“制冷”温度设为26度风速自动。等待90分钟假设入睡时间。将空调温度上调至27度。再等待120分钟将空调温度上调至28度。在凌晨5点将空调关闭此时室内残余冷量通常足以维持到早晨醒来。这个逐步升温的曲线既保证了入睡时的凉爽又避免了后半夜过冷和持续运行的能耗。你可以根据自己对温度的敏感度调整等待时间和温度设置点。5.4 场景四温湿度联动除湿妙用在梅雨季节空调的除湿模式比单纯制冷更舒适、更省电。可以设计一个温湿度联动的自动化。触发器客厅温湿度传感器读数更新。条件湿度 70% 且 温度在24-28度之间这个温度区间人体感觉闷热主要源于湿度。客厅有人。空调处于关闭或非除湿模式。动作将空调模式切换为“除湿”风速自动。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的能源面板中形成完整的家庭用电画像为进一步节能优化提供数据支持。折腾的过程或许有些门槛但一旦跑通那种“机器默默为你服务”的体验和实实在在的节能回报会让你觉得一切投入都是值得的。智能家居的真谛不在于炫技而在于让科技真正融入生活解决像“空调关关”这样具体而微的烦恼。