阿正 2026-10-23 17:05:16 发布大学宿舍里,电脑、台灯、风扇和充电设备都很常见。有时候早上急着去上课,我会担心自己忘记关台灯或者其他电器。虽然这只是个小问题,但我觉得很适合拿来练习 HarmonyOS 应用开发。
我的想法是做一个宿舍节能提醒助手。第一阶段先记录用户手动填写的设备状态,第二阶段再考虑与具备相应能力的智能设备协同,最后探索能否通过自然语言简化操作。
先实现一个设备状态列表
我先定义一个简单的设备数据模型:
interface DormDevice {
id: string;
name: string;
isOn: boolean;
}
function toggleDevice(
device: DormDevice
): DormDevice {
return {
id: device.id,
name: device.name,
isOn: !device.isOn
};
}
这里的 toggleDevice() 只会生成一个新的设备状态对象,不会真的控制台灯或插座。
在 ArkUI 页面中,我可以用 @State 管理设备列表,再通过按钮模拟状态变化。这样能够先练习数据驱动界面和事件处理,而不用一开始就购买硬件。
设备协同才是后续的重点
HarmonyOS 强调多设备协同,但要真正控制宿舍设备,仍然需要相应的硬件支持、设备发现机制、通信接口和授权流程。
因此,我不会把一个普通按钮包装成已经实现的智能家居控制功能。如果后续接入真实设备,就需要先确认设备是否支持对应协议,以及目标 SDK 提供了哪些相关能力。
我还想尝试增加自然语言入口。比如用户说“帮我检查一下宿舍哪些设备还开着”,应用可以先查询当前已连接设备的状态,再把结果整理出来。
这里的关键不是让 AI 猜测设备状态,而是让它理解用户意图,再调用有明确返回值的设备查询业务。没有连接的设备,应用应该明确提示“状态未知”,而不是直接认定设备已经关闭。
给设备增加状态展示
@Entry
@Component
struct DormEnergyPage {
@State lampOn: boolean = true;
@State status: string = '台灯状态:开启';
build() {
Column({ space: 16 }) {
Text('宿舍节能助手')
.fontSize(24)
.fontWeight(FontWeight.Bold)
Text(this.status)
Button('模拟切换台灯状态')
.onClick(() => {
this.lampOn = !this.lampOn;
this.status = this.lampOn
? '台灯状态:开启'
: '台灯状态:关闭';
})
}
.padding(20)
.width('100%')
}
}
目前,这只是一个模拟状态页面,不能直接控制真实硬件。真正接入设备后,还需要考虑通信失败、设备离线、状态同步延迟和用户权限等情况。
AI 提醒也不能只看一个开关
我还想加入节能建议,例如根据用户手动记录的使用习惯,提醒检查长时间未关闭的设备。但在没有实际功耗数据时,应用不能随便声称某台设备浪费了多少电。
如果将来接入智能插座的功耗数据,就可以进一步统计使用情况,再给出更有依据的建议。
对我来说,这个项目最大的收获,是把一个生活中的小烦恼拆解成了几个可以逐步完成的技术任务:先做页面和状态管理,再研究设备连接,最后探索 AI 意图理解。
学习 HarmonyOS 不一定非要从复杂的技术框架开始。找到一个自己每天都会遇到的问题,再用所学技术一点点解决它,本身就是很好的实践。
相关推荐
阿正
我还没有写个人简介......
帖子
提问
粉丝
华为鸿蒙OS7重磅更新!空间美学+AI大升级,哪些手机可以升级?
2026-09-22 13:50:08 发布华为鸿蒙智家技术沟通会举行:发布高阶家电品牌,多款新品齐发
2026-08-27 11:40:51 发布



0
京公网安备:11010502051901号