从米家到手搓:智能家居折腾进阶之路

1. 前言

近年来智能家居已经从”极客玩具”逐渐走向了大众市场,以米家为代表的平台让普通用户也能低成本地搭建起自己的智能家居系统。但对于喜欢折腾的人来说,成品方案往往不够灵活——比如跨平台联动、自定义自动化逻辑、甚至自己动手做硬件,这些才是真正有趣的地方。

本文将从三个层面来分享我的智能家居折腾经历:

  1. 成品设备选购:适合入门的米家生态设备推荐和使用技巧
  2. Home Assistant 平台搭建:打造一个聚合所有平台的全能智能家居中枢
  3. DIY IoT 设备:用 ESP 开发板手搓自己的传感器和灯带

需要说明的是,作为一个租房党,本文不会涉及需要硬装改造的设备(如嵌入式射灯、全屋灯具组网、智能面板等),所有方案都是可以”拎包带走”的。

2. 成品智能家居设备

2.1 空调网关

image.png|598

对于没有智能功能的传统空调,可以使用空调伴侣/空调网关来实现智能控制。它的原理很简单:内置红外发射器(IR LED),通过 38kHz 载波调制后发射红外编码信号来模拟遥控操作。设备内置了大量空调品牌的红外码库,配对时会逐一发送测试码来匹配你的空调型号。米家空调伴侣还集成了 16A 插座功能,可以直接替换空调的电源插座,同时通过内置的功率传感器监测空调的实时功耗。

配合温湿度传感器,你可以实现这样的自动化:当室内温度超过 28°C 时自动开启空调,低于 24°C 时自动关闭,实现舒适的温控又避免忘关空调。

2.2 智能开关

image.png|580

网上会有一些卖机械式的拇指机器人来帮你物理上按开关,但是那种解决方案有点舍本求末了,其实我们只要懂一些简单的电气知识,将传统的墙壁机械开关可以替换为智能开关来实现远程和自动化控制。智能开关分为两种:

  • 零火版:需要零线和火线两根线供电,功率稳定,适合新装修预留了零线的场景
  • 单火版:只需要火线即可工作,适合租房党,因为大多数老房子的开关底盒里只有火线

单火开关的电气原理:由于只有火线,开关在关断状态下需要”借道”灯具形成微弱的回路来给自身的 Wi-Fi 模块供电(电流路径:火线 → 开关模块 → 灯具 → 零线)。但这也是为什么单火开关对负载功率有最低要求(通常不低于 3W),如果接的灯泡功率太小,可能会出现关灯后灯泡微亮/闪烁的”鬼火”现象。解决办法是并联一个电容补偿器或者换一个大功率的灯泡。

2.3 窗帘伴侣

窗帘伴侣是一种夹在窗帘杆上的小型电机,通过齿轮咬合窗帘轨道来驱动窗帘开合。相比整套电动窗帘轨道(动辄数百上千元),窗帘伴侣通常只需一两百元,是租房党实现电动窗帘效果的高性价比方案。

配合光线传感器或定时任务,可以实现早上自动开窗帘、晚上自动关窗帘的效果。

2.4 传感器类设备

传感器是智能家居自动化的”眼睛”和”耳朵”,常见的有:

  • 温湿度传感器:监测室内环境,联动空调、加湿器等设备
  • 门窗传感器:检测门窗的开合状态。经典用法:晚上到家开门时自动开灯
  • 人在传感器(毫米波雷达):这里特别强调,不要买成”人体传感器”(PIR 红外传感器)。两者区别很大:
    • 人体传感器(PIR):基于被动红外原理,只能检测人体的移动,如果你坐着不动,它会判定”无人”然后关灯,非常恼人
    • 人在传感器(毫米波雷达):通过发射毫米波信号并分析反射波来检测人体存在,即使你静坐不动也能准确检测到。部分高端型号甚至能检测呼吸和心跳。价格稍贵但体验天差地别,强烈推荐

2.5 设备网关与通信协议

智能家居设备之间的通信需要网关来中转,这里介绍几个核心概念:

  • Wi-Fi 直连:设备直接连接家庭 Wi-Fi 路由器,优点是不需要额外网关,缺点是每个设备都占用一个 Wi-Fi 连接数,设备多了容易导致路由器压力大
  • 蓝牙 Mesh:米家大量使用蓝牙 Mesh 协议(目前已升级到 Mesh 2.0),设备之间可以互相中继信号,扩大覆盖范围。需要蓝牙网关(很多米家设备如智能音箱、夜灯等都内置了蓝牙网关功能)来将蓝牙设备接入网络
  • Zigbee:低功耗、低延迟的协议,广泛用于传感器类设备。需要 Zigbee 网关,已经被淘汰了。
  • Thread:一种基于 IP 的低功耗无线网状网络协议,专为物联网设计。
  • 云端控制 vs 本地控制
    • 云端控制:指令通过云服务器中转(手机 → 云服务器 → 网关 → 设备),依赖网络,有延迟,服务器挂了就失控
    • 本地控制:指令在局域网内直接传输(手机/网关 → 设备),响应快、不依赖外网,但需要设备和控制端在同一局域网。

