空调与温湿度闭环控制
开环与闭环的区别
入门级自动化是「开环」:温度高于 28 度就开空调,至于开了之后房间降到多少,它不管。进阶玩法是「闭环」:设定一个目标温度,让系统根据实测温度自己决定开还是关、开多大,把室温稳定在一个区间里。
闭环自动化的本质是把决策权交给系统:你定目标,传感器反馈,控制器计算如何动作。这一篇就从开环起步,一步步搭一个体验接近恒温器的闭环控制。
为什么要闭环?因为空调这玩意儿有自己的恒温器,我们却经常把它当「开关」用:进门开、出门关,中间房间是冷是热只能靠人调解。让系统接管这件事之后,你会发现家里始终处在一个稳定的区间,没有那种「一进门先热十分钟、开了空调又冷得发抖」的往复。
第一步:开环自动化的死穴
最经典的新手配置是这样的:温度高于 28 度持续 5 分钟且有人在家,就把空调开到 26 度。看起来合理,写起来也短,但它在运行几天后一定会让你怀疑人生。
trigger:
- platform: numeric_state
entity_id: sensor.living_temp
above: 28
for: "00:05:00"
condition:
- condition: state
entity_id: input_boolean.someone_home
state: "on"
action:
- service: climate.set_temperature
target:
entity_id: climate.ac
data:
temperature: 26
问题在哪?温度回落到 28 以下就会关空调吗?不会。它只在你「超过 28」时开,之后室温怎么变化它都不管,直到另一条自动化或手动接管。反过来也可能出现「开了关、关了开」的振荡:阈值只差一度,空调启停频繁,既费电又难受。
开环的另一个问题是它不知道「人的感受」。同样 27 度,湿度 40% 和 70% 的体感差出一个季节。只盯温度的温控,永远差点意思。
再往细里看,还有一个被忽视的因素:滞后。空调指令下发后,房间温度不会立刻变,传感器感知还要再慢一拍。整个回路里有几分钟的延迟,如果你按「即时温度」做判断,永远是在打已经过去的靶子。理解滞后是做温控的关键觉悟,后面的迟滞区间、持续时间,都在给这个滞后让路。
第二步:窗口式的双向控制
改进一版:设定一个「控制窗口」,温度越窗就动作,而且在窗口内维持。
| 条件 | 动作 |
|---|---|
| 高于 28 且持续 5 分钟 | 开空调制冷 26 度 |
| 低于 25 且持续 10 分钟 | 关空调 |
| 在 25 与 28 之间 | 不动作 |
关键设计:开和关的阈值不对称(28 开,25 关),中间留出「迟滞区间」。迟滞是控制理论的常识,也是空调寿命的朋友:没有它,室温在 27.9 和 28.1 之间抖动时,空调会被来回点按。
开和关都要带 for 持续时间,过滤传感器毛刺。至于迟滞区间留多大,看房间保温性能:保温差的房子窗口要更宽,否则空调频繁启停省下的电还没赚回来。
迟滞区间的直觉解释:它让「开」和「关」这两个动作之间永远隔着一个缓冲带,室温必须走完这段带子才允许下一次动作。温差 3 度的窗口,意味着室温至少要真正变化 3 度空调才会重新决策,这就是它防止抖动的原理。
还有个常见的初级错误是「自动关空调忘了条件」。夏天家里一直热,温度始终在 26 以上,关空调那条永远不触发——这不是 bug 是逻辑缺陷。关空调自动化最好再加一个「无人在家」或「入夜」的触发,给它独立的工作机会,而不是只依赖温度回落。
第三步:加入湿度
体感温度不等于干球温度。同一温度下,湿度越高人觉得越热。一个简单的体感修正:
- condition: template
value_template: >-
{{ (states('sensor.living_temp') | float
+ (states('sensor.living_humidity') | float - 50) * 0.06) > 28 }}
公式的意思是:湿度每高出基准 50% 一点,相当于温度上升约 0.06 度的体感。这只是示意性近似,专业做法参考体感温度公式;但示意性近似在家用场景已经足够好——空调自动化的目标不是精确,是舒服。
带湿度判断后,梅雨天 26 度也会开空调除湿,闷热感消失了,而这恰恰是传统温控做不到的地方。人体对湿度的敏感度其实不低于温度,只是空调面板上没给湿度留位置,HA 的模板恰好补上了这个空缺。
加湿器的控制逻辑同理反向:冬天湿度低于 40% 时开启加湿,高于 55% 停止。如果家里有新风系统,三者还能串起来:先调解湿度,再决定要不要引入室外空气。温湿度不分家,这是做环境自动化的基本观念。
第四步:用目标温度做闭环
把「想让房间多少度」放进一个 input_number 滑块,自动化只负责「把房间往目标值推」:
- 实测高于目标 1.5 度以上 → 制冷到目标;
- 实测接近目标(±1 度内)→ 送风维持或停机;
- 实测低于目标 → 切换制热或关机。
这样家人只需拖滑块设目标,不用管空调怎么开。家人面对的是意图,系统负责实现意图——这是全篇最重要的一句话。空调内置恒温器本身就是闭环,但 HA 的闭环能结合「有人在家吗」「现在是电价谷段吗」「窗帘开了吗」这些外部信息,比机器自己的温控懂事得多。
再对比开环版本的感受差别:开环时代你回家得先开空调再等十分钟;闭环时代空调在你到家前十五分钟就开始工作(配合「回家与离家」里的存在检测),推门那一刻温度已经到位。这不是炫技,是实实在在的生活方式变化。

