☰
从传感器到健康建议:Atmosis环境智能系统实战解析
2026/10/14 16:18:56 网站建设 项目流程

环境数据这几年成了智能家居里的热门话题,但真正住过一间装满传感器的房子之后,你会发现一个尴尬的事实:数据跑得热闹,生活该怎么过还是怎么过。去年我花了很长时间折腾一套环境监测原型,最终把它重构成一个叫 Atmosis 的项目,英文全称是 AI Environmental Intelligence & Health Advisory,也就是人工智能环境智能与健康建议。它做的事并不玄乎:把温度、湿度、CO2、PM2.5、TVOC 这些琐碎读数,翻译成一个普通人能秒懂的结论——现在该开窗、该关窗、该开净化器,还是什么都不用动。这篇文章就把这套系统的定位、架构、实操过程和踩坑记录完整摊开,给想自己动手做环境智能的朋友当一份参考。

1. 项目定位:环境数据不应该是死数字

1.1 从“温度多少度”到“这个环境意味着什么”

传统环境监测的逻辑非常简单:采数据、设阈值、超了就告警。温度超过 28 度就报“热”,PM2.5 超过 75 就提醒“开净化器”。这套逻辑在单一指标下没毛病,但放到真实生活里就有点失灵了。温度 28 度搭配 40% 湿度,和搭配 85% 湿度,体感完全是两回事;PM2.5 同样是 80,室外天气晴朗和正在飘柳絮,给你的行动建议也应该完全不同。环境健康问题从来不是单一因素造成的,而是温度、湿度、换气量、颗粒物、人为活动共同作用的结果。

我做 Atmosis 之前也走过弯路,一开始只是把传感器数据接入一个仪表盘,用不同颜色标红标黄。看着挺专业,可真到要决策的时候,数据反而成了负担。客厅 CO2 已经 1600ppm,PM2.5 也在缓缓上升,那我到底先开窗还是先开净化器?如果室外正好是雾霾天,开窗会让 PM2.5 更高,那又该怎么办?这些问题,传统阈值告警完全答不上来。Atmosis 的第一个设计原则,就是把“环境数值”翻译成“对当前环境中人的影响”,再做行动建议。它的核心不是测量更准,而是判断更对。

1.2 Atmosis 要解决的核心问题:风险被感知,却没人翻译

如果只是缺数据,市面上成品空气质量检测仪早就解决了。真正缺的是四件事。

数据孤岛:温湿度计管温湿度,空气净化器管 PM2.5,新风系统管 CO2,每个设备各说各话,没有人把它们放在一个模型里看“整体环境压力”。这就像体检报告分成了好几个科室,每个科室只告诉你单项指标,却没有一个医生做综合诊断。

告警无行动:大多数设备只会在超标时响一下,然后就没有然后了。CO2 超标后,是开窗十分钟还是开新风一小时?PM2.5 超标后,是关窗等待还是净化器开强档?这些操作参数恰恰是用户最需要的,却几乎没人给。

个体差异大:一个健康的年轻人待在 1500ppm 的 CO2 环境里可能只是有点懵,但一个有哮喘病史的人同时面对 1500ppm CO2 和 60μg/m³ 的 PM2.5,可能已经开始不舒服。健康建议必须带上“使用者的敏感度”,而不是给一个通用答案。

时间维度缺失:只看瞬时值会误判。CO2 瞬时到 1200ppm 可能是刚开完门进来一群人,几分钟后就会回落;但如果 CO2 连续三个小时都在 1200ppm 以上,说明换气系统持续不足,这是完全不同的风险等级。

Atmosis 的思路,是把环境数据建模成“持续暴露压力”。系统不看某一秒的读数,而是计算过去 10 分钟均值、过去 1 小时趋势,再叠加当前活动场景和用户档案。只有这样才能回答“这个环境对人到底意味着什么”。

1.3 谁会从这套系统里切实受益