3. Home Assistant 搭建全能智能家居网关

3.1 什么是 Home Assistant

Home Assistant(简称 HA)是一个开源的家庭自动化平台,用 Python 编写,运行在本地服务器上(树莓派、NAS、旧电脑等均可)。它的核心价值在于:

  • 聚合管理:将不同品牌、不同协议的智能设备统一到一个平台管理。官方支持超过 2000+ 种集成(integrations),社区贡献的更多
  • 强大的自动化引擎:支持基于状态、时间、事件等多种触发条件的复杂自动化
  • 开放的生态:支持 HACS(Home Assistant Community Store)安装社区插件

常见的部署方式:

  • Home Assistant OS:官方推荐,直接刷入树莓派或 x86 设备,开箱即用
  • Docker 容器:适合已有 NAS 或服务器的用户,灵活性高

image.png|592

image.png|585

3.2 将米家设备接入 Home Assistant

通过 Xiaomi Home (ha_xiaomi_home) 这个小米官方维护的集成(GitHub 21k+ Star),可以将米家设备无缝接入 HA。这个项目基于小米的 MIoT-Spec-V2 协议,自动将设备的属性、事件、动作映射为 HA 实体。

image.png|400

接入 HA 后,设备的功能和属性非常详细:

image.png|400

该集成支持两种通信模式:

  • 云端模式:通过小米云端 MQTT Broker 订阅设备状态,通过 HTTP API 下发控制指令,联网即可使用
  • 局域网本地模式:通过小米中枢网关内置的 MQTT Broker 通信,响应更快、不依赖外网(需要小米中枢网关,固件 >= 3.3.0_0023)

更重要的是,HA 内置了 HomeKit Bridge 功能,可以将接入 HA 的设备桥接为 HomeKit 配件。这意味着你可以:

  1. 在米家 App 中购买和管理设备
  2. 通过 Xiaomi Home 集成接入 HA
  3. 通过 HomeKit Bridge 暴露给 Apple Home
  4. 使用 Siri、iPhone 控制面板来操控这些设备

一套设备,三个平台都能用,如果是苹果用户建议配合 Homepod 使用。

image.png|607

3.3 Home Assistant 的更多玩法

HA 的生态远不止控制灯泡和开关,以下是一些进阶用法:

聚合多平台设备

很多品牌的设备都可以接入 HA,常见的接入方式包括:

  • 官方集成:如 Yeelight、Philips Hue、涂鸦等品牌官方支持
  • 局域网协议:很多设备通过 HTTP API、UDP 广播或 MQTT 协议在局域网内通信,HA 可以直接对接
  • 社区插件:通过 HACS 安装社区开发者制作的集成

通过 ADB 控制电视

HA 的 Android TV 集成通过 ADB(Android Debug Bridge)协议与电视通信。ADB 本是 Android 开发调试工具,支持通过 TCP/IP 在局域网内连接设备。接入后你可以:

  • 开关电视
  • 启动指定 App(如打开 B 站、爱奇艺)
  • 发送按键指令(模拟遥控器操作)
  • 获取当前播放状态

只需在电视的开发者选项中开启”网络调试”(ADB over Network),然后在 HA 中配置电视的 IP 地址即可。

基于 Wi-Fi 连接的电子围栏

HA 的 Device Tracker(设备追踪)功能可以通过检测手机是否连接到家庭 Wi-Fi 来判断你是否在家。常见的检测方式有:

  • 路由器集成:HA 通过 API/SSH/SNMP 查询路由器的已连接设备列表,判断手机 MAC 是否在列
  • Ping 检测:HA 定时 ping 手机的局域网 IP,可达则判定在家
  • nmap 扫描:定时扫描局域网内的活跃设备,比单纯 ping 更可靠

HA 会为每个被追踪设备创建 device_tracker.* 实体,状态为 homenot_home。通常会设置一个 consider_home 延迟参数(默认 375 秒),避免 Wi-Fi 短暂断连造成误判。还可以通过 person 实体聚合多个追踪源(如 Wi-Fi + HA Companion App 的 GPS 定位),互相弥补提高准确率。

