
出门游玩一周才到家推开门的一瞬间发现空调还在吹风电费账单和室内冷风同时让人破防。这个新闻场景经常被当成生活段子转发。如果只当段子看笑过就结束了如果站在工程视角看它其实暴露了家庭用电设备管理里非常典型的系统缺口人工控制链路只在人在现场时有效缺少离人检测、远程干预、持续运行状态感知和异常能耗告警。这篇文章就用这个场景作为入口讨论如何用空调伴侣、智能传感器、Home Assistant 这类工具把一台普通空调改造成具备远程控制、离家联动、能耗监控和异常提醒能力的设备并梳理从设备选型、网络规划到自动化落地、故障排查的完整过程。下面会沿着一条主线展开先把“忘关空调”拆成需求再选技术路线搭最小远程控制系统给空调加能耗监控最后扩展成完整的离家场景。已经接触过智能家居的读者可以直接看第 3 节以后的配置刚开始接触的建议从第 1 节读起先理解为什么单纯的“远程开关”并不能真正解决一周没关空调的问题。1. 先把“忘关空调”拆成一个可解决的工程问题1.1 人工开关空调的链路到底缺在哪传统空调的运行完全依赖人工操作完整链路是人觉得热走到空调附近拿起遥控器按下制冷空调启动之后持续运行直到人再次手动关闭。这套链路能成立的前提是人必须在现场、必须记得这件事、并且愿意在离开前执行关闭动作。出门游玩一周时任意一环断裂空调就会持续运行。更麻烦的是运行期间没有任何系统能判断出“这是不合理的运行状态”。人不在家没有体感温度反馈没有定位信息没有功率计量空调自己也不会因为“主人不在”而停机。所以热搜里那一瞬间的破防本质不是“人笨”或“记性差”而是家用设备管理缺少三个基本能力状态可读、行为可控、异常可知。人不在时系统依然能够看到空调在运行能够主动关掉它或者在关不掉的时候告诉主人。1.2 从破防瞬间倒推需要哪四种能力要避免“一周忘关空调”需要四种能力配合第一是远程控制能力。无论人在公司、机场还是景区都能通过手机或服务器下发关闭指令。第二是状态感知能力。需要知道空调当前是不是真的在运行而不是只看到遥控器上写着“发送成功”。红外命令发出后如果接收头被遮挡、遥控码不匹配、空调处于锁定状态设备并不会真正动作。第三是离家联动能力。系统需要根据位置、传感器、门锁、手机蓝牙等信号判断“家里已经没人”并自动触发关闭逻辑。第四是异常告警能力。当空调持续运行、功率异常高、离人状态下没有被关闭时系统能主动推送通知而不是静默运行到电费单出来。这四种能力分别落在设备链路上感知层负责温度、湿度、功率、人体存在决策层负责规则判断和自动化编排执行层负责发送红外码、控制继电器或调用云服务通知层负责把结果或异常推给用户。1.3 普通空调智能化的三条技术路线普通空调要智能化常见路线有三种选择时要先确认空调类型和家里已有的设备条件。技术路线适合对象能做什么主要局限注意事项红外空调伴侣 / 万能遥控器绝大多数壁挂机、柜机远程发送开关机、调温、调模式只能发指令不能确认空调真实状态摆放位置要能直射或通过墙面反射到空调接收头智能插座 功率计量定频机械开关空调、风扇、热水器通断电、实时功率、累计电量变频空调断电重启可能损坏压缩机使用前先确认空调说明书是否允许直接断电原生智能空调或自带 App新购空调原生远程控制、状态回传更完整品牌封闭不同 App 互相割裂确认设备是否支持局域网集成或 Matter 接入对于已经装好且运行正常的空调最优先的方案是“带功率计量的红外空调伴侣”。它既能通过红外码控制传统空调又能通过电流和功率判断空调是否真的在运行。智能插座方案只在空调是纯机械开关、并且说明书允许断电的场景下使用。原生智能空调体验最好但如果品牌没有开放局域网 API后续自动化会受到较多限制。这里要记住一个核心判断远程控制只是基础真正重要的是“命令发出后系统能够确认设备状态已经发生变化”。没有状态回读远程开关就只是盲操作。2. 环境准备设备选型与网络架构先对齐2.1 最小硬件组合与网络结构避免一次性买太多设备。针对“离家后关空调”这个最小场景一套够用的硬件组合如下设备作用数量建议关键参数空调伴侣 / 红外遥控器发送空调控制指令读取功率1 个支持 2.4GHz Wi-Fi最好带功率计量门窗传感器判断房门或窗户是否长期开着按实际门数磁簧开关或霍尔传感器人体存在传感器判断房间内是否还有人客厅、卧室各 1 个覆盖区域避免正对空调出风口本地智能中枢汇聚设备、运行自动化规则1 台树莓派、NAS、旧电脑均可路由器提供 2.4GHz 网络、固定 IP已有关闭设备隔离保证 IoT 设备互通网络结构可以简化为一条链设备通过 2.4GHz Wi-Fi 连接路由器路由器与本地智能中枢处于同一局域网手机通过家庭网络或服务商的安全中继访问本地中枢。下面的文本示意可以帮助理解空调伴侣/传感器 —— 2.4GHz Wi-Fi —— 路由器 | Home Assistant / Node-RED | 手机 App / 消息通知很多 IoT 设备只支持 2.4GHz不支持 5GHz。如果路由器开启了双频合一可能出现设备频繁掉线或搜索不到的问题。建议为 IoT 设备单独开启一个 2.4GHz SSID并关闭“Wi-Fi 隔离”功能。这个设置很重要否则手机可能连不上设备自动化链路会断在最底层。2.2 控制协议选型为什么本地优先、云备用设备厂商的控制协议通常有两种路径云端控制和局域网本地控制。云端控制的优点是配置简单手机在外面也能直接操作缺点是一旦厂商服务波动、网络异常或账号失效自动化就会中断。对于“离家一周关空调”这种兜底场景方案不能依赖单一云服务。本地控制的典型实现是 Home Assistant 通过局域网 API、MQTT 或 HTTP 接口直接读写设备。即使外网断掉只要家庭路由器还在、本地中枢还在自动化依然能执行。远程访问则通过服务商提供的安全中继或本地加密隧道不建议把设备管理端口直接暴露到公网。选择协议时可以按这个优先级判断优先级方案优点注意点优先设备支持局域网 API响应快、断外网可用不同固件能力差异大要逐个验证其次本地 MQTT 设备或 DIY 设备协议透明、可编程需要自己维护 MQTT broker兜底厂商云服务配置简单、兼容性高不适合作为唯一控制通道观望Matter / Thread跨品牌统一设备兼容性仍在演进落地前要确认学习环境可以先用厂商 App 和云服务跑通功能家庭长期使用建议尽早切换到本地优先的方案。协议选型一旦定错后面改起来比换设备还麻烦。2.3 固定 IP、命名规范和分组策略设备接入网络后第一件事不是写自动化而是给每台设备固定 IP。路由器默认的 DHCP 租约到期后设备重新上线可能拿到不同地址。自动化脚本里如果写死了旧 IP命令就会在链路中间断掉。固定 IP 有两种常见方式在路由器后台做 IP 与 MAC 地址绑定或者在 DHCP 设置里为指定 MAC 保留固定地址。操作完成后通过设备的详情页或arp -a命令确认地址没有变化。同时建议建立命名规范方便后续维护。可以通过区域加设备加功能的方式命名对象命名示例说明空调实体climate.living_room_ac使用小写字母和下划线不要使用中文和空格功率传感器sensor.livingroom_ac_power实体名中避免带特殊符号MQTT 主题home/livingroom/ac/power/set按“区域/设备/功能/动作”分层自动化名称离家后关闭客厅空调显示名称可用中文但实体 ID 保持英文固定 IP 和命名规范在单台设备上看似不重要设备数量到 10 台以上时没有规范会直接导致自动化配置混乱。学习环境可以只做固定 IP生产或家庭长期运行不要省略命名规范。3. 搭建最小可用的远程控制系统3.1 先通过厂商 App 跑通“远程关空调”在引入 Home Assistant 之前先用厂商 App 把最基础的远程控制跑通。这一步能验证三件事空调伴侣连接 Wi-Fi 是否稳定、红外码是否学习成功、手机在外网时能否正常下发命令。操作步骤通常是给空调伴侣通电进入配网模式连接 2.4GHz Wi-Fi在 App 中选择品牌空调让设备学习遥控器的开关机、制冷、制热、温度调节等红外码绑定账号后在手机端完成一次远程开关。有一个关键检查点手机要切到流量网络测试不要连接同一个家庭 Wi-Fi。这样才能确认控制走的是远程链路而不是局域网内直接访问设备。如果 App 显示命令成功但空调没有反应大概率是红外码不匹配或者空调伴侣没有对准空调接收头。常见坑是空调伴侣放在电视柜角落红外信号被机顶盒或装饰品挡住。调整位置后重新学习遥控码大多数问题都能解决。3.2 把设备接入 Home Assistant 统一管理厂商 App 的问题在于不同品牌互相独立自动化规则很难跨设备编排。Home Assistant 的作用是把传感器、空调、通知服务汇聚到同一个中枢里。安装方式可以选择树莓派、NAS 虚拟机或旧电脑安装完成后默认 Web 端口是 8123。接入设备时优先使用 Home Assistant 官方集成列表里匹配的集成如果设备是自制红外控制器可以通过 MQTT 接入。下面的 YAML 配置是 MQTT 接入的概念示例用于说明思路。实际设备接入时需要根据设备支持的 topic 和 payload 调整mqtt: switch: - name: living_room_ac_power state_topic: home/livingroom/ac/power/state command_topic: home/livingroom/ac/power/set payload_on: ON payload_off: OFF optimistic: falsestate_topic表示设备上报状态的地址command_topic表示下发命令的地址optimistic: false表示 Home Assistant 不应在命令发出后立刻假设状态已经改变而是等待设备上报真实状态。这样能避免“App 显示已关机其实空调还在运行”的假象。如果使用 ESP32 加红外二极管自制空调遥控器思路也是一样ESP32 接收 MQTT 消息解析出关机命令后调用红外库发射对应编码。代码只是演示实际红外编码需要按空调品牌适配import paho.mqtt.client as mqtt import time # 概念示例订阅离家事件后自动发送关机命令 def on_message(client, userdata, msg): if msg.topic home/departure and msg.payload bgone: client.publish(home/livingroom/ac/power/set, OFF) time.sleep(3) client.publish(home/livingroom/ac/verify, check_power) client mqtt.Client() client.on_message on_message client.connect(localhost, 1883, 60) client.subscribe(home/departure) client.loop_forever()3.3 写自动化检测到离家后自动关空调Home Assistant 中自动化由触发条件、判断条件和执行动作三部分组成。离家关空调的自动化可以写成下面这样alias: 离家后关闭客厅空调 trigger: - platform: zone entity_id: person.zhangsan zone: zone.home event: leave condition: - condition: state entity_id: person.zhangsan state: not_home action: - delay: 00:10:00 - condition: state entity_id: climate.living_room_ac state: cool - service: climate.turn_off target: entity_id: climate.living_room_aczone触发表示某个人离开家这个地理范围delay延时 10 分钟目的是过滤掉取快递、扔垃圾这类短暂出门condition判断空调确实处于制冷状态才执行关闭避免重复下发命令。延时时间不能写太长。如果定位漂移导致误触发延时只会把空调晚关 10 分钟不会造成持续一周的损失。更稳妥的方式是同时检查人体传感器只有房间里没有检测到人体运动才执行关闭。如果习惯使用 Node-RED可以在画布上串三条链路MQTT 监听人员状态delay 节点做缓冲条件判断后调用空调服务。逻辑与上面的 YAML 等价只是把规则从声明式改成可视化流。4. 给空调加上“一周没关也能发现”的能耗监控4.1 为什么功率比红外状态更可靠红外空调伴侣能够发指令却很难单独验证指令是否生效。功率计量则不同空调真实运行时压缩机和风机消耗的功率会显著变化。通过功率读数可以反向判断空调状态。功率读数的基本判断逻辑可以用下表概括具体数值需要按空调铭牌和机型标定状态典型功率表现判断意义关机 / 待机0 到几瓦设备已停止工作能耗可以忽略风机运行几十瓦空调可能只开了送风没有制冷压缩机制冷数百瓦到一千瓦以上空调正在真正制冷变频低负荷功率下降但未到待机不能只靠瞬时值要看一段时间累计如果空调伴侣不带计量功能可以串联一个支持功率读取的智能插座但前提是必须确认插座额定电流和空调运行电流匹配。15A 甚至 16A 的大功率空调不要接在 10A 插座后级否则有发热风险。只记录实时功率还不够还要记录一段时间内的累计电量。这样即使两周后才发现异常仍能算出“这台空调在无人状态下多跑了多少度电”。4.2 保存能耗数据并设置异常告警Home Assistant 默认会保存近期历史数据但长时间高频率记录会对 SQLite 造成压力。设备规模变大后可以把能耗数据写入 InfluxDB用 Grafana 展示趋势图。InfluxDB 查询一周内每天能耗的示例如下字段名需要按实际数据模型调整SELECT sum(value) AS daily_kwh FROM kWh WHERE entity_id living_room_ac_energy AND time now() - 7d GROUP BY time(1d)告警自动化的思路是如果“离家状态”为真且空调实时功率超过阈值持续一段时间后仍未关闭就推送通知到手机。示例配置可以写成alias: 离家后空调持续运行提醒 trigger: - platform: numeric_state entity_id: sensor.livingroom_ac_power above: 500 for: 00:30:00 condition: - condition: state entity_id: input_boolean.away state: on action: - service: notify.mobile_app_zhangsan data: title: 空调疑似未关 message: 离家后客厅空调功率仍高于阈值请手动确认。for: 00:30:00表示功率持续 30 分钟高于 500W 才触发用来避免压缩机启动瞬间的功率尖峰造成误报。input_boolean.away是离家模式的开关状态后面会继续说明。4.3 用“延时关闭 功率复核”做兜底一次命令下发不一定成功所以“离家关空调”不能只关一次就结束。工程上更稳妥的做法是加复核步骤流程如下离家信号 - 等待 10 分钟 - 确认家中无人 - 发送空调关闭指令 - 等待 3 分钟 - 读取实时功率 - 功率已回落为待机结束 - 功率仍高于阈值发送异常告警如果第二次读取功率仍然很高不要反复重新发送关机指令而是先告警。因为连发多条红外指令可能造成空调状态错乱也可能说明红外路径已经被遮挡发多少条都没有用。在这个兜底链路里告警不是“最后一步”而是“上报出口”。真正高级的做法是把“关闭失败”当作事件记录进日志同时留给用户一个远程手动控制的入口。5. 运行验证和效果评估5.1 验证远程关闭命令是否真的生效自动化配置完成后第一轮验证不要直接拿“离家一周”来测试而是先做短距离、短时间验证。最有效的验证方式是三层检查看状态、看功率、看温度。验证项预期结果不满足时检查App 或 HA 状态空调显示为关闭检查实体状态是否真实更新还是命令发送成功但状态回读为旧值实时功率从几百瓦回落到待机值检查计量设备是否接入正确、读取周期是否过慢室温变化停止制冷后室温缓慢回升检查温度传感器位置和采样间隔如果命令发送后状态已经变成关闭但功率仍然很高说明命令链路和状态回读之间出现了信息断层。此时应优先相信功率数据继续排查设备真实状态。5.2 设计一组可重复的离家自动化测试建议把自动化当成软件需求来测试而不是配置完了就结束。可以用以下测试用例测试场景操作预期结果异常处理人在家不触发手机保持在家范围内正常走动空调保持运行检查定位漂移、zone 范围设置短暂出门取快递离开家 5 分钟后返回空调保持运行或不中断打开延时后振动会导致短暂停止离家游玩半天离开家超过 30 分钟空调自动关闭收到通知检查 person 实体状态、自动化历史远程手动关闭在外网使用 App 手动关闭空调关闭功率下降检查云服务、红外码、网络链路关闭失败场景故意遮挡红外接收头收到异常告警空调未关检查功率复核逻辑、通知服务测试时可以在 Home Assistant 的“开发者工具-服务”里手动调用一次关闭动作确认服务本身正常。再排查自动化触发链路是否把事件传到服务层。5.3 自动化误判的常见表现与恢复机制自动化误判最典型的是手机定位漂移。人在家里手机信号跳到了 zone 外离家事件被触发空调被自动关闭。解决方式有两种引入人体传感器交叉验证或者增加延时缓冲。第二类误判是传感器盲区。客厅有人但一动不动休息人体传感器没有检测到运动系统误判为无人。此时如果使用“无人关闭”规则会把空调关掉。处理方式是把传感器安装在能覆盖主要停留区域的角落并且不要把判断周期设得太短。第三类误判与功率阈值有关。变频空调低负荷运行时功率可能不高如果把阈值设成 500W就会漏掉“空调仍在运行”的场景。更稳妥的是同时看功率和运行模式或者统计 30 分钟累计电量。恢复机制也很重要。自动关闭后不要轻易允许系统在无人状态下自动打开空调除非有温度过高、宠物保护等明确需求。无人房间自动开机可能带来安全隐患默认只告警即可。6. 常见问题排查与安全边界6.1 自动化没执行按这条链路排查自动化没有执行时不要先怀疑设备坏了。按下面的链路从输入到输出逐层排查现象检查层级具体操作处理建议触发事件根本没有出现触发层查看 Home Assistant 的自动化历史记录观察 person 实体是否进入not_home检查手机定位授权、zone 半径设置触发出现但条件不满足条件层查看条件中的 person、空调实体状态确认条件里写的是cool还是on不同状态值不要混用条件满足但命令没有到达设备执行层手动调用一次服务观察日志中是否有报错检查设备集成是否掉线、token 是否过期命令到达但设备无反应设备层读取实时功率确认设备真实状态检查红外遮挡、遥控码、设备是否锁定命令执行但通知未收到通知层在开发工具中手动发送通知检查手机 App 通知权限、推送服务配置日志是排查过程中最重要的依据。在 Linux 服务器上可以通过journalctl -u home-assistant.service查看日志容器部署则通过docker logs container_name查看。日志里出现unavailable、timeout、unauthorized时优先检查网络和认证而不是重启。6.2 不要把“断电”当成“关闭”这是最容易踩的坑。空调不是台灯直接通过智能插座断电可能导致变频空调的压缩机控制板在非正常状态下掉电。空调正常关机流程会先让压缩机停止、风机继续运转一段时间散热然后进入待机。突然断电会跳过这个时序。对于定频机械开关空调智能插座断电在电路上说得通但也要先确认说明书和铭牌。对于变频空调正确做法是使用红外空调伴侣发送关机指令或者使用空调本身的联网模块完成关机。如果确实需要把智能插座作为“最后兜底”必须是空调已经收到关机指令、功率进入待机值之后才执行断电而不能把插座当作主控制开关。任何断电兜底都要评估压缩机损坏风险不要盲目照搬。6.3 智能家居控制的隐私与用电安全边界智能家居系统的隐私风险和用电安全一样需要提前规划。远程访问不要通过端口映射把管理页面暴露到公网。这样很容易被扫描器盯上。优先使用服务商提供的安全中继或者只在可信网络内访问。这是一个安全底线不是可选优化项。用电安全方面空调是高功率设备。接线、插座、功率计量模块都要匹配空调的实际电流。潮湿区域不要放置智能插座不要使用破损电源线不要在空调运行时反复通断电源。另外很多智能设备会上传数据到厂商云平台。摄像头、麦克风类设备如果不需要云功能建议在路由端禁止其访问外网只保留局域网功能。家庭自动化越深入越需要明确控制边界。7. 从“关空调”扩展到完整的离家场景自动化7.1 离家场景还能联动哪些设备“离家关空调”只是离家自动化的一个起点。同样的触发事件可以扩展到更多设备和动作设备离家联动动作注意事项空调关闭或进入离家模式优先发送遥控码不要直接断电热水器关闭加热或断电确认热水器是否允许远程断电灯光全关或保留夜灯有宠物时保留低频亮光窗帘关闭或按时间调整考虑植物光照需求摄像头进入布防明确隐私区域本地存储优先新风 / 地暖调整到节能模式不同设备控制协议差异大先验证扩展时不要一次把所有设备都接入自动化。每一项设备都应该单独测试确认不会因为误判而影响正常生活。7.2 用“离家模式”状态维护长期可用的自动化设备数量变多后如果每个自动化各自判断“人在不在”会非常难维护。更合理的做法是设定一个全局布尔状态比如input_boolean.away。离家时由统一的事件流把input_boolean.away设为开启回家后再设置为关闭。其他自动化只需要判断这个状态不需要重复监听定位事件。这样自动化的依赖关系更清楚排查时只需要看一条总链路。维护长期可用自动化还要坚持三个原则第一幂等。重复“关闭空调”不会产生副作用不要因为重复触发导致空调在关闭和开启之间来回切换。第二可逆。回家后应该能恢复到离开前的设备状态。但恢复空调时不要简单执行“开机”必须带上温度、模式和风速的完整状态。第三可覆盖。手动操作永远优先于自动化。用户手动打开空调后离家自动化不能在一分钟内又把它关掉至少在缓冲时间内不能动作。7.3 投入使用前检查清单最后把前面内容汇总成一份可执行清单。家庭离家自动化投入使用前建议逐项确认空调伴配合已安装红外码学习成功功率计量显示正常。家庭 Wi-Fi 使用 2.4GHz设备已固定 IP命名规范清晰。Home Assistant 或本地中枢已经安装日志可查询。离家事件触发链路测试通过zone 范围和延时参数合适。空调关闭命令执行后通过功率下降确认设备真实关机。离家状态下功耗异常告警已经配置通知渠道可用。云端服务不可用时本地自动化仍然可以执行。自动化配置已经备份回滚方案明确。手动操作优先级正常不会被自动化频繁覆盖。这套清单不是一次性的而是每次新增设备或修改网络后都应该重新过一遍。离家场景是安全兜底类自动化可靠性比功能丰富更重要。回到热搜里那台开了一周的空调。从技术上看它缺的并不是某个高级设备而是一条完整的链路状态感知、离家联动、远程控制、异常告警。哪怕只先补上其中两环比如空调伴侣的功率计量和一条“离家关空调”自动化就能彻底避免一周后回家打开门是冷风、打开手机是电费提醒的双重破防。下一步大多数家庭不需要一次把设备买齐。先用一个带计量的空调伴侣把手里的普通空调变成可远程控制、可统计能耗的设备等数据跑起来后再决定是否引入人体传感器、门磁、摄像头逐步把“关空调”扩展成完整的离家安全场景。对新手来说最好的练习不是背配置而是把这条链路拆开触发、判断、动作、通知、日志缺一环补一环。