资讯动态

从听话到懂你:用HA和STM32搭建主动感知智能家居实战

发布时间:2026/9/13 4:08:15 来源:尧图企业网站定制
从去年开始我陆陆续续把家里那套“喊一嗓子才动一下”的智能家居彻底改造成了一个“不用说话也能接住你需求”的系统。这套系统在2026年8月做了整整一个月的实测今天把这轮折腾的完整过程、核心思路和踩过的坑都整理出来希望能给想入坑智能家居、或者正被厂商全家桶绑住手脚的朋友一些参考。先说清楚一个容易被忽略的问题市面上绝大多数标榜“智能”的产品本质上只是一个带App控制的遥控器。你喊一句“开灯”它执行“开灯”你在手机上点一下“离家模式”它按固定剧本走一遍。这种“听话”确实省了弯腰按开关的力气但离“智能”还有一段距离。真正的智能家居应该能通过传感器感知人的状态、位置和习惯在你还没开口之前就把该做的事做好——不是被动响应而是主动理解。这套系统的核心不是买了多少设备而是怎么把这些设备变成一套能“推断意图”的规则引擎。1. 先搞清楚你要的到底是“听话”还是“懂你”1.1 被动指令式智能的局限在哪如果你现在用的是一套以语音助手或App为中心的智能家居你一定会遇到这样几个场景晚上起夜眼睛都睁不开还要先喊一句“打开走廊灯”声音小了设备还听不见。下班回家抱着东西腾不出手还得掏出手机解锁App再点“回家模式”。人在客厅沙发坐了一个小时没动空调却因为“人体传感器超时无人”自动关掉了。出门走到半路开始怀疑灯到底关了没有又打开App反复确认。这些问题不是设备不行而是交互方式本身就错了。语音控制和App控制都要求“人主动发出指令”系统只是一个执行器。但人的生活不是靠指令串联起来的而是靠场景、习惯和身体动作自然连贯的。你走到厨房是准备喝水还是做饭系统不一定需要精确知道但它至少应该感知到“厨房有人”并且根据时间、光线、温度做出合理的响应。被动式系统的另一大问题是场景联动极其僵硬。厂商自带的全家桶自动化通常只能做“如果A触发那么B执行”的单层条件判断几乎无法处理“同时满足多个条件且彼此有时间约束”的真实场景。比如“傍晚回家、室内光线暗、外面在下雨、客厅有人停留超过30秒”这种情况下应该开灯还是开窗就超出了大多数App自动化编辑器的能力范围。1.2 主动感知式智能的核心传感器 规则 意图推断要真正让系统“懂你想干嘛”信息输入方式必须从“人告诉它”转变成“它自己感知”。这就涉及三层能力第一层是环境感知。通过人体存在传感器、门窗磁、光照传感器、温湿度传感器、空气质量传感器系统能知道“哪个房间有人、待了多久、室内亮度如何、温度是否舒适、窗户是否开着”。第二层是规则推理。这一层不是简单的一对一联动而是把传感器数据组合成状态再把状态变化和用户行为模式做匹配。比如“卧室有人 时间处于深夜 卧室灯光从亮到灭 随后走廊出现人体信号”这个组合基本可以推断“这个人起夜去卫生间了”。第三层是执行反馈。系统做出动作后还要通过传感器确认动作是否解决了问题。比如开了灯光照传感器数值是否提升到舒适区间开了空调温度是否在预期时间内降下来。这个闭环是很多DIY玩家会忽略的。这三层能力单纯靠某一家厂商的生态很难完全实现因为你需要同时接入不同品牌、不同类型的传感器还需要一个足够灵活的规则引擎。这也解释了为什么我最终把中枢从厂商App换成了开源系统Home Assistant。2. 实战架构一套“懂你”的智能家居系统长什么样2.1 中枢选择为什么我选开源HA而不是厂商全家桶在2026年这个时间点智能家居生态的选择其实比前几年更复杂。厂商全家桶的好处是开箱即用、不用折腾但代价是封闭、联动逻辑弱、无法跨品牌协同。如果你只有三五件设备全家桶完全够用但如果你想做“懂意图”的联动全家桶基本没戏。我选择Home Assistant以下简称HA作为中枢原因有三个一是本地化执行。所有自动化规则和状态判断都在家里的服务器上跑不依赖云端。即使外网断开本地联动依旧正常。这一点对“懂你”的体验至关重要因为意图推断需要毫秒级的响应上云一来一回的延迟是致命的。二是跨品牌接入。HA有上千个集成组件无论你的设备是WiFi、Zigbee、蓝牙还是纯本地协议都能通过合适的桥接设备接入统一管理。我家里混用了米家系、自制的ESP32传感器、STM32改造的采集节点和几台老式红外家电在HA里全部可以纳入同一套自动化逻辑。三是规则引擎的灵活性。HA的自动化支持复杂的条件组合、状态机式的触发逻辑、甚至可以通过Node-RED编写更具表现力的流程。后文要讲的几个“懂意图”场景在厂商App里根本写不出来。2.2 边缘节点的意义STM32在传感器网络中的定位说到HA生态很多DIY玩家首先想到的是ESP32和ESPHome。确实ESP32自带WiFi和蓝牙刷上ESPHome后可以直接被HA发现配置简单非常适合做传感器节点。但我这轮改造里特意加入了基于STM32的采集节点原因在于不同场景需要不同侧重的硬件。STM32的优势体现在几个地方低功耗。很多需要电池供电的传感器节点ESP32的功耗还是偏高几个月就得换电池。STM32在睡眠模式下电流可以做到微安级配合合适的唤醒策略一节电池撑半年以上没有问题。外设丰富且时序确定。STM32的ADC、定时器、DMA等外设在处理模拟信号和精确采样时更有优势比如读取某些非数字接口的传感器、做脉冲计数如电量计量时精度和稳定性明显强于ESP32。实时性更强。如果节点需要本地做简单的边缘判断比如“持续无人超过N分钟才发送状态”STM32的中断和定时机制反应更快不会因为网络模块繁忙而丢失采样。当然STM32没有WiFi实际部署时我采用“STM32负责采集和预处理通过串口接一块ESP01或直接用有线方式连接主控”的组合方案。数据格式统一走MQTT。这样一来既保留了STM32的采集能力又借助ESP模块的WiFi能力把数据上报给HA。2.3 整体拓扑从物理层到决策层我这套系统的整体拓扑可以分成四层感知层各种传感器节点包括毫米波人体存在传感器、门窗磁、光照、温湿度、空气质量、功率监测插座等。有些是成品设备有些是STM32采集节点传感器模块自制的。传输层统一走WiFi局域网部分传感器通过Zigbee网关转成WiFi接入。中枢层一台NUC小主机跑HA负责设备状态汇总、自动化规则引擎、历史数据记录。执行层智能灯、智能插座、空调红外控制器、窗帘电机、加湿器等这些执行器大部分是被动等待指令的它们不需要“聪明”只需要可靠地执行。把物理层和执行层分开设计的好处是任何一层的设备坏了更换时不会影响整体逻辑。比如把某个灯换成另一个品牌只需要在HA里重新绑定实体所有自动化规则里的“那个灯”引用会自动更新。3. 核心传感器选型与部署判断“你想干嘛”的信息来源想要系统“懂你”先得给它一双好眼睛。这轮实测下来我发现真正决定体验上限的不是中枢多强大而是传感器是否选对、部署是否到位。3.1 人体存在传感器从“有人”到“在哪、在干嘛”普通的人体红外传感器PIR只能告诉你“这个区域有没有人”而且有个致命缺陷人静止不动时PIR会认为“人已经离开”。这在做“懂你”的联动时非常坑——你坐在沙发上看书半小时没动PIR以为人走了灯灭了。所以我全部换成了毫米波人体存在传感器。这类传感器利用毫米波雷达检测微动和呼吸带来的微小位移即使人完全静止也能识别“有人还在”。我用的模块是后来DIY圈里很常见的方案支持检测距离调节还能通过串口输出目标位置和运动信息。部署位置是成败关键。以卧室为例我把人体存在传感器放在床尾上方的天花板上这样既能覆盖整张床的范围又能避免空调气流、窗帘飘动引起的误触发。客厅则放在电视墙一侧斜向覆盖沙发区避免对着阳台门窗。这类传感器有个参数需要在HA里调好离开延时。默认值往往偏短导致人稍微走开一下灯就灭。我实测下来卧室场景设置在120秒左右、客厅设置在180秒左右比较合理。具体值可以根据你家房间大小和人流节奏微调原则是“宁长勿短”。3.2 环境传感器光照、温湿度、空气质量怎么用人体存在传感器告诉我们“人在哪”环境传感器告诉我们“环境是否需要调整”。这两个信息结合起来系统才能做出合适的动作。光照传感器是联动灯光的关键。我用的是BH1750模块直接接到STM32采集节点上放在窗边朝向室外测量自然光强度。这样系统判断的是“房间整体亮不亮”而不是“灯开没开”。有了这个数值天黑时回家的场景才能准确触发——同样是下午六点到家夏天外面还很亮灯就不用开冬天天已经黑透开门就应该亮灯。温湿度传感器我用的是SHT30每个主要房间放一个。它能做的不只是显示温度而是参与空调和加湿器的联动决策。比如“人在卧室 温度高于28度 湿度低于50%”系统会先开空调制冷等温度下来之后再根据湿度决定是否打开加湿器。这里有个细节加湿器和空调不要同时开不然湿度传感器会被空调吹出的干风干扰导致判断混乱。空气质量传感器主要管新风和空气净化器。我在客厅和卧室各放了一个带激光散射功能的颗粒物传感器能实时读取PM2.5浓度。这个数据接入自动化后“回家自动开净化器”就能根据室内实际污染水平决定要不要开、开多大风量而不是每次回家都一律最大档。3.3 设备状态感知把“非智能”设备的动作变成信号“懂你”的进阶玩法是把原本不是智能设备的状态也变成系统可感知的信号。这里最重要的两类是门窗磁传感器和功率监测插座。门窗磁传感器贴在门框和门扇上可以判断门是否关闭。这个数据在“离家判断”中非常关键因为“门从外面锁上”几乎可以确认人已经离开比单纯靠人体传感器超时判断可靠得多。我还在冰箱门、抽屉上各放了一个小的用来触发一些有趣的小联动——比如冰箱门打开超过30秒不放回去系统会通过语音提醒。功率监测插座能感知设备是否在运行。比如在电视、台式机上插一个带功率监测的智能插座当人体传感器显示客厅有人、电视功率从0瓦变为300瓦时“观影模式”就成立了窗帘缓缓拉上、灯光调暗、音响切换为影音通道。这里不需要任何语音指令系统通过“人在客厅设备状态变化”推断出了场景。这些传感器信号组合起来就形成了系统判断意图的基础数据源。接下来要解决的是如何把这些信号组织成规则。4. 让系统“懂你”的自动化规则设计传感器是眼睛规则引擎是大脑。这一节是整套系统最核心的部分也是我花时间最多的地方。直接看规则怎么写的。4.1 规则引擎的基本套路条件、触发、动作、约束在HA里一条自动化通常包含三个部分触发条件什么时候去检查、状态条件当前状态是否满足、动作执行什么。但要做“懂意图”的自动化还需要第四个要素约束条件这个意图在什么时间和场景下是合理的。我总结了一个四段式写法几乎所有场景都可以套用触发某个传感器状态发生变化或时间模式匹配。状态条件当前时间、其他传感器状态、设备运行状态等需要同时满足的条件。动作要执行的设备操作可以是一系列联动。约束与互锁防止误触发的条件比如“仅在离家模式下不执行”“距离上次触发至少间隔五分钟”等。以“回家亮灯”为例触发大门门磁从“打开”变为“关闭”意味着人进门了 状态条件 - 室内光照传感器读数低于阈值说明环境暗 - 时间在日落之后 - 人体存在传感器检测到玄关区域有人 动作 - 打开客厅主灯亮度设为50% - 打开玄关灯 - 如果空调是关着的启动空调并设定到26度 约束 - 若当前处于“离家模式”我们判定人出门了则重置所有状态这个规则比单纯“门磁触发开灯”要稳得多。实测下来白天回家不会乱开灯深夜回家也不会刺眼的全亮而是设定到一个合适的亮度。4.2 场景一回家场景的设计细节回家场景的难点在于“确认人真的回来了”和“别在正常频繁进出时误触发”。我的方案是用“门磁关闭”而不是“门磁打开”作为触发因为每次出门也要开门门磁一打开就触发肯定会在你出门时误开灯。而门磁从打开变关闭意味着有人进了门并且把门带上了这才是一个完整的回家动作。但光靠门磁还不够。如果只是开门拿个外卖、取个快递人并没有真正进屋系统开了全屋灯就很蠢。所以我加了玄关人体存在传感器的确认条件门关闭后的5秒内玄关检测到人体存在才执行整个回家模式。这个5秒窗口很关键太短了传感器可能还没反应过来太长了真回家的人已经开始换鞋了灯还没亮。实测中用3到5秒是比较舒服的。4.3 场景二起夜场景的设计细节起夜场景是“懂你”体验里最直观的一个。传统做法是喊语音助手但深夜喊话不仅吵醒自己还可能吵醒家人。我的系统完全靠传感器感知。触发链条是这样的卧室人体存在传感器检测到人从床上坐起并且随后检测不到床上区域有人。时间处于晚上23点到凌晨5点之间。卧室灯光处于关闭状态说明不是睡前还在玩手机。这三个条件同时满足时系统执行走廊和卫生间的夜灯以5%的亮度亮起色温调到暖黄光。有人可能会问起夜和半夜起床喝水怎么区分我目前不做区分因为这两种情况需要的响应是一样的——保持低亮度照明方便安全地移动。但我会在传感器上做一个延迟从卧室人体消失到走廊灯亮延迟约2秒。这样人下床、穿拖鞋、走到门口灯刚好亮起不会因为人刚坐起就亮灯把人晃醒。起夜场景还有一个细节夜灯亮起后如果检测到人已经回到床上且卧室灯光重新关闭所有夜灯在30秒后自动熄灭。这里不能立刻关因为人可能只是去上厕所回来还没躺下立刻关灯反而让人摸黑。4.4 场景三离家场景的设计细节离家比回家容易做错误判的代价也更大——人没走系统把空调关了、窗帘拉了还是很闹心的。我的离家判断用了一个“三个信号取两个”的策略信号一大门门磁关闭后玄关人体存在传感器在随后10秒内没有再检测到人体。信号二功率监测插座显示电视和电脑主机都已经关机。信号三全屋人体存在传感器在10分钟内均未检测到任何人。当信号一成立且信号二或信号三任意成立系统才进入离家模式。这个策略有效解决了“出门倒垃圾”的情况门关了、玄关没人但你很快就回来全屋人体传感器会重新检测到人系统不会启动离家模式。离家模式动作本身可以很激进关闭所有非必要灯光、关闭空调、净化器切到低档、窗帘全部拉开让室内通风、扫地机器人开始清扫。这些动作都是可逆的就算判断失误也不会造成什么损失。5. 实测记录与数据从“偶尔灵”到“几乎每次都对”5.1 实测环境和参数配置我在2026年8月做了整整一个月的连续记录。实测环境是一个两室一厅的普通住宅约90平米。硬件配置是NUC小主机跑HA三颗毫米波人体存在传感器卧室、客厅、玄关一颗STM32采集节点接光照和环境传感器门窗磁装了大门、冰箱、卧室窗户执行层包括12组智能灯、一台空调红外控制器、两台智能插座、一组窗帘电机和一台空气净化器。所有自动化规则采用上文说的四段式写法用HA的自动化编辑器完成部分复杂流程在Node-RED里画。这一个月里我记录了所有场景的触发次数、手动修正次数和误触发次数。5.2 实测效果数据这一个月的数据统计如下场景触发次数正确执行次数误触发/漏执行次数准确率回家亮灯383621次误开灯、1次漏执行94.7%起夜照明14140100%离家全关31301出门倒垃圾触发96.8%观影模式22211电视开机但人离开客厅95.5%晨间窗帘自动打开31310100%这个数据整体是可用的但有几个细节值得说。起夜照明准确率100%主要得益于深度的时段约束和卧室人体存在传感器的可靠检测。观影模式的1次误触发是人开了电视后去了厨房客厅没人但电视功率在涨系统就按“观影场景”执行了。这个场景后来我加了“客厅人体存在持续3分钟”的条件才解决。归家模式的2次异常也很有代表性。1次误开灯发生在傍晚天气突然变阴光照传感器读数骤降导致系统判断“天黑”了但其实人只是拿了个快递。后来我把光照阈值改成“持续低于阈值10分钟”才算稳定下来。还有1次漏执行是因为当时玄关人体存在传感器正好在OTA固件升级没有上报数据。设备升级期间自动化静默失败这个问题目前没有特别好的解法只能尽量把升级安排在凌晨。5.3 避免误判的策略去抖、互锁与状态机这一个月的数据不是一次调出来的而是不断踩坑后迭代出来的。如果你也想复刻这套系统我建议优先把下面三个机制做扎实去抖机制。任何传感器的状态变化都不要直接触发动作而是加一个时间窗口确认。比如光照低于阈值持续5分钟才认为“天黑了”人体存在消失持续2分钟才认为“人离开了”。去抖时间会牺牲一点响应速度但对准确率的提升非常明显。互锁机制。指多套自动化之间要设置优先级和互斥条件。比如“离家模式”执行期间“回家亮灯”规则应被冻结否则可能出现人刚出门门磁一关就触发了回家模式。我在每条自动化里都会检查当前系统处于什么模式只有符合模式时才允许执行。状态机思维。不要把所有条件混在一起判断而是把系统状态拆成几个相互排斥的阶段离家、在家空闲、在家活跃、睡眠。传感器数据推动状态迁移动作由状态迁移触发而不是由单个传感器直接触发。这样即使某个传感器信号异常也不会直接导致错误动作因为其他状态条件能兜住。6. 踩坑实录与排查技巧6.1 常见问题速查表这一个月里我记了一堆排障笔记整理成速查表应该能帮你省下不少排查时间。现象可能原因排查方法人体存在传感器频繁误报安装角度正对空调出风口、窗帘或窗外移动物体调整安装位置调低探测灵敏度检查是否在雷达波束覆盖范围内自动化触发后没执行条件判断里某个实体状态一直未更新在HA开发者工具里查看实体状态的最新更新时间确认传感器是否在线光照传感器数值跳变传感器放的位置有直射阳光或灯光直射移到避开直射光的位置或者用漫反射管套住传感器离家模式误触发玄关门磁信号和人体传感器时序配合不好增加“玄关人体在10秒内未再触发”的条件并把全屋无人确认时间拉长设备偶发离线节点供电不稳或WiFi信号弱给STM32节点加稳压电路检查WiFi信号强度必要时加AP或改用有线回程规则修改后一段时间不生效HA自动化缓存或Node-RED未重新部署保存后强制重新加载自动化检查日志是否有报错6.2 几个独门小技巧这轮实测下来有几个经验是普通教程里不会写的单独分享出来。DNS和本地时区会影响自动化里的日出日落时间判断。HA默认按配置的时区计算日出日落但如果宿主机的系统时间和时区没配对日落触发会偏移几十分钟。建议直接把宿主机时区固定到本地别用UTC默认值。不要让传感器的消息上报频率过高。STM32节点如果每100毫秒上报一次数据HA里虽然撑得住但WiFi信道会变得很拥挤反而影响其他设备的响应。我给所有节点设置了“变化才上报”的策略温度变化超过0.5度才上报人体状态变化立即上报光照变化超过10勒克斯才上报。这样既保持实时性又不会刷爆网络。给执行设备留一个“手动优先”的口子。在HA里我做了一个人体传感器检测到人在设备附近超过10秒时自动接管当前手动操作权限的规则。这个规则的本意是当人主动去操作某个开关或面板时说明自动化的结果不符合预期系统应该暂时放弃对该设备的自动化控制直到一段时间无操作后恢复。这个设计能让家里人不会被“智能系统”气到拆墙。如果条件允许给STM32采集节点加一个看门狗。这个真的很重要STM32节点跑几个月后可能会出现偶发死机如果没有看门狗你得隔三差五手动重启。加了外部看门狗后节点死机10秒内自动复位整个月我只手动处理过一次。6.3 开源生态和DIY的关键取舍最后说一点关于“开源HA系统使用”和“基于STM32的智能家居”这两个关键词组合的理解。很多人问我你花这么多精力自己搭为什么不直接买一套成品我的答案很直接成品给不了我需要的规则自由度。智能家居的体验上限不在设备数量而在规则引擎能不能表达你的生活方式。家庭里每个人的习惯不同只有自己写的自动化才能真正贴合自己的节奏。就像你不可能买一件完全合身的成衣但你可以买一台缝纫机自己改。开源HA的路子确实有门槛前期要接受YAML语法、设备接入、网络排障这些基本功。但换来的好处是所有数据都在本地、所有规则自主可控、可以接任何你能想象得到的设备。STM32这类单片机节点的加入则是把DIY的自由度往更底层延伸——当你想把一个几十块钱的传感器模块变成自己的智能节点STM32给了你足够多的外设资源和功耗控制空间。如果你也想尝试这套“懂你”的方案我建议从最小闭环开始一个中枢旧电脑跑HA、一个门窗磁、一个人体存在传感器、一个智能插座。先把“回家亮灯”和“离家断电”这两个最实用又最简单的场景跑通再逐步扩展。不要一开始就想做全屋智能那样太容易在排障中劝退自己。先把一条规则调得顺顺当当再让它去管更多设备每多一条可靠的自动化你的生活就少一次掏出手机的手忙脚乱。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价