用户设备信息获取
技能说明
本技能是一个设备数据检索与过滤工具。它的主要职责是根据用户的自然语言描述(如“客厅的灯”、“主卧所有设备”),精准定位并返回符合条件的设备列表。它通常作为“设备控制”、“设备执行日志查询”等技能的前置步骤,提供精确的设备目标数据。
执行流程
解析家庭上下文
- 根据上下文或者调用
get-home-info技能,获取当前目标家庭的homeId。 - 如果用户未指定家庭且有多个家,默认查询所有家庭的设备信息。
- 根据上下文或者调用
获取全量设备数据
- 使用获取到的
homeId,调用底层 JS 脚本获取该家庭下的所有设备信息。 - 命令:
node common-skill/bin/smarthome-claw.js get_devices_info- 使用获取到的
输出文件
out_put/get_devices_info/devices_info.txt- 设备信息列表
语义过滤与推理
- 分析用户输入,提取房间和设备类型关键词。
- 逻辑判断:
- 指定房间 + 指定设备: 例如“客厅的灯” -> 过滤
location="客厅"ANDtype="light"。 - 指定房间 + 未指定设备: 例如“看看主卧有什么” -> 过滤
location="主卧",返回该房间所有设备。 - 未指定房间 + 指定设备: 例如“家里的摄像头” -> 过滤
type="camera",返回全屋所有摄像头。 - 未指定房间 + 未指定设备: 例如“列出所有设备” -> 不进行过滤,返回全量列表。
- 指定房间 + 指定设备: 例如“客厅的灯” -> 过滤
输出结果
- 将过滤后的设备列表以 JSON 格式返回给主技能。
边界情况处理
- 无匹配设备: 如果用户输入的条件互斥(例如用户说“卫生间的电视”,但卫生间没有电视),需用户澄清具体设备,例如询问用户“是否要获取客厅的电视信息”。若用户澄清后仍无匹配设备,返回空列表
[]并标记reason: "no_matching_devices",供主技能提示用户。 - 设备离线: 即使设备离线(
online: false),只要在筛选范围内,也应包含在列表中,供主技能判断是否执行操作。 - 模糊房间名: 支持同义词匹配(如“房间”匹配“卧室”)。
执行逻辑
1. 获取全量设备数据
- 调用底层 API 获取用户所有家庭下的所有设备
- 按家庭维度组织数据
2. 设备信息结构化
- 提取关键信息:设备 ID、名称、房间、类型
- 过滤无效设备数据
- 按 deviceId 统计:所有设备相关信息查询后的统计均按 deviceId 进行,确保同一设备的多份数据聚合
- 设备名称展示规则:当同一 deviceId 下存在多设备名称(如"华为全屋智能中控屏"和"Smart Home Panel")时,优先向用户展示中文名
3. 支持筛选(可选)
- 按房间筛选:如"客厅的所有设备"
- 按设备类型筛选:如"所有摄像头"
- 按家庭筛选:如"父母家的所有设备"