将一台‘傻瓜式’空调变智能(同时不损失我的押金)

Hacker News Top 工具

摘要

一位软件工程师记录了如何使用ESP32、步进电机和Home Assistant,通过MQTT将出租公寓的模拟空调的‘傻瓜式’旋钮变成智能控制。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/29 21:57

# 把一台“智障”空调变智能(还不损失押金) **太长不看:**用步进电机、ESP32 和一颗容忍“凑合”的心,DIY 家庭自动化其实很简单。 --- 我租的公寓空调只能用这种复古的**模拟旋钮**控制,直接装在空调上。没有墙上独立温控器,没有遥控……啥高级功能都没有。 这些旋钮能用……但总得站起来去拧,很快就烦了。 幸好,Prilik 家有句老话:“记住儿子,生活中最难的问题通常靠一个步进电机、一个 ESP32 和梦想就能解决”¹ 果然,花了大概 15 美元买零件,等从中国发货,再花几个小时迭代硬件和固件……我就拼凑出了这堆美丽的玩意: 你看到的是一个**ESP32 控制的步进电机**,通过**联轴器**连到空调的一个旋钮上,再用一个**便宜的 L 型支架**和**活页夹**(外加工业级的**纸板衬垫**)固定在空调背板上。 这整个 MacGyver 式的装置通过 **MQTT** 与我的 **Home Assistant** 实例通信,根据同房间温度传感器的状态开关空调。 瞧,变魔术啦 🪄 ✨ 就这样——我再也不用从沙发上爬起来去调空调了! > 各位专业的嵌入式或机电工程师:我*强烈*建议你们就读到这里。这篇博文剩余部分是一个*软件*工程师做家庭自动化和自制硬件的记录,实话实说:最终成品*和*实现过程都*巨凑合*。不过……如果你不介意凑合:那就读下去,跟我一起看看我是怎么几乎零预算、零经验拼凑出全定制的家庭自动化硬件的。 ## 🗽 背景介绍⌗ 2025 年 4 月,我搬到了纽约市。短暂找房后,找到了一个挺满意的地方:位置方便,楼比较新,租金也超值。没什么好抱怨的! ……除了空调的问题。 你看,纽约的开发商不知道为什么*特别*喜欢用这种噪音大、耗电高、挂墙式的 **PTAC 单元**。有些楼会多花点钱把空调接到墙上温控器……但通常他们选最便宜的方式:完全**模拟的、装在空调上的旋钮**。 这就是我说的那种: 是啊——猜猜*我的*楼选了哪种 🙃 ## 🤔 我有什么选择?⌗ 像任何好租客一样,我首先礼貌地问房东能不能“升级”一下控制方式……现代点的。不出所料,回答大概是“哈哈不行,为啥要换?”,公平地说,这本来就是我预料的回应。 好吧,没关系,像任何好工程师一样——*肯定*有办法从这困境中 hack 出来? 折腾一番后,我成功拆下了空调盖,露出了它的软腹部/内部结构。让我吃惊的是,不仅找到了空调的一些信息,还找到了完整的接线图! 我不算看图专家,但顺着线路看,整个电路似乎都工作在**电源电压**级别,看不到任何我能接入的低压数字信号。 ## ⏺️ 智能继电器?⌗ 好吧,也许我可以在某个地方串个**智能继电器**?我不是电工,但这应该没那么难,对吧? 嗯,也许吧? 但老实说,我觉得这条路行不通。 先不说处理电源电压和暖通设备对一个毫无接线经验的人来说有点“吓人”(而且房东大概也不乐意我动这些东西),更大的问题是所有我想截获的“好”线都塞在空调**深处**。 据我所知,要碰到那些线就只能把整个空调从墙上拽出来……我可不想干这种事。2017 年的[这个帖子](https://www.doityourself.com/forum/air-conditioning-cooling-systems/577337-older-ice-cap-ptac-add-thermostat.html)也印证了我的感觉:这比它值当的麻烦多多了。 那……怎么办? ## 🔌 智能插座?⌗ 好吧,有个主意:我用**智能插座**直接切断空调电源,行不行? > 注意:网上很快有人警告我,给运行中的空调断电可能损坏设备,尤其是出问题导致快速开关机。虽然我不专业……但为了科学(也因为我有点固执),我还是继续研究这个选项。 可惜,令我懊恼的是——空调插头是那种特殊的 NEMA 5-20P 插头,基本找不到对应的智能开关! 靠! 如果接线不行,用智能插座也不简单……那我就没辙了? 当然不是! 显然该戴上我的工程帽,**凑合**出一个方案:不如做个机器人帮我转旋钮? ## 🎛️ *旋*出正确方法⌗ 看看空调,有两个旋钮: 1. **模式控制:** 一个很紧的离散旋钮,在 6 个模式间咔嗒切换(关、低冷、高冷²、送风、排风、加热) 2. **温度控制:** 一个平滑的模拟旋钮,连着简单的双金属片温控器 幸运的是——两个塑料旋钮都能直接拔下来,露出一个不算太难的轴,可以用机械方式连接: 这样我就有两个选项来开关空调: **选项 1:** 接入**模式控制**旋钮 - 把温度控制旋钮拧到“最冷” - 买个扭矩足够克服旋钮阻力的步进电机——可能得用 12V DC(甚至更高)电源,需要额外电路供电——还需要更结实的固定件来抵消扭矩,确保步进电机位置不动 - 精确校准步进电机,让旋钮在“关”和“冷”之间转正确的角度 **选项 2:** 接入**温度控制**旋钮 - 把模式控制旋钮留在“低冷”³ - 买个便宜、低扭矩、低功率的步进电机,*刚够*转动这个比较松的旋钮——由于扭矩很小,不需要多少固定件来保持位置 - 不精确地把步进电机拧到最左/最右,把目标温度在“非常非常热”和“非常非常冷”之间切换 你应该猜到我选了哪个 🥰 > 选项 2 显然是两者中“更凑合”的,因为它依赖目标温度这个间接属性来开关空调……但嘿,怎么省事怎么来,对吧? ## 🔨 走向 V0⌗ 我*基本*确定这会行得通,但显然,唯一验证方法就是拼凑一个概念证明(最好花最少的钱)。 长话短说——这是我 V0 的方案: | 零件 | 成本 | 来源 | |------|------|------| | ESP32 开发板 | $6 | [Amazon](https://www.amazon.com/dp/B0DDPJQX3X) | | 联轴器 | $6.69 | [Amazon](https://www.amazon.com/dp/B0D4YBM6HB) | | 步进电机+驱动板 | $2.66($8/3个) | [Amazon](https://www.amazon.com/dp/B0BG4ZCFLQ) | | L 型支架 | 免费 | 宜家 LAIVA 书架剩下的零件 | | 螺丝 | 免费 | 显示器支架剩下的 | | USB 线+充电器 | 免费 | 旧抽屉里翻出来的 | | **总计:** | **~$16** | | 这是结果: *(面包板和其他硬件在画面外)* 因为不能往空调外壳上拧螺丝(记住:押金!),我只能想办法。我翻了几个宜家 LAIVA 书架剩下的金属 L 型支架,还有显示器 VESA 支架的备用螺丝。 把它们拧到步进电机上,让电机组件物理上变“宽”。电机旋转时,支架会碰到控制腔的后墙,抵抗扭矩,把旋转能量传到联轴器上转动旋钮。真是**无心插柳**的巧妙设计! > 旁注:我略过了中间几步才达成这个设计: > - 第一次(第二次、第三次……)联轴器买错了,退了几次亚马逊才找到合适的。 > - 买 ESP32 开发板之前,我先用手头一个(非常非常老的)Arduino Leonardo 验证了步进电机+联轴器能工作,通过串口手动控制(用一根很长的 USB 线连到电脑)。 > - 第一次固定尝试用了木签、胶棒和裁过的亚马逊纸箱……失败透顶。 当然,光有硬件没有软件怎么行? ### 💻 写固件⌗ 固件**超级简单**:连接 Wi-Fi,托管本地网页服务器,监听 HTTP/MQTT 命令来转动电机。 虽然我有点怀念过去花几个周末拼凑一次性固件的好日子……但说实话,我很高兴大语言模型能一口气写出这类项目的代码。我用 Claude 和 Gemini 的组合,它们干得“完全 OK”地拼凑出了能用的东西。 它还生成了一个简单的 Web UI,让我配置 Wi-Fi 密码和动态调整设置: [代码在这里](https://gist.github.com/daniel5151/2d9950a27119e7e481db4446f2abcf13),但说实话——没什么意思。 ## 🏠 用 Home Assistant 让它有用⌗ 刷好固件、硬件凑合着装好后,我决定试试这玩意:舒服地坐在沙发上,用手机打开 Web UI,按下按钮转动电机。 跟你说——看到空调自己开关,而我还赖在沙发上? 绝对电影级体验。 不过,从 Web UI 控制虽然酷……要真正有用,还得集成到 Home Assistant。 如果你不熟悉,[Home Assistant](https://www.home-assistant.io/) 是一个开源家庭自动化平台,作为所有智能设备的本地大脑。它非常棒,如果你做任何稍微复杂的智能家居,**绝对**应该装上它。 ### 第一步:把步进电机暴露为 MQTT Cover⌗ 我没有写自定义 API 集成脚本,而是利用了 Home Assistant 对 **MQTT Discovery** 的优秀支持。 > 如果你不熟悉 MQTT,可以把它想象为一个超轻量的发布/订阅消息协议,专为资源受限的物联网设备设计。设备可以“发布”消息到特定路径(称为主题,比如 `living_room/ac/state`),其他设备(如 Home Assistant)可以“订阅”这些主题来监听更新或发送命令。 如果你配置一个设备向标准发现主题(例如 `homeassistant/cover/ac_stepper_cover/config`)发布特定的配置 JSON 负载,Home Assistant 将**自动**发现该设备并配置所有实体、传感器和控制器——完全不需要你写一行 YAML 配置! 对于这种旋钮控制器,我决定将其暴露为 [MQTT Cover](https://www.home-assistant.io/integrations/cover.mqtt/) 集成。虽然“cover”通常用于窗帘、电动卷帘或车库门……但其模式支持打开、关闭、停止,正好映射我们的旋转旋钮。 ESP32 启动时,自动连接 MQTT 代理并发送这个发现 JSON 负载: ```json { "name": "AC Stepper Cover", "unique_id": "ac_stepper_esp32_01", "object_id": "ac_stepper_cover", "command_topic": "homeassistant/cover/ac_stepper_cover/set", "state_topic": "homeassistant/cover/ac_stepper_cover/state", "position_topic": "homeassistant/cover/ac_stepper_cover/position", "set_position_topic": "homeassistant/cover/ac_stepper_cover/position/set", "payload_open": "OPEN", "payload_close": "CLOSE", "payload_stop": "STOP", "device_class": "damper", "device": { "identifiers": "ac_stepper_esp32", "name": "AC Control Stepper" } } ``` Home Assistant 注册了 cover 后,监听 UI 上的用户交互,并向 `command_topic` 发布相应命令。ESP32 上的 MQTT 回调解析消息并驱动步进电机: ```cpp void mqttCallback(char* topic, byte* payload, unsigned int length) { String message = extractMessageFromPayload(payload, length); if (String(topic) == COMMAND_TOPIC) { handleCoverCommand(message); } } void handleCoverCommand(const String& command) { if (command == "OPEN") { motorState.isOpening = true; moveMotor(STEPS_PER_REVOLUTION, motorState.currentSpeed); } else if (command == "CLOSE") { motorState.isOpening = false; moveMotor(-STEPS_PER_REVOLUTION, motorState.currentSpeed); } else if (command == "STOP") { stopMotor(); } } ``` 发送 `OPEN` 负载使步进电机向前旋转一整圈,把旋钮转到“最冷”,而 `CLOSE` 向后旋转步进电机关闭空调。 就这样——Home Assistant 就能控制电机了! ### 第二步:添加温控器⌗ 旋钮可通过 Home Assistant 控制后,最后一步是告诉它**何时**开关。 幸运的是,Home Assistant 有一个内置集成叫 [Generic Thermostat](https://www.home-assistant.io/integrations/generic_thermostat/)。它超级简单——指向一个要切换的 switch/cover,加上一个要监测的温度传感器,它就会帮你处理所有滞后逻辑! 温度传感器我用的是 [AirGradient ONE](https://www.airgradient.com/indoor/),一个高质量的智能空气质量监测器,刚好也放在空调那个房间。 把两者连起来只需在我的 `configuration.yaml` 里加上这个: ```yaml climate: - platform: generic_thermostat name: Living Ro ``` (注意:原文在这里截断,但翻译应保持原文内容。下面可能是继续的 YAML 配置,但原文未提供完整。我们按现有内容翻译。) 米

相似文章

一款由iroh驱动的智能风扇

Hacker News Top

本文演示了如何使用ESP32微控制器和iroh网络库构建智能风扇,实现无需云服务的点对点控制。

破解我的云控吊扇的射频遥控

Hacker News Top

一位开发者对Dreo云控吊扇的射频遥控器进行逆向工程,以实现通过Home Assistant的本地控制,从而绕过云依赖,并记录了解码和重放命令的过程。

1907年老宅智能化的精妙艺术

Wired

作者讲述了如何用Ecobee恒温器和自动化照明等智能设备升级他们建于1907年的历史悠久的工匠风格住宅,既追求现代化又不损害房屋的复古魅力。

AI 在家(第一部分):一箱零碎

Hacker News Top

作者分享了一个 DIY 项目,利用廉价的二手服务器 GPU 和旧 PC 零件搭建一个经济实惠的家庭 AI 设备,以避免使用云服务。