第一个是过敏或呼吸道敏感的人。花粉、灰尘、霉菌孢子这些细颗粒物,在普通仪表盘上只是一个数字,但对敏感人群来说,它意味着整晚睡不好、晨起咳嗽。Atmosis 会把 PM2.5 和湿度关联起来判断,因为潮湿环境会让过敏原更容易存活,单纯关净化器并不能解决所有问题。

第二个是长时间在密闭空间办公或学习的人。会议室、书房、自习室,人员密度高,CO2 很容易不知不觉爬到 1500ppm 以上,人会觉得困倦、注意力下降。系统需要做的是提前通风,而不是等已经头晕了才告警。

第三个是家里有老人和小孩的用户。老人和儿童对环境变化的耐受度低,卧室夜间 CO2 和湿度对睡眠质量影响尤其明显。给这类家庭做的系统,建议必须更保守、可执行,还要能输出“夜间卧室环境日报”这类长期观察。

第四个是折腾智慧住宅、新风系统、被动房调试的工程型用户。这类人未必需要花哨界面,他们更关心数据逻辑是否正确、建议链路是否可追溯、能否通过 API 把环境信号交给其他自动化系统。Atmosis 的开放接口和可解释建议,正好踩在这个需求上。

2. 架构设计与技术选型

2.1 数据链路:从传感器到建议

整个系统可以拆成四条链路:采集链路、传输链路、推理链路、反馈链路。采集链路是每个房间的环境节点,负责把模拟世界变成数字信号;传输链路通过本地网络,以 MQTT 协议把数据推送到边缘网关;推理链路在边缘网关和云端各跑一部分,边缘处理实时告警,云端跑周级模型训练;反馈链路再把建议推送到手机 App、小程序的推送服务,以及用户自建的自动化脚本里。

这里有一个架构取舍值得说明。为什么不把数据全部直接传到云端再计算?一是实时性,断网的时候你仍然需要知道卧室 CO2 是不是正在超标;二是隐私,环境数据看似无害,却能反推出生活规律——几点起床、几点做饭、家里有没有人。边缘网关只上传脱敏后的统计特征和模型训练需要的聚合成特征,原始一分钟粒度数据只留在本地,这样既保证了功能,也减少了不必要的上传。

我最初也偷懒试过把数据全部走云端免费存储,结果连续几天网络抖动,告警延迟了快四十分钟,用户在卧室闷了半天才收到通知,这种体验是不可接受的。所以后来边缘网关承担了所有秒级判断,云端只负责“学习”和“调参”,两者分工明确。

2.2 传感器选型:每一类指标都有讲究

选传感器不是越贵越好,而是要看你的系统需要什么尺度。温度湿度这类基础指标,用 I2C 接口的数字传感器就够,精度控制在 ±0.3 摄氏度以内,关键是避开自热干扰。PM2.5 我选的是激光散射原理的传感器,能直接读出颗粒物质量浓度,响应快,适合做实时联动。CO2 必须用 NDIR 红外原理传感器,因为 CO2 是一个绝对值指标,电化学或估算算法受环境影响太大。TVOC 用常见的金属氧化物半导体传感器,它不能给出精确的化学物质浓度,但用来感知室内污染趋势非常够用。

如果你只看成品检测仪的参数,会觉得同价位都差不多,但实际上传感器之间差别巨大。我最早用过一款很便宜的一体式检测模块,PM2.5 和 CO2 都集成在里面,体积小、接线方便,可实测下来 PM2.5 和隔壁靠谱传感器差了将近 40μg/m³,这种误差会让所有健康建议失去意义。所以 Atmosis 每个房间节点都坚持“独立传感器、统一数据总线”,宁可多占一点空间,也不把命根子押在一颗不靠谱的集成芯片上。

具体选型可以按下表参考:

