鸿蒙AI场景化高级落地:智慧生活智能决策系统开发——从传感器数据采集到AI决策链路完整实现
·



一、前言思考
1.1 智慧生活的"决策"本质
智能家居、智慧办公、健康监测,本质都是同一个问题:基于传感器数据做决策并执行。
- 家里温度 28℃ + 有人在客厅 → 决策:开空调 26℃;
- 会议室 14:00 有预定 + 灯光暗 → 决策:提前开灯调亮;
- 心率连续 5 分钟 > 100 + 用户在运动 → 决策:不打扰,只记录。
传统方案是"规则硬编码",阈值写死、场景写死,稍微复杂就维护不下去。AI 场景化的核心是把决策链路做成可感知、可学习、可自动化的闭环。
1.2 决策链路的五个环节
数据采集 → 数据融合 → 规则+AI混合决策 → 场景自动化执行 → 用户反馈学习
二、底层原理
2.1 数据采集层(Sensor Kit)
鸿蒙 Sensor Kit 提供统一传感器接口:
| 传感器 | 数据 | 场景 |
|---|---|---|
| 温度/湿度 | 环境温湿度 | 空调/加湿器联动 |
| 光照 | 环境照度(lux) | 灯光自动调节 |
| 加速度/陀螺仪 | 运动状态 | 跌倒检测/运动识别 |
| 心率 | 心率(ppm) | 健康监测/睡眠分析 |
| 麦克风(声音事件) | 声音事件(婴儿哭/门铃) | 家庭安防 |
| 位置 | 位置变化 | 回家/离家场景 |
关键设计:传感器数据统一抽象——不管底层是哪个传感器,上层拿到的是统一的"数据流 + 时间戳 + 置信度"。
2.2 数据融合:多源数据合成为一个事实
单传感器不可靠:光传感器被手挡住就误判"天黑"。数据融合 = 多传感器交叉验证:
场景: 判断"用户在家"
├─ 位置传感器: 在家 15 分钟前已到达 (权重 0.6)
├─ 门磁传感器: 已关门 (权重 0.3)
├─ 摄像头人体检测: 客厅有人 (权重 0.5)
└─ 融合结果: 在家 (置信度 0.87) > 阈值 0.7 → 判定在家
融合算法:加权投票、贝叶斯推理、或 D-S 证据理论。端侧用加权投票就够,规则透明可解释。
2.3 规则引擎 + AI 混合决策
纯规则死板,纯 AI 黑盒。工程上采用混合决策:
输入特征
│
▼
规则引擎(可解释, 硬约束)
├─ 温度 > 30℃ → 必开空调 (硬规则, 优先级最高)
├─ 用户手动关闭 → 3小时内不自动开启 (用户意志优先)
│
▼
AI 模型(学习, 软决策)
├─ 预测用户舒适温度区间
├─ 预测回家时间, 提前预调
│
▼
决策仲裁: 规则兜底 + AI 优化
| 场景 | 谁决策 |
|---|---|
| 安全类(火灾、燃气泄漏) | 规则硬决策,AI 不干预 |
| 舒适类(温度、灯光) | AI 优化 + 规则上限保护 |
| 个性化类(音乐、推荐) | 纯 AI 决策 |
2.4 场景自动化执行
决策输出 → 动作执行。动作包括:
- 拉起应用/服务(开空调 App);
- 控制 IoT 设备(智能插座);
- 发送通知卡片(提醒用户);
- 联动其他场景(离家 → 关灯 + 关空调 + 布防)。
执行要求幂等 + 可回滚 + 可确认:同样的决策重复执行不产生副作用。
三、实战落地
3.1 传感器数据采集
import { sensor } from '@kit.SensorServiceKit';
// 1. 订阅温度传感器(低功耗采样)
const tempSub = sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,
(data: sensor.AmbientTemperatureResponse) => {
this.lastTemp = data.temperature;
this.feedToDecisionEngine('temperature', data.temperature, Date.now());
}, { interval: 5000 }); // 5秒一次,低频省电
// 2. 订阅人体存在检测(若设备支持)
sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_WEAR_DETECTION,
(data) => {
this.feedToDecisionEngine('human_present', data.value === 1 ? 1 : 0, Date.now());
}, { interval: 1000 });
3.2 数据融合 + 场景判定
interface SensorReading {
type: string;
value: number;
ts: number;
weight: number;
}
// 融合判定"用户在客厅"
function isUserInLivingRoom(readings: SensorReading[]): { result: boolean, confidence: number } {
let score = 0;
let totalWeight = 0;
for (const r of readings) {
if (r.ts < Date.now() - 60000) continue; // 忽略1分钟前的旧数据
const signal = signalFor(r); // 每种传感器转成 0~1 的信号强度
score += signal * r.weight;
totalWeight += r.weight;
}
const confidence = totalWeight > 0 ? score / totalWeight : 0;
return { result: confidence > 0.7, confidence: confidence };
}
3.3 规则 + AI 混合决策引擎
class DecisionEngine {
// 1. 规则层(硬约束)
private applyRules(ctx: Context): Action | null {
// 安全规则: 温度>35℃ 强制降温
if (ctx.temperature > 35) {
return { device: 'ac', command: 'on', target: 26, priority: 100 };
}
// 用户手动覆盖: 3小时内不再自动
if (ctx.userOverrideWithin3h('ac')) return null;
return null;
}
// 2. AI 层(软决策)
private aiPredict(ctx: Context): Action | null {
const comfortTemp = this.comfortModel.predict({
hour: ctx.hour,
temp: ctx.temperature,
userProfile: ctx.userProfile
}); // 预测用户舒适温度
if (Math.abs(comfortTemp - ctx.temperature) > 2) {
return { device: 'ac', command: 'set', target: comfortTemp, priority: 50 };
}
return null;
}
// 3. 仲裁
decide(ctx: Context): Action[] {
const actions: Action[] = [];
const ruleAction = this.applyRules(ctx);
if (ruleAction) actions.push(ruleAction);
else {
const aiAction = this.aiPredict(ctx);
if (aiAction) actions.push(aiAction);
}
return actions;
}
}
3.4 场景自动化执行 + 反馈学习
// 1. 执行动作
async function executeActions(actions: Action[]) {
for (const a of actions) {
await deviceManager.control({ deviceId: a.device, command: a.command, params: a });
logAction(a); // 记录动作日志,供学习
}
}
// 2. 用户反馈采集(强化学习信号)
// 用户手动调了温度 → 说明 AI 决策偏差 → 更新舒适模型
function onUserAdjust(device: string, userValue: number) {
const ctx = getContextSnapshot();
comfortModel.update({
features: [ctx.hour, ctx.temperature, ctx.userProfile],
label: userValue // 用户真实偏好
});
LoggerUtil.info(TAG, 'AI 模型已学习用户偏好: ' + userValue);
}
四、性能排查与优化
| 问题 | 表现 | 优化手段 |
|---|---|---|
| 传感器耗电 | 7×24 采样掉电快 | 低频采样、事件触发式、VAD 前置 |
| 决策延迟 | 场景响应慢 | 预计算、边触发边决策 |
| 误决策 | 错误触发动作 | 融合置信度门槛、规则上限、用户覆盖 |
| 反馈缺失 | 模型学不到东西 | 动作日志 + 用户调整记录埋点 |
| 联动风暴 | 一个场景触发连环 | 动作幂等 + 防抖 + 依赖图控制 |
4.1 传感器功耗:事件触发优先
能事件触发就不用轮询:
// 门磁/人体传感器用事件触发
sensor.onSensorEvent(sensor.SensorId.SENSOR_TYPE_ID_HUMAN,
(data) => { handleHumanEvent(data); }, { trigger: 'event' });
// 温度才用低频轮询
4.2 决策防抖
同一场景 5 分钟内不重复执行相同动作:
const lastAction = { time: 0, signature: '' };
function isDup(action: Action): boolean {
const sig = action.device + action.command + action.target;
if (sig === lastAction.signature && Date.now() - lastAction.time < 5 * 60 * 1000) {
return true;
}
lastAction.signature = sig;
lastAction.time = Date.now();
return false;
}
五、总结
- 智慧生活的本质是感知 → 融合 → 决策 → 执行 → 学习的闭环。
- 数据融合是决策质量的基石:单传感器不可靠,多源交叉验证才可信。
- 规则 + AI 混合是工程最优解:安全靠规则硬约束,舒适靠 AI 优化,用户意志永远优先。
- 反馈学习让系统越用越聪明:用户每次手动调整都是免费标注数据。
一句话记住:规则保底线,AI 提体验,反馈促进化,防抖防风暴。
🚀 演示功能优化(随项目同步更新)
本文对应的 ArkTS 演示页面已随项目整体优化,主要改进:
- 独立主题风格:暖木家居 · 米白木质圆角,与其余章节演示页明显区分,不再千篇一律。
- 步骤回放动画:点击演示按钮后,结果行按 260~320ms/步 逐步展示,模拟真实推理过程。
- 运行态保护:演示过程中按钮置灰防重复触发,页面退出自动清理定时器。
- 结果摘要:演示结束后自动给出「一句话结论」,并 Toast 提示完成。
- AI 对话演示:新增 AiChatDemo(根目录 main.py 的 ArkTS 移植),真实 SSE 流式大模型请求,首页「★ AI Chat 流式对话演示」可进入。
对应页面:entry/src/main/ets/pages/AiSceneDemo.ets
🧪 演示优化:真实 AI 推理接入(v3)
本演示页顶部新增 AI 场景管家主卡,点击即真实调用云端大模型(SSE 流式),不再是纯模拟回放:
- 请求链路:
utils/AiClient.ets(ArkTS 封装 OpenAI 兼容接口)→ POSThttps://api-ai.gitcode.com/v1/chat/completions,模型deepseek-ai/DeepSeek-V4-Flash,流式stream: true - 演示场景:场景理解 / 设备联动 / 习惯学习 —— 每个场景绑定不同智慧家居 AI 专家 Prompt,返回内容各有差异
- 交互体验:进入页面自动触发一次真实推理;点场景标签切换并重新请求;按钮手动触发;输出区打字机流式展示
- 真实标识:卡片右上角
LIVE徽标 + 端点/模型名水印,保证"所见即所调"
更多推荐

所有评论(0)