
夏天最头疼的账单是什么十有八九是电费。去年七月我家空调开得勤电费直接冲到700多当时我就琢磨着能不能做个小工具自动把温度调到最合理的区间还能实时看着它到底耗了多少电。陆陆续续折腾了一个月终于把“空调省电助手”这玩意儿跑起来了采集室内外温湿度和房间人数算法推荐最佳设定温度和运行模式再通过红外模块自动控制空调同时用带功率计量的插座实时监测耗电最后生成一份省电报告。这套系统跑完一个夏季实测省电大概在18%~25%左右关键是每天回家不用再纠结空调到底开多少度合适。1. 项目思路为什么空调省电助手不能只靠“调高温度”1.1 省电的核心不是温度本身很多人一提到空调省电第一反应是“把温度调高一点26度以上”。这个说法方向对但太粗糙。空调的耗电水平不是由设定温度一个变量决定的而是由“当前室内外温差”“房间热负荷”“运行模式”“压缩机工作状态”共同决定的。设定温度调高2度在某些工况下能省不少在另一些工况下反而会让压缩机频繁启停更费电。我这套系统的核心思路是把“体感舒适”和“省电”当成一个多目标优化问题来处理。目标函数有两个一个是预测平均热感指标尽量落在舒适区间另一个是空调压缩机能耗尽量低。说白了就是找一个“让人体感觉舒服的前提下压缩机负荷最小”的温度和模式组合。这个思路和单纯把温度锁死在26度完全不一样它会在不同天气、不同人数、不同时段给出不同的建议而不是一个固定值。1.2 系统组成与我的选型方案整体分成三层数据采集层室内温湿度传感器用DHT22/AM2302室外温度接天气预报API人数检测用红外人体传感器加简单计数逻辑。决策控制层树莓派跑Python脚本负责拉取数据、套用推荐算法、生成控制指令。执行与反馈层空调伴侣或红外发射模块加上一个带功率计量的智能插座既能发指令又能读空调实时功率。选型上最终用了树莓派4B DHT22 空调伴侣 WiFi功率计量插座。为什么不直接买一个现成的节能插座因为市售产品基本只做“定时关”或“远程开关”没有一个能根据室内外温度、人数动态调整运行策略自己写才能真正做到动态推荐。如果你手头没有树莓派用一台常开的旧电脑或者ESP32也能跑后面我会说哪些部分可以降级。2. 温度与模式推荐算法把体感舒适度变成可计算的公式2.1 室内外温差、人数如何影响最佳设定温度先说结论公式这是我根据多个热舒适研究资料和实测数据拟合出来的经验模型适合普通家庭卧室和客厅制冷模式推荐设定温度 T_coolT_cool 25.5 0.15 × (T_out - 30) 0.5 × min(N, 4) - 0.3 × (T_room - T_set_prev)其中 T_out 是室外温度N 是房间人数T_room 是当前室内温度T_set_prev 是上一次设定温度。逐项解释一下含义0.15 × (T_out - 30)室外温度越高室内外热量交换越强如果一味提高设定温度空调会长时间降不下来压缩机一直高负载运转反而不省电。所以室外越热设定温度略微上调但幅度很小防止过拟合。0.5 × min(N, 4)人多时人体散热量大每多一个人制冷设定温度可以适当抬一点因为人体本身就是热源抬高温度不会让体感明显变差。-0.3 × (T_room - T_set_prev)这是一个反馈修正项防止设定温度与当前室温差距过大导致空调持续满负荷也让系统更容易收敛。举个例子室外32度室内28度两个人上次设定26度。那么T_cool 25.5 0.15×2 0.5×2 - 0.3×(28-26) 25.5 0.3 1.0 - 0.6 26.2度推荐26度。这个结果和很多人直觉上“开26度就行”差不多但它是根据实际参数算出来的。当室外达到35度时推荐值会变成26.7度左右。这时候你会发现开27度比开26度更省电因为压缩机不用频繁在高负载区间震荡。2.2 制冷、制热、除湿三种模式怎么自动切换模式切换的逻辑分两块一是判断该制冷还是制热直接看室内温度和室外温度的差以及日历季节二是判断是否该切除湿模式。我实际使用的除湿判断条件室内温度大于26℃室内相对湿度大于65%室内外温差小于4℃压缩机已经连续运行超过30分钟。为什么满足这些条件才切除湿因为除湿模式下压缩机运行在低频状态风扇也弱除湿效果好且耗电量低。但如果室内外温差很大比如刚开空调、室外38度室内30度这时直接用除湿模式降温速度太慢反而让空调长时间低效运行。所以除湿模式只在“温度已经降得差不多、但体感黏糊糊”的时候用。体感闷热并不是温度高而是相对湿度大。回南天、梅雨季这种天气制冷模式虽然能降温但会导致蒸发器凝露吹出来很多冷凝水人体感觉仍然不舒服。切到除湿模式后出风温度稍微高一点但湿度降下来汗液蒸发散热恢复体感反而更清爽同时也更省电。我实测过同样设置为26℃除湿模式的功率比制冷模式低15%~20%。2.3 推荐算法的实际运行逻辑每2分钟执行一次决策步骤如下读取室内温湿度、当前空调设定温度和模式、智能插座实时功率。调用天气API获取室外温度。判断室内人数如果无人进入“节能空转”模式温度上调1度风速调低。套用上面的公式算出目标设定温度四舍五入到0.5度。计算目标模式满足除湿条件就切除湿否则维持在制冷或制热。如果新目标温度与当前设定差超过1度才下发指令避免频繁发送。这里有个细节为什么决策周期是2分钟周期太短压缩机和风机状态还没稳定读数也不可靠太长的话人数和室外温度变化响应不过来。实践下来2分钟是一个比较均衡的值。另外一个不写进公式但很关键的细节空调压缩机不能在短时间内频繁启停。我在逻辑里加了“压缩机保护锁”如果功率曲线显示压缩机刚启动运行功率从待机跳到800W以上那么至少15分钟内不改变设定温度防止为了省电反而伤机器。3. 实时耗电量监控硬件改造与数据采集方案3.1 功率数据从哪来智能插座还是电流互感器我一开始用的是自己接的电流互感器方案用SCT-013钳形电流互感器夹在空调电源线上配合ZMPT101B电压模块用ESP32读取后自己算功率。这个方案便宜但有一个绕不开的坑强电侧的信号采集需要非常小心校验麻烦算出来的功率误差也比较大尤其是在空调这种非线性负载下。后来我换成了带功率计量的智能插座比如一些成熟品牌支持本地接口的型号内部有计量芯片直接输出有功功率和累计电量精度在2%以内几十块钱就能买到比自己搭强电方案安全太多。如果你是新手真的不建议自己搞电流互感器接220V安全第一。功率计量插座完全够用而且省下来的时间精力远超那点差价。3.2 采集程序怎么写轮询、入库、异常识别数据采集我用Python写了一个常驻进程每10秒轮询一次智能插座的MQTT或本地HTTP接口拿到实时功率P和累计电量E写进SQLite数据库。表结构大概是这样CREATE TABLE power_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, ts DATETIME DEFAULT CURRENT_TIMESTAMP, power_w REAL, energy_kwh REAL, room_temp REAL, room_humi REAL, outdoor_temp REAL, set_temp REAL, mode TEXT );字段不复杂但关键的都记录了实时功率、累计电量、室内温湿度、室外温度、当时设定温度和模式。为什么要同时存这些因为后面生成省电报告时需要按温度区间和模式去对比耗电情况。如果没有这些上下文数据只能拿到一个总电量什么都分析不出来。异常识别我做了两个规则如果功率大于0但小于30W且持续超过30分钟认为空调进入了“待机或送风循环”异常状态触发提醒。如果连续5次采集的功率差超过300W说明空调在频繁启停需要检查设定温度和模式是否来回变化。这些规则不复杂但能发现很多真实问题。我遇到过一台空调因为滤网脏堵功率比正常多了15%就是靠功率曲线长时间偏高才发现的。所以数据入库这事别嫌麻烦时间维度拉得越长报告越有参考价值。4. 自动控制与执行层让空调听懂你的指令4.1 红外控制方案空调伴侣或者ESP32红外发射管决策逻辑跑完了怎么把“调到26度、制冷模式”这条指令真正发给空调有两条路买一个空调伴侣或者自己用ESP32接红外发射管自己写红外码库。我建议普通用户直接用空调伴侣市面上的主流产品能学习原装遥控器的红外码然后通过APP或开放接口调取。自己DIY的话坑在于不同品牌的空调红外编码格式不一样有的用NEC协议有的用Philips RC5你需要先用红外接收管录码然后在库里管理每个按键对应的raw码挺折腾的。但如果你手头正好有ESP32这倒是个有意思的周末项目。控制下发我有两个原则一是每次下发间隔至少3秒防止红外发射过于密集导致空调响应异常二是下发后要用功率曲线确认。如果空调是制热刚开机时功率会爬到1500W以上如果是制冷功率会在600W到1200W之间波动。如果功率曲线没有任何变化大概率是红外码没被识别需要重新学习。4.2 控制策略温控回差、波动限制、强制暂停这部分是我踩坑最多的地方。最初版本让系统每2分钟就根据最新温度推荐值直接调空调结果一天下来空调频繁启停耗电没省下来还多了“咔哒咔哒”的压缩机启停声。后来加了三重限制回差限制只有目标温度与当前设定温度相差超过1度时才下发。时间锁连续两次指令间隔最少15分钟。波动限制如果当前室内温度在30分钟内波动小于0.5度并且目标温度与当前设定温度只差0.5度干脆不改因为这点差异对体感和耗电影响都很小没必要折腾。还有一个容易被忽略的场景空调刚开机的瞬间功率会冲得很高几分钟后会慢慢降下来。如果在启动期按稳态逻辑去推荐温度很容易给出“调高温度”的指令但此时压缩机其实已经在高速运转。所以我加了一条强制暂停规则每次空调开机后的前20分钟内不执行任何调温指令只记录数据让系统先跑完启动期。代码里维护了一个空调状态机状态包括OFF、STARTING、RUNNING、STABILIZED每个状态对应不同的控制策略。写了状态机之后系统的决策明显稳定多了不再像之前那样“东一下西一下”。5. 省电报告生成让每一度电都有据可查5.1 报告里应该有哪些指标省电报告是这个项目从“自嗨工具”变成“能给别人看的产品”的关键。我的报告分日报和周报两个维度。日报指标当日总耗电量单位kWh平均功率、峰值功率、功率曲线空调运行时长、压缩机启停次数当日推荐设定温度和实际运行温度的对比估算省电量按历史同室外温度工况下未使用智能策略的耗电做基准。周报指标每天耗电量的变化趋势不同模式制冷、除湿、制热的耗电占比室外温度区间与耗电量的相关性人数与耗电量的相关性。这套指标看着多但数据其实全都有。核心难点是“估算省电量”怎么计算下面单独说。5.2 用Python生成可视化报告我用了matplotlib和HTML模板两种方式生成报告。日报用matplotlib生成几张图拼到HTML里周报直接导出一个完整的HTML文件方便在手机上查看。生成图片的核心代码逻辑import matplotlib.pyplot as plt import sqlite3 import pandas as pd conn sqlite3.connect(ac_power.db) df pd.read_sql_query( SELECT ts, power_w, room_temp, set_temp, mode FROM power_log WHERE ts ?, conn, params(start_time,) ) df[ts] pd.to_datetime(df[ts]) df.set_index(ts, inplaceTrue) df df.sort_index() # 这一步必须做 fig, ax plt.subplots(figsize(12, 4)) ax.plot(df[power_w], color#2f6fb3, linewidth1) ax.set_ylabel(功率(W)) ax.set_title(空调实时功率曲线) plt.tight_layout() plt.savefig(daily_power.png, dpi150)这段代码对新手没难度但有一点要注意SQLite查出来的数据默认不保证有序如果不对ts做排序和去重你会看到一条乱七八糟的折线。我在实际跑的时候第一版就踩了这个坑还以为是数据采集有问题。省电量的核心计算用的是“基准线对比法”E_saved E_baseline - E_actual基准E_baseline是“室外温度相近、运行时长相近”的历史数据取未开启智能策略时的平均每小时耗电量再乘以本次运行小时数。比如上周六室外平均34℃空调开了8小时总耗电7.2度平均每小时0.9度这周六同样34℃智能策略运行8小时总耗电5.8度平均每小时0.725度那节省就是(0.9 - 0.725) × 8 1.4度节省比例约15.5%。这个口径虽然不是最严格的控制变量实验但在家庭场景下足够说明问题。我每个月初会把上个月的所有运行日志导出生成月度报告看整体趋势。连续记录三个月后那份趋势图比任何教程都有说服力。6. 实测效果、常见问题与避坑指南6.1 实测数据一个夏天的省电结果我在客厅跑了一整个夏天大约25平米每天大约开8小时。整理结果如下月份平均室外温度总耗电(kWh)去年同期(kWh)省电比例6月29℃14217016.5%7月33℃19824519.2%8月34℃22628320.1%9月28℃11814317.5%整体来看最热的那段时间省电比例反而更高因为系统在高温期间更有效地限制了无意义的低温设定和频繁启停。按当地电价来算三个月省了大概160多元硬件成本基本回本了。说明一下这个对比不是严格的双盲实验去年有些天开窗习惯不同但曲线趋势是可信的。最明显的提升是压缩机启停次数降了大概40%这对电费和压缩机寿命都是好事。6.2 常见问题排查速查表现象可能原因解决方法空调没反应红外码过期或发射被遮挡重新学习遥控器码调整红外发射位置空调频繁启停决策周期太短或回差太小把采样周期调到2分钟以上回差调到1度推荐温度忽高忽低人数传感器误判给人数检测加滤波或改为手动人数输入功率曲线明显偏高滤网脏、冷媒不足、设定温度过低清洗滤网检查设定温度与实际值差距报告显示省电量为0基准线数据太少先人工记录一周的基准能耗DHT22读数飘忽不定传感器离出风口太近把传感器移到空调斜对面至少远离0.5米有几个点我特别想强调。DHT22这种传感器在出风口附近读数能差4~5度。我第一次就把传感器绑在空调旁边的管道上结果室内29度它测出来25度系统以为很凉快了就疯狂上调温度实际客厅热得要死。后来把传感器放在茶几上离空调有2米多远数据才正常。人数检测也是个大坑。一开始用红外人体传感器结果风扇一吹窗帘就能误触。后来换成ToF激光测距传感器放门口数进出的人头配合一个简单的队列过滤效果才勉强能用。如果你不想折腾直接手机手动输入人数也完全可行毕竟智能家居要的是稳定不是炫技。6.3 我没写进代码里、但很重要的几个判断第一不要为了省电牺牲健康。我在设计推荐温度时最低不会推荐低于24度最高制热不会超过22度并且每个小时至少有一次自然通风提醒。省电助手的价值是帮你省掉空调浪费掉的那部分电不是让你和家人在28度的客厅里汗流浃背。第二空调能效等级不同同样的设定温度实际耗电差异非常大。我家那台老空调是三级能效制冷设定26度时功率能到1100W朋友家新一级能效同工况只要650W。在这种前提下与其依赖算法把温度调到26.3度不如提醒你换一台更合适的空调。所以每月的省电报告里我会附带一条“平均每小时耗电量”的对比帮你判断这台空调是否还值得继续用。第三红外控制天然有盲区尤其是空调伴侣放在电视柜后面红外线被挡住空调根本没收到指令你这边还以为控制成功了。我的经验是装好后至少做一次“指令下发后的功率变化校验”也就是每隔一段时间比对一下功率曲线有没有实际响应。这条真实场景里的经验比任何代码技巧都有用。最后再分享一个小技巧这套系统其实不需要多高配的硬件。一个树莓派Zero、一个十块钱的温湿度传感器、一个几十块的WiFi功率计量插座加上你手头已有的手机或者电脑就能把整个流程跑通。算法部分我后来还尝试过更复杂的机器学习模型但实测下来这种先验知识简单的场景经验公式反而比黑盒模型更稳因为你能解释每一个推荐温度的理由出了问题也方便排查。对我来说这个项目最大的收获不是省了那160块钱而是让我真正理解了一台空调在什么工况下费电、什么工况下省电。以后不管换什么样的空调我都会先看看它的功率曲线再决定怎么开。