指标推荐传感器原理为什么选它主要坑点
温度/湿度I2C 数字传感器精度高,直接出校准后的数字信号靠近发热元件会明显偏高
PM2.5激光散射传感器响应快,能测质量浓度长时间使用风机积灰,需定期清洁
CO2NDIR 红外传感器测量绝对浓度,寿命长成本高,断电太久会丢失基线
TVOC金属氧化物传感器对装修、清洁剂污染敏感交叉干扰,遇酒精香水会飙升

2.3 数据融合与建模思路

拿到多路传感器数据之后,第一件事不是上模型,而是先清洗。传感器在开机预热阶段、受到气流扰动时、或者 Wi-Fi 天线发热时,都会产生异常尖峰。系统先用中位数滤波把偶发尖峰去掉,再计算 1 分钟均值、10 分钟均值、1 小时均值,分别代表“当前状态”“短期趋势”“长期暴露”。

推理部分我用了两层结构。第一层是硬规则层,它基于通用空气质量健康阈值,处理那些确定性的场景。比如 CO2 超过 1500ppm 就一定要提示加强通风,湿度低于 30% 就要建议加湿。硬规则的好处是稳定、可解释、不出格,任何情况下都不会给出违反基本常识的建议。第二层是模型层,用梯度提升树这类轻量级模型,输入特征包括各指标均值、变化斜率、季节、室外气象、房间类型、用户敏感级别,输出的是“当前环境引发身体不适的风险等级”。

为什么不直接上深度学习大模型?因为环境健康建议这件事,用户信任比精确度重要。一个黑箱模型告诉你“风险概率 63%”,你根本不知道怎么响应。树模型的好处是能够输出特征重要度,系统可以告诉你“主要原因是 CO2 持续偏高,其次是湿度偏低”,这种可解释性在健康建议场景里价值极高。我实际训练时还发现,模型层最大的价值不是替代规则,而是发现多因子组合风险。比如“低温 + 高湿度 + 高 CO2”这个组合,单项都在黄色警戒线以下,但叠加起来对偏头痛人群非常不友好,这种组合逻辑在静态规则表里几乎不可能穷举。

2.4 让建议“说人话”

建议生成是整个系统最需要用心的地方。同一个环境状态,对敏感人群和对健康成年人的说辞应该完全不同。Atmosis 的建议文本不是简单拼变量,而是按“威胁指标 + 持续时间 + 主因 + 动作 + 终止条件”的结构生成。

举一个实际例子。系统检测到客厅 CO2 连续 30 分钟超过 1600ppm,同时室外 PM2.5 只有 20μg/m³,天气数据表明微风、温度适宜,那么建议就会是:“客厅 CO2 已经连续半小时超过 1600ppm,主要原因是门窗关闭且室内人员较多。建议开窗通风 5 到 10 分钟;等 CO2 回落到 900ppm 以下再关窗。”如果室外 PM2.5 也是雾霾级别,这个建议就会自动变成:“建议不要开窗,打开新风系统中档,或在室内开启空气净化器。”

所有建议都必须带终止条件,这是我反复强调的一点。没有终止条件的建议等于没有建议。你告诉用户“请通风”,用户通风多久才能停?系统说“请开净化器”,净化器什么时候可以关?Atmosis 里的每条建议都会附带“当某个指标恢复到哪里,就可以停止当前操作”,这看起来只是文案细节,却是实际体验差距最大的地方。

3. 实操落地:从零搭建一个环境智能节点

3.1 硬件清单与组装细节

先给出一套可以抄作业的硬件方案。主控我用的是一块带 Wi-Fi 的开发板,型号大家很熟悉,ESP32 级别就够,双核跑传感器采集一点不吃力,关键是价格低、生态成熟。传感器方面,核心四件套是温湿度、PM2.5、CO2、TVOC,按上一节的选型思路购买独立模块。电源建议 5V/2A 以上,因为 PM2.5 传感器内部有风机,启动瞬间电流不小。外壳最好使用带进气孔和防尘滤网的盒子,淘宝那种全密封透明壳子绝对不能用,传感器会被闷死在里面。