基于此可以实现:

  • 最后一个人离家时自动关灯、关空调、启动扫地机器人
  • 第一个人到家时自动开灯、开空调
  • 配合门窗传感器做更精确的在家/离家判断

Wake on LAN 远程开机

WOL(Wake on LAN)是一种网络协议,允许通过发送一个特殊的“魔术包”(Magic Packet)来唤醒处于关机/休眠状态的电脑。魔术包是一个包含目标网卡 MAC 地址的特定格式数据帧(6 字节 0xFF + 目标 MAC 重复 16 次)。

在 HA 中配置 WOL 集成后,你可以:

  • 在 HA 面板一键开机
  • 通过自动化在特定条件下唤醒电脑(如到家后自动开机)
  • 配合公网访问方案,在外面远程开机

前提是电脑的 BIOS 和网卡驱动中需要启用 WOL 功能。

通过 MCP 服务让 AI 管理家庭设备

MCP(Model Context Protocol)是一种让 AI 助手与外部服务交互的协议。社区已有多个 Home Assistant MCP Server 项目,安装后可以让 Claude、ChatGPT 等 AI 直接操控你的智能家居。

AI 可以:

  • 查询设备状态(”客厅温度是多少?”)
  • 控制设备(”把卧室灯调暗一点”)
  • 创建和管理自动化规则
  • 生成每日活动摘要

这相当于给你的家装了一个真正懂你的”AI 管家”。

3.4 公网控制 Home Assistant 的方案

默认情况下 HA 只能在局域网内访问,要实现外网控制有几种常见方案:

方案一:内网穿透

将内网服务暴露到公网,常用工具:

  • frp:开源内网穿透工具,需要一台有公网 IP 的服务器做中转。配置灵活,速度取决于中转服务器带宽
  • Cloudflare Tunnel:利用 Cloudflare 的边缘网络做隧道,免费且无需公网服务器,还自带 HTTPS 和 DDoS 防护。推荐方案
  • Tailscale / ZeroTier:基于 WireGuard 的组网方案,将所有设备组成一个虚拟局域网。安全性好,但所有客户端设备都需要安装客户端

方案二:IPv6 DDNS

如果你的运营商分配了公网 IPv6 地址(现在大部分宽带都支持),可以:

  1. 在路由器上开启 IPv6
  2. 使用 DDNS 服务(如 Cloudflare DDNS、阿里云 DDNS)将动态 IPv6 地址绑定到域名
  3. 直接通过域名访问 HA

优点是直连不中转,速度最快。缺点是部分运营商/网络环境不支持 IPv6 访问,且需要注意防火墙和安全配置。

安全建议:无论使用哪种方案,都务必:

  • 启用 HTTPS
  • 设置强密码并开启两步验证
  • 限制暴露的端口范围

3.5 使用 Node-RED 实现编程式控制智能家居

什么是 Node-RED

Node-RED 是一个基于 Node.js 的可视化编程工具,通过拖拽”节点”(Node)和连线的方式来构建数据处理流程。它最初由 IBM 开发,后来成为 OpenJS 基金会的项目。

在智能家居场景中,Node-RED 可以作为 HA 的高级自动化引擎,弥补 HA 原生自动化在复杂逻辑上的不足。通过 node-red-contrib-home-assistant-websocket 插件,Node-RED 可以通过 WebSocket 与 HA 实时通信。

image.png|400

使用案例

案例一:将雷鸟电视伪装成 Apple TV 来使用 iPhone 控制

  • 安装 node-red-contrib-homekit-bridged 插件
  • 创建一个虚拟的 Apple TV 节点
  • 在苹果“家庭” APP 中连接 Apple TV
  • 在 Node Red 中拦截 Apple TV 控制端的输出
  • 将输出转义:
    • 如果电视支持红外,手搓一个带红外控制器(可以闲鱼直接买,20块钱左右),将控制转为 HTTP 请求来操作红外控制器
    • 如果电视支持 ADB,可以转为 ADB 指令来控制电视
    • 一般主流电视都支持 APP 遥控,对 APP 进行抓包,然后从 Node Red 中向局域网设备发送
    • 搜一下你家的电视是否有人制作 HA 插件,让 Node Red 直接驱动这个插件就可以

image.png|400