防止打架的几条规矩
多做几台空调联动时容易乱,规矩先立好。一套房子里客厅、卧室、书房各有一台空调,每台都接同一个传感器是灾难的开始——书房的热不等于客厅的热,必须一传感器管一房间,一一对应。规矩立不清楚,温控自动化就一定乱。
- 一台设备一条自动化:不要让两条自动化同时控制同一台空调。
- 动态模式用 mode:控制类的自动化用 restart,避免指令叠加。
- 操作前看状态:空调已经开着且温度合适就别重发指令,减少集成压力也延寿。
- 留最小动作间隔:用 input_datetime 记上次动作时间,五分钟内不再下发,避免压缩机频繁启停。
还有一条隐形规矩:用 action 前先检查目标值是否已经等于当前设定。通过这种方式,可以把无意义指令降到最低,集成的压力和空调的损耗都好。用模板判断 state_attr('climate.ac', 'temperature') 与目标值是否相等,相等就跳过。
再加一条经验:冬天制热逻辑要整体反过来(低温开、过热关),但制热尤棘手——空调制热效率受室外温度影响极大,低于零度时热泵衰减明显,单纯按室温闭环可能达不到目标。冬天的容错心态要更宽,必要时直接用辅助取暖器接力。
外部信号的加入
闭环做好后,再叠加外部信号:
- 存在检测:无人在家自动进入节能目标(目标温度放宽 2 度)。
- 峰谷电价:谷段放宽预冷幅度,峰段保守运行。详见本系列「能耗管理」一篇。
- 窗帘联动:西晒强烈时先拉窗帘再开空调,负荷小一半。
- 室外温度:室外比室内还凉时,关空调开窗通风(配合窗户执行器)。
这些信号叠加之后,温控自动化就开始像「管家」而不像「遥控器」:它知道你不在家就不必全力运行,知道电价贵就保守一点,知道太阳直射就先挡光。每一条规则单独看都不难,组合起来却显著省电。很多人坚持不下来自动化的原因是单条收益不明显,闭环温控恰恰是收益最直观的一项——电费账单会给你反馈。
传感器选型与布置
温控自动化的上限由传感器决定。几条经验:
- 别用空调自带的温度:空调回风口温度受自身出风影响,波动大,作为反馈源会带偏整条回路。
- 放活动区域:沙发、书桌的高度,而不是天花板或空调下。
- 远离热源:电视、服务器、窗户边的读数都不代表「人体的感受」。
- 多房间独立测:一个 sensor 管一个房间的回路,不要一套数据控制全屋。
NAS 或软路由这类常开设备本身就是热源,放在同一房间时空调永远以为「屋里很热」。挪设备不如挪传感器——这是实战中最常被忽视的细节,也再次说明把 HA 跑在 NAS 上时机箱摆放都成了自动化的一部分。

延伸阅读
- 传感器阈值校准思路见本系列「日出日落与光线联动」。
- 电价与能耗联动见「能耗管理:峰谷电价与定时」。
- 存在检测与回家提前预冷见「回家与离家:存在检测实战」。
- 长期运行环境可参考 《NAS 搭建指南》 与 《软路由指南》。