组装时有几个容易踩的点。第一,传感器不要紧挨着 Wi-Fi 天线,开发板发热会让附近温湿度读数偏高,我实测贴着放置时温度误差能到 3 摄氏度。第二,PM2.5 传感器的气流方向要避开主控板,进气口不能朝下,否则灰尘会快速积满光学舱。第三,所有传感器模块尽量通过长排线引出,让探头悬在空气流通的位置,而不是挤在板卡之间。第四,做好离线冗余,SD 卡或掉电保存的本地缓存区一定要留,因为环境数据一旦断档,后面的趋势分析就全错了。

3.2 数据采集、校准与清洗

采集代码本身不复杂,难的是让数据可信。一个全新的传感器节点,上电后不要立刻投入使用,先让所有传感器预热二十分钟到半小时,等读数稳定再说。然后要做三件校准工作。

PM2.5 校准:把节点放到室外通风处,连续运行一小时,收集的数据和附近城市监测站的官方数据做对比,算出一个线性偏移量。比如说传感器测出来 45,参考站是 50,那就把斜率修正为大约 1.1 倍。这个偏移会随空气湿度和传感器老化变化,建议每两周校一次。

CO2 校准:NDIR 传感器本身有自动校准功能,但它需要定期经历新鲜空气环境。最简单的做法是每天晚上人离开房间后,打开窗通风一段时间,让节点在无人状态下测到稳定低值。校准程序会自动把这当成“新鲜空气基线”。如果房间长期密闭,CO2 基线会漂移,测出来永远偏高,这是很多人忽视的坑。

数据清洗代码可以参考这个片段:

import pandas as pd def clean_series(df, column="co2", window=5): # 用中位数滤波去掉偶发尖峰 df["clean"] = df[column].rolling(window, center=True, min_periods=1).median() # 去掉传感器预热瞬间的异常值 df.loc[df["uptime"] < 300, "clean"] = None return df.dropna(subset=["clean"])

这里每隔五分钟在边缘网关做一次聚合,把 1 分钟均值、10 分钟均值和斜率都算好,再让上层规则和模型消费这些聚合特征,而不是消费原始逐秒数据。

3.3 健康建议逻辑与告警规则

上一节提到规则层要“保守且稳定”,下面是我实际采用的一套偏保守阈值,单位已经标明,大家可以参考但不要照抄,因为不同环境、不同人群真不一样。

指标无风险区关注区风险区强烈处理区
CO2(ppm)<800800-12001200-1500>1500
PM2.5(μg/m³)<3535-7575-150>150
湿度(%)40-6030-40 或 60-7025-30 或 70-80<25 或 >80
TVOC(mg/m³)<0.30.3-0.60.6-1.0>1.0

告警策略要防止“狼来了”效应。同一类建议一小时内不重复推送,比如用户已经收到“请开窗通风”,五分钟后 CO2 还在高位,系统不会再推一遍一模一样的提醒。如果两小时后二氧化碳仍无好转,系统会提高分级,推送一条“初级通风似乎没有效果,建议检查新风系统”。一条告警只聚焦一个核心问题,不要把 CO2、PM2.5、湿度三个红色警报同时砸到用户脸上,看完只会焦虑,不知道先处理哪个。优先级规则很简单:威胁等级高的先报,同时段拉出一个“首要建议”。

用户敏感性参数也在这里起作用。敏感人群模型会把 CO2 的风险阈值下调大约 15%,把 PM2.5 的通风建议改为“不建议开窗、优先机械过滤”。这样做会让敏感用户感受到系统确实在适配自己,而不是用一份通用模板打天下。

3.4 可视化、通知与对外接口

环境监测系统最容易死在可视化过度设计上。我做主界面时只放三张卡片:当前环境综合评分,过去 24 小时空气品质变化曲线,以及一条最核心的健康建议。综合评分不是简单平均各指标,而是按“短板原则”计算——最差的那个指标拖累整体评分最多。比如 CO2 还算良好,但 PM2.5 严重超标,综合评分就会被 PM2.5 主导,而不是被几个良好指标稀释掉。

