男子出去游玩一周忘记关空调,回家推门瞬间破防——这类话题最近讨论度很高。先不评价电费单有多刺激,单从技术角度看,这就是一个非常典型的“家电状态远程不可知”问题:人在外地,空调开没开、开了多久、实时功率多少、有没有办法自动关,全部没有数据。解决这个问题靠的不是什么复杂算法,而是一套成熟的智能家居物联网组合:带功率监测的 WiFi 智能插座、空调红外控制器(空调伴侣)、温湿度传感器,再加上 Home Assistant 这类本地中控服务,组合成“远程查看 + 条件触发 + 自动断电”的自动化闭环。
这篇文章把整套方案拆开讲:需要买什么硬件、怎么部署、怎么建自动化规则、怎么通过 API 把“关空调”这个动作接进自己的脚本或定时任务,最后附一份高频问题排查清单。无论你是想给家里、工作室还是宿舍的空调加一道保护,都能照着落地。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 解决问题 | 外出时无法感知空调运行状态,忘记关机导致长时间空耗电 |
| 方案类型 | 智能插座 + 红外遥控 + 温湿度传感器 + 本地自动化中控 |
| 推荐硬件门槛 | 带功率监测的 WiFi 智能插座、空调红外伴侣、USB 温湿度传感器 |
| 软件平台 | Home Assistant(可跑在 Docker / 树莓派 / NAS / 旧电脑) |
| 启动方式 | 厂商 App 配网 + Home Assistant 服务端部署 + 设备集成 |
| 是否支持 API | 支持,Home Assistant 提供 REST API / WebSocket API |
| 是否支持批量任务 | 支持,自动化规则、场景脚本、定时巡检均可批量管理 |
| 是否支持远程查看 | 厂商受控云服务可支持,默认建议局域网内优先使用 |
| 适合场景 | 家庭、工作室、门店、宿舍等长期无人值守场景的用电保护 |
先说清楚,这不是某个单一开源项目,而是由多个开源组件和商业硬件组合出来的方案,核心开源部分是 Home Assistant。这个组合的优势是设备状态、自动化规则、历史记录都可以留在本地,不绑定单一云平台;代价是部署有一定门槛,适合愿意动手折腾的玩家。如果你只想要“装个 App 就能远程关空调”的最低成本方案,那直接买一个带功率监测的智能插座,用厂商 App 就够,不需要下面整套流程。
2. 适用场景与使用边界
这套方案适合谁:
- 经常出差、旅游,一走就是几天到一周的人;
- 家里有老人小孩,容易忘关空调或不会设置定时的人;
- 工作室、门店、宿舍等无人时段需要保证用电安全的场景;
- 想统计空调真实耗电量、评估每月电费构成的人。
能解决的实际问题:
- 远程查看空调插座实时功率,判断空调是否还在运转;
- 到点自动关闭,或者检测到长时间无人后触发关闭;
- 温湿度过高或过低时自动启动、调整或关闭空调;
- 通过 API 把空调控制接到自己的脚本、语音助手或外部服务。
需要避开的场景:
- 没有稳定 WiFi 的场所,所有方案都依赖网络;
- 空调是工业级或特殊高压设备,没有标准插座接口;
- 追求“零改造、纯物理操作”,不想增加任何智能设备;
- 对数据隐私要求极高,且完全不接受任何厂商云服务。
使用边界与安全提醒必须放在前面:智能插座和空调伴侣要选择符合国家标准、有强制认证的正规产品,不要使用来路不明的改装设备。空调是大功率电器,涉及改电路或接线时一定要断电操作,非专业人士不要拆改墙插。远程控制功能会经过网络,账号密码要保管好;对外暴露的服务必须做访问控制,不要把公网端口随意开放。自动化规则是辅助手段,不能替代定期的电气安全检查和设备维护。
3. 环境准备与前置条件
3.1 硬件清单
典型的组合如下,具体根据家里空调类型选择:
| 硬件 | 作用 | 选择要点 |
|---|---|---|
| WiFi 智能插座(带功率监测) | 远程断电、实时功率读取 | 确认插头额定电流匹配,16A 空调要用 16A 规格 |
| 空调红外伴侣 / 空调伴侣 | 通过红外码遥控开关、温度、模式 | 确认支持自己空调品牌的红外码库或支持学习功能 |
| 温湿度传感器 | 按室温触发空调自动化 | 选能接入 Home Assistant 的型号 |
| 长期开机的迷你主机 / 树莓派 / NAS | 跑 Home Assistant 服务 | 1 核 CPU + 1GB 内存起步,磁盘建议 5GB 以上 |
3.2 软件与网络环境
- 路由器最好支持 2.4GHz WiFi。很多智能插座不支持 5GHz,或者 5GHz 穿墙后不稳定,配网前先确认。
- 准备 Docker 环境,或者直接选择刷 Home Assistant OS。
- 电脑浏览器访问管理界面,手机端装 Home Assistant 官方 App。
- 智能插座厂商的 App 必须装好,因为第一步配网通常要在厂商 App 里完成。
部署前先核对这份通用检查清单:
| 检查项 | 要求 |
|---|---|
| WiFi 频段 | 2.4GHz 覆盖稳定 |
| 插座规格 | 支持目标空调的额定电流 |
| 手机 App | 能成功配网并远程控制插座 |
| 主机资源 | 至少 1 核 CPU、1GB 内存、5GB 磁盘 |
| Docker | 如用容器部署,需安装 Docker Engine 或 Docker Desktop |
| 端口 | 8123 等 Web 管理端口不能被占用 |
4. 安装部署与启动方式
4.1 第一步:给智能插座配网
这一步没有统一命令,因为不同厂商 App 操作略有差异,但通用流程是一致的:
- 把智能插座插到空调插座和空调插头之间,或者用空调伴侣替换原遥控器;
- 手机连接家里的 2.4GHz WiFi;
- 打开厂商 App,进入添加设备,按提示让插座进入配网模式;
- 等待设备上线,确认 App 里能看到实时功率。
配网成功后,先不要急着接 Home Assistant。直接在厂商 App 里验证一下远程关机和开机,这一步如果失败,后面集成一定失败,这是最基础的问题。
4.2 第二步:部署 Home Assistant
Home Assistant 的安装方式比较多,这里给一个 Docker 通用模板,实际路径和镜像版本需要按你的平台调整:
# 创建配置目录 mkdir -p /opt/homeassistant/config # 启动容器,映射 8123 管理端口 docker run -d \ --name homeassistant \ --restart=unless-stopped \ -v /opt/homeassistant/config:/config \ -v /etc/localtime:/etc/localtime:ro \ -p 8123:8123 \ ghcr.io/home-assistant/home-assistant:stable启动后访问http://宿主机IP:8123,按页面引导创建管理员账号、填写家庭名称和时区。如果你用的是树莓派或专用盒子,更推荐直接刷 Home Assistant OS,管理体验更接近完整系统,支持一键安装集成和加载项。刷机流程一般是:下载官方镜像 -> 写卡工具写入 SD 卡 -> 接网线或配置 WiFi -> 浏览器访问http://homeassistant.local:8123。
4.3 第三步:添加设备集成
把智能插座和传感器接进 Home Assistant,取决于设备通信协议:
- 小米、涂鸦等平台设备:在“设置 -> 设备与服务 -> 添加集成”里搜索对应品牌,登录账号后自动发现设备;
- 支持 MQTT 的设备:先在 Home Assistant 安装 Mosquitto broker 加载项,再在设备端配置 MQTT 服务器地址,最后用 MQTT 集成添加实体;
- Broadlink 等红外设备:添加 Broadlink 集成后,用遥控器学习空调码,生成对应的 climate 实体。
不同硬件接入方式差异很大,动手前先查 Home Assistant 官方集成文档,确认你的设备支持哪种协议。不要看到一份教程就照搬,设备型号不一致,实体 ID 和命令格式都会不同。
4.4 第四步:验证设备实体
在 Home Assistant 的“开发者工具 -> 状态”里搜索插座和传感器,正常情况下能看到类似这样的实体:
# 实体状态示例,实际 ID 以设备接入后生成的为准 sensor.plug_power: "0.00" # 实时功率,单位 W switch.plug: "on" # 插座开关状态 sensor.temperature_room: "26.5" # 房间温度 climate.ac: "cool" # 空调模式看到这些实体,说明设备已经成功接入,可以进入自动化配置。
5. 功能测试与效果验证
5.1 测试远程开关空调
测试目的:确认 Home Assistant 能把“关闭空调”的指令成功下达到插座或空调伴侣。
操作步骤:
- 打开 Home Assistant 仪表盘,找到插座实体;
- 点击关闭,观察实体状态变为 off;
- 到空调旁确认空调已断电或进入待机;
- 再次打开,确认恢复供电。
判断标准:实体状态变化与设备实际动作一致,局域网环境下延迟一般在 1 到 3 秒量级。
失败排查:先回厂商 App 看设备是否在线。如果厂商 App 能控制但 Home Assistant 不行,检查集成配置、实体 ID 是否精确,或者是否有自动化规则在反复覆盖状态。
5.2 测试功率监测
测试目的:通过实时功率判断空调是否真的在运转,这是远程判断空调状态最可靠的方式。
操作步骤:
- 打开空调制冷模式,设置一个明显温度,观察 Home Assistant 中功率实体的数值;
- 关闭空调,等待 1 到 2 分钟,再次查看功率值。
判断标准:空调运行时的功率明显高于待机功率,关闭后功率回落到待机值附近。有了功率监测,在外地就不需要靠“我记得关没关”来猜,打开 App 看功率就知道空调状态。
5.3 测试自动化规则
自动化是这套方案的核心。先看一个常见需求:出门后长时间无人,自动关闭空调。使用手机定位触发是一个稳妥的方式:
# Home Assistant 自动化示例:离家 30 分钟后关闭空调 # 注意:所有实体 ID 都需要替换成你自己环境里的实体 alias: "离家自动关空调" triggers: - trigger: zone entity_id: person.zhang_san event: leave zone: zone.home conditions: - condition: state entity_id: switch.ac_plug state: "on" actions: - action: switch.turn_off target: entity_id: switch.ac_plug再看第二个常见需求:室温达到目标后自动关闭空调,避免整夜空转:
alias: "到达目标温度自动关空调" triggers: - trigger: numeric_state entity_id: sensor.temperature_room above: 26 conditions: - condition: state entity_id: climate.ac state: "cool" actions: - action: climate.turn_off target: entity_id: climate.ac测试方法:先手动把条件改成容易触发的临时值,比如把 above 改成 20,确认触发逻辑正确后再改回真实值。自动化加入后,在“设置 -> 自动化与场景”里能看到运行记录,触发失败会留下报错信息,方便定位。
6. 接口 API 与批量任务
6.1 Home Assistant REST API
Home Assistant 提供 REST API,长期访问令牌在“个人资料 -> 安全 -> 长期访问令牌”里生成。请求时把令牌放在 Header 里:
# 查询实体状态示例 curl -X GET \ -H "Authorization: Bearer 你的长令牌" \ -H "Content-Type: application/json" \ http://localhost:8123/api/states/switch.ac_plug返回结果是 JSON 格式,其中 state 字段就是实体当前状态。基于这个接口,可以写巡检脚本:每天定时检查空调功率,如果发现功率高于某个阈值且连续运行超过设定时长,就执行关闭动作并发送通知。
6.2 Python 脚本关闭空调
import requests BASE_URL = "http://localhost:8123" TOKEN = "你的长令牌" ENTITY_ID = "switch.ac_plug" headers = {"Authorization": f"Bearer {TOKEN}"} def get_power() -> float: url = f"{BASE_URL}/api/states/sensor.plug_power" resp = requests.get(url, headers=headers, timeout=10) data = resp.json() return float(data["state"]) def turn_off_ac() -> None: url = f"{BASE_URL}/api/services/switch/turn_off" payload = {"entity_id": ENTITY_ID} requests.post(url, json=payload, headers=headers, timeout=10) power = get_power() print(f"当前功率: {power} W") if power > 200: # 阈值按实际空调待机/运行功率调整 turn_off_ac() print("检测到空调仍在运行,已自动关闭") else: print("功率正常,不做操作")这类脚本可以放进 Linux 的 cron 或 Windows 计划任务里,形成“定时巡检 + 自动处置”的批量任务。比如每天早上 9 点和晚上 11 点各执行一次,正好覆盖出门和睡觉两个关键时间点。
6.3 多设备批量任务设计
不止一台空调时,可以维护一个设备清单,脚本循环处理:
{ "devices": [ { "entity_id": "switch.ac_plug_room1", "power_sensor": "sensor.plug_power_room1", "max_run_hours": 8 }, { "entity_id": "switch.ac_plug_room2", "power_sensor": "sensor.plug_power_room2", "max_run_hours": 8 } ] }批量巡检脚本按清单循环执行,每次记录检查时间、功率和处理结果,写入本地日志。失败重试策略建议:单个设备调用失败先重试 2 次,间隔 10 秒;连续失败则跳过本轮,等下一次巡检再处理,避免一台设备卡死整批任务。
7. 资源占用与性能观察
7.1 Home Assistant 的资源占用
Home Assistant 本身不算重。在 Docker 或树莓派环境下,空载时 CPU 占用一般很低,内存占用取决于集成数量,从几百 MB 到 1GB 区间都比较常见。如果加载了大量历史记录并长期统计,磁盘占用会持续增长,建议定期清理或配置数据库保留策略。
观察方法:Docker 环境用docker stats homeassistant查看实时占用;树莓派可以用htop查看。如果 CPU 长期过高,优先检查是否有集成在频繁轮询设备,把轮询间隔调大通常能立刻降下来。
7.2 影响响应速度的因素
- 设备轮询间隔:智能插座如果没有本地协议、每次都走云服务,单次状态刷新延迟会明显偏高;
- WiFi 信号:设备离路由器太远会频繁超时重试,拖慢整个自动化链路;
- 红外控制:空调伴侣发出红外指令后,空调不一定立刻响应,自动化里需要预留合理等待时间;
- 自动化数量:同一个状态变化可能触发多个自动化,注意排查循环触发问题。
7.3 降低占用和提升稳定性的思路
- 优先选支持本地协议(如本地 MQTT、局域网 API)的设备,减少云依赖;
- 在记录配置里排除不需要长期保存的实体,收敛数据库增长;
- 简单任务可以不用跑完整 Home Assistant,直接用厂商 App 的定时功能也能解决大半需求;
- 批量巡检脚本里加超时和重试逻辑,避免单台设备异常拖垮整批任务。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 插座离线,App 无法控制 | WiFi 信号弱、路由器重启、设备固件异常 | 查看设备指示灯,检查路由器在线设备列表 | 重启插座和路由器,靠近路由器重新配网 |
| Home Assistant 里看不到实体 | 集成未正确添加或实体被禁用 | 查看集成日志,确认设备协议 | 删除集成重新添加,检查实体是否被隐藏 |
| 自动化不触发 | 条件不满足、触发源配置错误 | 在自动化运行历史里查看触发记录 | 用临时阈值测试触发逻辑,修正条件 |
| API 返回 401 | 长令牌无效或未携带 Header | 检查 Header 格式和令牌状态 | 重新生成长期访问令牌 |
| 红外控制空调没反应 | 空调品牌或型号不在红外码库内 | 用原遥控器测试学习功能 | 重新学习红外码,或更换支持该品牌的空调伴侣 |
| 功率传感器一直为 0 | 插座不支持功率监测或固件未上报 | 查看设备规格说明和实际数据流 | 更换带功率监测的插座 |
| 批量脚本卡住 | 设备响应超时、网络阻塞 | 查看脚本日志,确认卡在哪一步 | 为每个请求设置超时并增加重试 |
| 远程访问失效 | 厂商云服务异常或网络环境变化 | 查看 App 设备状态和网络 | 使用厂商受控远程服务,避免依赖公网端口映射 |
9. 最佳实践与使用建议
第一次搭建时,不要一上来就配置一堆自动化。正确的推进顺序是:
- 先在厂商 App 里确认硬件远程控制和功率读取都正常;
- 接入 Home Assistant 后,手动测试开关和功率读取;
- 加一条最简自动化,比如“每天 23 点关闭空调”;
- 跑一周,观察运行记录和误触发情况,再逐步补充复杂规则。
工程化方面,建议做这几件事:
- 把设备配置和自动化 YAML 纳入版本管理,改坏了可以快速回滚;
- 自动化规则里加上通知动作,通过 App 推送告知执行结果;
- 批量巡检脚本输出结构化日志,方便后续排查;
- 所有远程访问优先走厂商提供的受控服务和 HTTPS,不要直接把 8123 端口映射到公网,避免被扫描和未授权访问;
- 给 Home Assistant 开启自动备份,配置和数据库定期备份到独立存储。
合规和隐私同样要注意。智能设备会采集家庭用电数据,使用前先了解厂商隐私政策。涉及摄像头、人脸识别等强隐私设备时,不要和空调控制混在同一个无隔离的网络里。电气安全方面,插座额定电流必须匹配空调,长时间运行的自动化要设置兜底逻辑,比如检测到功率异常过高时直接关闭并通知。
10. 总结与下一步
回到开头的场景:出门一周忘关空调,回家看到电费单瞬间破防。这套智能家居方案不能帮你免掉这次电费,但能让你以后每次出门前都对设备状态心里有数,甚至人还没到家,空调已经按计划关闭。
最值得先验证的功能是功率监测和远程关闭,这两项确认没问题,整套方案的地基就稳了。最容易踩的坑是设备协议不统一:买设备之前先确认是否支持本地 API 或 MQTT,避免买回来只能走厂商云,自动化的实时性和稳定性都打折扣。
下一步可以按需扩展:接入温湿度传感器做更精准的环境控制,把门窗传感器纳入离家判断逻辑,或者把巡检脚本升级成一个小型 Web 服务,做成家庭用电实时看板。这套组合的扩展空间很大,从“防止破防”到“全屋自动化”,可以一步一步搭起来。