| name | get-device-messages |
| description | [基础技能] 获取并清洗全屋智能设备的原始消息流与告警记录。负责调用底层JS脚本拉取指定时间范围内的设备通知,并进行去重、聚合与重要性分级,形成干净、结构化的全屋消息数据。 |
设备消息获取 (Get Device Messages)
核心定位
本技能是一个数据源技能。它不直接面向用户生成最终的阅读报告,而是作为面向用户的技能(例如“全屋简报”)子技能。它的核心职责是从海量的设备通知中,提炼出有价值的信息,剔除冗余噪音(如设备频繁上下线的抖动),确保下游技能接收到的数据是精准且经过分类的。
触发与协作
- 输入参数:
last_days: 整数,表示查询过去多少天的消息(默认为 7)。
home_id: 目标家庭ID,通过调用上游技能get_homes_info\SKILL.md传入。非必须,如果用户未指定家庭,则直接查询用户所有家庭的消息,并按照家庭维度区分。
- 输出数据: 结构化的消息列表,包含“紧急告警”、“一般通知”和“已忽略的冗余信息统计”。
执行流程
1. 参数构建与脚本调用
根据用户指定的时间范围参数,构建命令行指令,调用底层 JS 脚本与smartHomeService 交互,获取指定。
node common-skill/bin/smarthome-claw.js get_device_messages --last-days 7
node common-skill/bin/smarthome-claw.js get_device_messages --date today
输出文件
out_put/get_device_messages/device_messages.txt - 设备消息列表
2. 数据清洗与智能聚合 (核心逻辑)
为了生成高质量的简报,必须对原始数据进行以下处理:
消息去重与防抖
- 规则: 如果同一设备在短时间内(如10分钟内)上报相同的“离线”或“恢复在线”消息,视为网络抖动。
- 处理: 仅保留第一条和最后一条,中间重复项标记为“已折叠”。
- 示例: 设备“智能门锁”在1分钟内上报了5次“电量低”,聚合为1条:“智能门锁(5次) - 电量低”。
重要性分级
根据内容关键词,将消息重新划分为简报所需的三个等级:
- 重点关注: 告警消息,例如涉及安全、财产或设备故障的消息。
- 一般动态: 用户需知晓但不紧急的状态变更。
- 关键词: “设备添加”、“设备周报”、“门铃按压”、“自动化执行失败”。
- 忽略/统计: 纯粹的流水账,无需在简报中展示细节,仅做数量统计。
- 关键词: “定时开关执行成功”、“设备上线”、“设备周报”。
3. 输出结构化结果
将处理后的数据以清晰的格式展示,重要级较高的优先展示。若存在多个家庭,按照家庭维度分开展示。
与其他技能的协作
1. 家庭简报
node common-skill/bin/smarthome-claw.js get_homes_info
node common-skill/bin/smarthome-claw.js get_device_messages --last-days 1
2. 设备控制记录查询
- 结合
get_control_records 分析设备的主动操作和被动告警
相关技能
实现细节
- 按 deviceId 统计:设备消息查询后的统计按 deviceId 进行,确保同一设备的多条消息聚合一致
- 设备名称展示规则:当同一 deviceId 下存在多设备名称(如"华为全屋智能中控屏"和"Smart Home Panel")时,优先向用户展示中文名