通知方面,我接了两个渠道:手机 App 的推送和电子邮件。App 推送用于实时告警,邮件用于每日报告。每天的早晚各一次环境摘要,包括夜间卧室 CO2 均值、全天通风建议执行次数、当前最需要注意的指标。对外接口方面,我留了一个简单的 REST API,提供 JSON 格式的当前环境数据和主动建议,方便接入其他自动化系统。这个 API 只允许在内网访问,如果需要远程调用,就加一层 Token 鉴权和频率限制,防止不怀好意的请求把数据拖走。

4. 实测中的坑与排查实录

4.1 传感器读数不是插上就能用

第一个踩的坑是温湿度传感器自热。开发板本身跑着 Wi-Fi,芯片温度随便就比环境高好几度,传感器贴在板子上,测出来的温度自然永远偏高。最后我用一排母座把温湿度探头强制拉到离板子 15 厘米以上的位置,才解决这个问题。这件事也提醒我,结构设计对数据质量的影响,比传感器本身的价格影响还大。

第二个坑是 PM2.5 传感器读数越用越低。激光散射传感器内部有一个小风扇,负责驱动气流通过光路。用了三四周后,风扇叶片和光路里会积灰,导致通过光路的颗粒物减少,读数逐渐偏低。如果你发现同一房间的 PM2.5 长时间稳定在个位数,而外面明明在飘霾,先别高兴,大概率是传感器堵了。我这边的处理办法是每两周拆开用皮吹清理一次,顺便检查风机是否正常转动。

第三个坑是 CO2 传感器晚上断电。因为外接电源插头松了,节点凌晨断电,第二天重新上电后,NDIR 传感器的基线乱了,连续几天 CO2 读数比实际偏高很多。后来给节点上了带断电保持的电源,并在固件里加了“掉电重启后 24 小时内只记录、不参与告警”的保护逻辑,避免拿错误数据去吓用户。

4.2 数据全了,模型反而不好使

环境数据有一个天然问题:大部分时间环境都是正常的。我跑了一个月数据,阳性样本,也就是用户标记“明显不舒服”的时刻,只占不到 1%。用这种数据训练二分类模型,模型很容易偷懒,把所有样本都预测成“正常”,准确率还高达 99%,但一点用都没有。解决办法是重采样和合成少数类样本,同时对模型输出做阈值偏移,宁可模型偏保守一点,把轻微风险识别为“关注”,也不要漏掉真正的高风险场景。

第二个模型问题是指标含义对不上。用户标记“闷”“头晕”其实是主观感受,受当时心情、疲劳程度影响很大。同一个环境,昨天头晕今天没感觉,标签就互相矛盾。后来我用一个弱标签策略:连续工作超过 90 分钟 + 时间在下午 + 房间 CO2 高于 1200ppm,就自动生成一个“疑似认知负荷”样本。这不能和医学结论画等号,但对训练环境风险模型已经够用了。

第三个问题是模型给出的概率数字用户看不懂。风险概率 63% 到底要不要开窗?我后来干脆不展示原生概率,而是把连续输出离散成“低、中、高”三档,并强制附上主因标签。比如“中度风险,主因:CO2 持续上升”,用户不需要理解概率,只需要知道听系统的建议行动就够了。

4.3 被场景“欺骗”的误报

误报最典型的例子发生在厨房。做饭时即便油烟机开着,客厅的 TVOC 传感器也会因为飘过来的味道瞬间飙到 0.9mg/m³ 甚至更高,触发通风建议。可实际上只要关火二十分钟,数值自然回落。我加了一个“场景变化率识别”:当 TVOC 在五分钟内快速上升超过一定斜率,并且温度和湿度也在变,就先判定为“疑似烹饪活动”,暂时压住通风建议,观察十五分钟后再决定。这样有效过滤了厨房带来的瞬时误报,又不会漏掉持续的装修污染。