指令转换参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
if (msg.payload.Active !== undefined) {
switch (msg.payload.Active) {
case 0:
if (flow.get("TV_IS_ACTIVE")) {
msg.payload.command = "power";
}
break;
case 1:
if (!flow.get("TV_IS_ACTIVE")) {
msg.payload.command = "power";
}
break;
}
} else if (msg.payload.RemoteKey !== undefined) {
switch (msg.payload.RemoteKey) {
case 4:
msg.payload.command = "up";
break;
case 7:
msg.payload.command = "right";
break;
case 5:
msg.payload.command = "down";
break;
case 6:
msg.payload.command = "left";
break;
case 8:
msg.payload.command = "ok";
break;
case 9:
msg.payload.command = "back";
break;
// 暂时将暂停播放键改为设置键
case 11:
msg.payload.command = "settings";
break;
case 15:
msg.payload.command = "menu";
break;
}
} else if (msg.payload.VolumeSelector !== undefined) {
switch (msg.payload.VolumeSelector) {
case 0:
msg.payload.command = "vol_up";
break;
case 1:
msg.payload.command = "vol_down";
break;
}
}

return msg;

效果:

IMG_1811.PNG|400

案例二:Bambu Studio 余料管理

我本身有一台拓竹的 3D 打印机,Spoolman 是一个 3D 打印耗材管理的应用。打印完之后,往往需要手动查看下耗材用量,然后再在 Spoolman 上记录一下,这样就很麻烦。同时这又是一个比较个人化的需求,因此就特别适合使用 Node Red 来搭建这套自动化流程。

  • 安装 Bambu Studio HA 扩展
  • 通过 Node Red 接入 HA 设备,就可以拿到 3D 打印机的各种状态
  • 在状态跳转 Hook 中编写自定义代码逻辑来统计用量
  • 打印完成后通过 Spoolman 的 Open API 来向 Spoolman 中写入数据

image.png|400

4. 手搓自己的 IoT 设备

当成品设备满足不了你的需求时,就该自己动手了。

4.1 常用开发板介绍

开发板 GPIO 价格区间 适用场景
ESP8266 (NodeMCU) 11 个 8-15 元 简单传感器、开关、Wi-Fi 中继
ESP32 34 个 15-30 元 复杂项目、需要蓝牙的场景
树莓派 40 个 200-500 元 需要跑完整 Linux 系统的场景

ESP8266|400

对于大部分 IoT 小项目,ESP8266 和 ESP32 就够用了,便宜、功能足够、社区资源丰富。树莓派更适合做网关或者需要运行复杂软件的场景(比如跑 Home Assistant 本身)。

4.2 基础工具

  • 电烙铁:用于焊接排针、传感器模块等,几十块的足矣,配上松香助焊剂、焊锡丝
  • 面包板:免焊接的原型验证利器。将开发板和传感器模块用杜邦线插在面包板上就能快速搭建电路,调试完成后再焊接到洞洞板上
  • 杜邦线:连接面包板和模块的跳线,分为公对公、公对母、母对母三种
  • 万用表:排查电路问题的必备工具

4.3 使用 Tasmota 简化开发

Tasmota 是一个为 ESP8266/ESP32 设备设计的开源固件,刷入后设备立即变成一个功能完善的 IoT 节点,无需写一行代码。

Tasmota 的核心能力:

  • Web 管理界面:通过浏览器配置 Wi-Fi、MQTT、GPIO 引脚映射等
  • MQTT 支持:开箱即用的 MQTT 客户端,可以直接对接 Home Assistant
  • 丰富的外设驱动:内置对常见传感器(DHT11/22 温湿度、BH1750 光照、BME280 气压等)、继电器、LED 灯带等的支持
  • OTA 更新:支持无线固件升级,不用每次都拔下来接 USB
  • 定时和规则引擎:可以在设备端设置简单的自动化逻辑

使用流程:

  1. 通过 USB 将 Tasmota 固件刷入 ESP 开发板(推荐使用 Tasmota Web Installer,浏览器内一键刷入)
  2. 连接到 Tasmota 创建的配置热点
  3. 在 Web 界面配置 Wi-Fi 和 MQTT
  4. 配置 GPIO 引脚对应的传感器/执行器
  5. HA 通过 MQTT 自动发现并接入设备

4.4 实战案例

案例 1:手搓光线传感器

所需材料

  • ESP8266 开发板(约 10 元)
  • BH1750 光照传感器模块(约 3 元)
  • 杜邦线若干

接线

  • BH1750 的 VCC → ESP8266 的 3.3V
  • BH1750 的 GND → ESP8266 的 GND
  • BH1750 的 SCL → ESP8266 的 D1 (GPIO5)
  • BH1750 的 SDA → ESP8266 的 D2 (GPIO4)