另一个误报发生在新风系统和净化器协同运行时。空气净化器开了一个下午,PM2.5 从 90 降到 30,但规则层看到 PM2.5 在“关注区间”,继续建议“开启净化器”。用户梦到系统不智能,已经开着净化器还让我开。后来我在规则里加入“设备状态感知”:如果净化器功率已经在运行,且 PM2.5 正在以每小时下降 20μg/m³ 以上的速度改善,系统只提示“改善中,暂无需操作”,不再重复建议。如果持续一小时没有改善,才重新提醒检查滤网或风量。

春季花粉高发期也出过幺蛾子。室外 PM2.5 不高,但花粉浓度很高,规则层看到“室外空气良好”就建议开窗通风,结果过敏用户打完喷嚏来质问我。从那以后,开窗建议必须额外检查外部过敏原风险指数,把它作为一项修正条件接入规则表。

4.4 常见问题排查速查表

现象可能原因解决建议
PM2.5 长时间不变或偏低传感器进风口堵塞/风机停转清理光学舱,检查风扇
CO2 数值明显偏高且通风后下降慢新鲜空气基线丢失、房间通风短路重新校准基线,增加通风时间
湿度在空调开后剧烈波动传感器挨着出风口把探头移到远离直吹的位置
网络断连导致数据断档路由器信道拥塞/节点离线节点增加本地缓存,恢复后补传
模型主因显示不明确输入特征太少或样本不平衡增加场景标签、持续时间、室外气象特征
同一建议反复推送缺少推送抑制逻辑同一建议主题一小时内只推一次

5. 后续扩展:向“个人环境医生”方向走

5.1 与可穿戴数据联动

环境数据能告诉我们环境有多差,但很难告诉我们环境对某个具体人造成了多大影响。下一步很自然的方向,就是接入智能手表或手环的心率、睡眠、活动数据。比如夜里卧室 CO2 持续高于 1200ppm 的时段里,用户频繁翻身、深睡比例下降,如果这种模式反复出现,就是一个非常有价值的环境健康信号。我最近就在卧室节点加了一个试验性的“睡眠环境评分”,把夜间温湿度、CO2、噪音事件和可穿戴的睡眠阶段整合成一张图,先跑一段时间看看相关性,再决定要不要升级成正式功能。

5.2 多房间横向对比与建筑诊断

目前我已经在两个房间部署了同规格节点,意外发现不同房间之间的差异非常明显。次卧的 CO2 几乎一直比客厅高 300ppm 左右,说明空间换气路径或者门缝通风存在短板。儿童房夜里湿度经常超过 75%,单纯提醒用户开窗没用,真正原因可能是衣柜靠外墙导致凝水。环境智能一旦有了多点位数据,本质就变成了一种建筑健康诊断工具:不只是“这个房间现在怎么样”,而是“为什么这个房间一直比别的房间差”。这种对比对老房改造和新风系统设计都特别有价值。

5.3 与节能系统协同

环境智能还能反过来帮节能。以前新风系统是按固定时间表运行的,每天固定开两小时,不管家里有没有人、CO2 是否真的超标。接入 Atmosis 的环境信号之后,新风系统可以变成按需运行:室内无人时,哪怕 CO2 稍高也不用开;室内人多时,系统根据 CO2 上升速率估算需要的新风量,自动调整档位。这既避免了能源浪费,又能保证真正需要通风的时候风量到位。做这套系统之前我没有想到,一个健康建议系统最大的意外收益,其实是省电费。

我个人在这个项目里最大的体会是:做环境智能,难的不是传感器精度,也不是模型酷不酷,而是让系统在恰当的时间,给出一句普通人能听懂、敢执行、而且真的有效的建议。Atmosis 到现在依然有很多粗糙的地方,但它已经彻底改变了我的生活习惯。如果你也想自己动手做一套,我的建议很直白:先从一个房间、三个指标开始,把“建议怎么给”想清楚,再逐步加传感器。数据可以做加法,但健康建议一定要做减法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询