刷入 Tasmota 后,在 GPIO 配置中将 D1 设为 SCL、D2 设为 SDA,Tasmota 会自动识别 I2C 总线上的 BH1750 并开始上报光照度数据(单位:lux)。

结合 HA 自动化,可以实现:光照度低于 50 lux 时自动开灯。

案例 2:手搓人体存在传感器

所需材料

  • ESP32 开发板(约 20 元)
  • LD2410 毫米波雷达模块(约 15 元)

LD2410 是一款 24GHz FMCW(调频连续波)毫米波雷达模块,通过发射电磁波并分析反射波的多普勒频移和微动信号来检测人体存在。它可以同时检测运动目标和静止目标(通过呼吸等微弱运动),最远检测距离约 6 米,各距离门限的灵敏度均可独立调节。

Tasmota 和 ESPHome 均已内置对 LD2410 的驱动支持,通过 UART 串口连接,配置好引脚即可自动上报目标状态(运动/静止/无人)和距离信息。

相比米家的人在传感器(通常 100+ 元),自制方案成本不到 40 元,而且可以自由调整检测距离、灵敏度等参数。

案例 3:WLED 灯带制作

WLED 是一个专为 ESP8266/ESP32 设计的 LED 灯带控制固件(GitHub 15k+ Star)。

核心特性

  • 支持 WS2812B、WS2811、SK6812 等常见可编程灯带芯片
  • 内置 100+ 种灯效,支持自定义调色
  • 提供 Web UI 和手机 App 控制
  • 支持 MQTT、HTTP API,可接入 Home Assistant
  • 支持多段(Segment)独立控制
  • 支持音乐律动(需接入麦克风模块)

所需材料

  • ESP32 开发板(约 20 元)
  • WS2812B 灯带(约 10-30 元/米,根据灯珠密度不同)
  • 5V 电源(功率根据灯带长度计算,每颗灯珠约 0.3W)

接线

  • 灯带的 VCC → 电源 5V
  • 灯带的 GND → 电源 GND + ESP32 GND(共地)
  • 灯带的 DIN(数据输入)→ ESP32 的 GPIO16(默认)
  • 建议在数据线上串联一个 330-470 欧电阻保护引脚,电源端并联 1000uF 电容稳压

刷入 WLED 固件后(推荐使用 WLED Web Installer 在浏览器内一键刷入),通过 Web 界面即可控制灯效、颜色、亮度。WLED 还支持将灯带分成多个 Segment(段) 独立控制不同效果,以及通过 E1.31/Art-Net 协议对接 Hyperion 做电视氛围灯。

接入 HA 后还可以参与整个家庭的自动化联动,比如:观影模式下灯带自动切换为暖色氛围光、来客人时切换为欢迎灯效等。

注意:ESP8266 由于内存限制,建议控制不超过 500 颗灯珠;ESP32 可支持更多。灯带超过 2 米时需注意电压降,建议在中间或末端补电。

案例4:自动化门禁控制系统

这里先讲一个电子元件的常识:短接微动开关相当于点击一次微动开关。

实现方式:

拆开门禁,使用电烙铁从门禁的微动开关上引出两根导线。

24B5197D-EB7E-4BA7-B930-73008CD1F341_1_105_c.jpeg|400

image.png|400

买一个可以 wifi 控制的继电器(也叫通断器,就是一个电磁开关,可以选择易微联),将导线接入到继电器上,这样控制通断器的开关就等同于点按门禁按钮,这样就有办法实现编程电路了。

image.png|400

那怎么实现门禁响了就自动开门呢?使用 ESP8266 接一个麦克风,接入 I2C 针脚后,在 Tasmota 上就可以看到麦克风接收的音量级别。然后调试一下,看看门禁响铃时的音量级别,这样就可以创建一个响铃的触发器了。

image.png|400

将通断器和手搓的麦克风音量感应器接入 HA,在 Node Red 上编写联动逻辑:

image.png|697

5. 总结

智能家居的折腾没有尽头,但每一步都能带来切实的体验提升。从开箱即用的成品设备入手,到搭建 Home Assistant 打通全平台,再到自己焊电路做硬件——这个过程本身就充满乐趣。

给新手的建议:

  1. 从米家生态入手:门槛最低、产品最丰富,先用起来感受一下智能家居的便利
  2. 尽早上 Home Assistant:它会极大地扩展你的可能性,而且社区活跃、文档完善
  3. 不要害怕 DIY:ESP 开发板便宜到可以随便试错,Tasmota/WLED 等固件让门槛降到了最低
  4. 安全第一:涉及电气改造时务必断电操作,公网暴露服务时做好安全防护