Skip to content

Commit 7af1bfd

Browse files
wangjunyu200708wehosHongzhi Wenclaude
authored
Feature/add mijia plugin (#590)
* add -mijia-plugin-cn * 根据ai机器人修改 * 二维码修复 * 重构! * 完善UI界面 * 实现自然语言控制 * deBUG,修改说明文档 * Update __init__.py * 返回信息本地化 * TimeoutError → MijiaTimeoutError,ConnectionError → MijiaConnectionError(保留旧别名兼容) 同步版 MijiaAPI 现在支持 with 上下文管理器 instances 索引缓存 7 天,冷启动性能大幅提升 二维码轮询加了 in-flight 闸门,避免请求堆积 * 修复故障保文,修复validate_value(),修复step 的范围校验现在整段失效,修复L3缓存,添加语言标记 * 补充 homeid仓储接口不致返回类型不一致喵 * 把 device_id 规范化成 did * 修复设备名称识别 * 修复异常判断 * Update README.md * 无参 action 传空列表,调用方现在可以精确 catch 各类子异常 * Update __init__.py * close 模式保持一致,凭据文件权限加固失败不再静默 * 静态页失败提示与实际入口文件确保一致 * 修 logout,丢掉 self.api 前增加 close() * 注释一致化,取消后台任务,缓存读增加身份校验 * Update README.md * 缓存加入user_id,增加凭据已过期,过期凭证刷新 * 属性名纠正,设备缓存增加验证,缓存失效修复 * aliases 增加映射,用 scipy.signal.resample_poly 实现,支持 8k~48k → 16k * 读取参数路径优化 * TTL修复 * 旧格式 JSON 的反序列化修复,L1 和 L2 的模式匹配语义 * 数据脱敏,加入set_batch * 修改反序列逻辑 * manager 可选注入无空值保护 * Nitpick 修复 * 消除 ImportError * Ruff F541 的语义修复 * OSError 补充到异常捕获 * 防御性断言,满足静态检查器 * encrypt_params 异常穿透 * chore: add mijiaapi>=3.0.5 dependency and re-export requirements.txt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Hongzhi Wen <wenguanjung@aliyun.com> Co-authored-by: Hongzhi Wen <cartabio.coder1@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6654174 commit 7af1bfd

38 files changed

Lines changed: 9278 additions & 37 deletions
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# 米家插件使用指南
2+
3+
## 概述
4+
5+
这个 skill 指导 AI 如何正确使用 N.E.K.O 的米家插件(mijia)来控制米家智能设备。
6+
7+
## 核心概念
8+
9+
### 设备信息结构
10+
每个设备包含以下关键字段:
11+
- `did`: 设备ID(控制设备时作为 `device_id` 参数)
12+
- `name`: 设备名称
13+
- `model`: 设备型号
14+
- `is_online`: 是否在线
15+
- `properties`: 属性列表(包含 `siid`, `piid`, `name`, `type`, `access`
16+
- `actions`: 操作列表(包含 `siid`, `aiid`, `name`
17+
18+
### 重要参数说明
19+
- **siid** (Service ID): 服务ID,标识设备的功能模块
20+
- **piid** (Property ID): 属性ID,标识具体属性
21+
- **aiid** (Action ID): 操作ID,标识具体动作
22+
23+
## 使用流程
24+
25+
### 场景1:控制设备(如开关灯)
26+
27+
正确的调用链:
28+
29+
```
30+
1. find_device_by_name(name="灯")
31+
32+
返回: {devices: [{did: "xxx", name: "客厅灯", model: "...", properties: [...], actions: [...]}]}
33+
34+
2. 从返回的设备信息中提取:
35+
- device_id = did (如 "xxx")
36+
- 从 properties 中找到开关属性(name 包含"开关"或"power")
37+
- 获取该属性的 siid 和 piid
38+
39+
3. control_device(device_id="xxx", siid=2, piid=1, value=true)
40+
```
41+
42+
### 场景2:获取设备状态
43+
44+
```
45+
1. find_device_by_name(name="插座")
46+
47+
返回设备信息(包含 properties)
48+
49+
2. 从 properties 中找到需要查询的属性,获取 siid 和 piid
50+
51+
3. get_device_status(device_id=did, siid=2, piid=1)
52+
```
53+
54+
### 场景3:调用设备动作
55+
56+
```
57+
1. find_device_by_name(name="扫地机")
58+
59+
返回设备信息(包含 actions)
60+
61+
2. 从 actions 中找到需要执行的动作(如"开始清扫"),获取 siid 和 aiid
62+
63+
3. call_device_action(device_id=did, siid=2, aiid=1)
64+
```
65+
66+
## 关键要点
67+
68+
### 1. 必须先获取设备信息
69+
**不要**凭空猜测 `device_id``siid``piid` 的值。必须先调用 `find_device_by_name``get_cached_devices` 获取准确的设备信息。
70+
71+
### 2. did 就是 device_id
72+
设备的 `did` 字段就是控制设备时需要的 `device_id` 参数。这是同一个值的不同名称。
73+
74+
### 3. 从缓存获取规格信息
75+
现在 `list_devices``find_device_by_name` 返回的设备信息中已经包含了 `properties``actions`,不需要再调用 `get_device_spec`
76+
77+
### 4. 如何找到正确的 siid/piid
78+
`properties` 列表中查找:
79+
- 开关类:找 `name` 包含"开关"、"电源"、"power"、"switch" 的属性
80+
- 亮度类:找 `name` 包含"亮度"、"brightness" 的属性
81+
- 温度类:找 `name` 包含"温度"、"temperature" 的属性
82+
83+
### 5. value 的类型
84+
根据 `property``type` 字段确定:
85+
- `bool`: 布尔值 `true``false`
86+
- `int`/`uint`: 整数
87+
- `float`: 浮点数
88+
- `string`: 字符串
89+
90+
## 常见错误
91+
92+
### ❌ 错误:直接使用设备名称作为 device_id
93+
```
94+
control_device(device_id="客厅灯", ...) // 错误!
95+
```
96+
97+
### ✅ 正确:使用 did 作为 device_id
98+
```
99+
control_device(device_id="123456789", ...) // 正确
100+
```
101+
102+
### ❌ 错误:猜测 siid/piid
103+
```
104+
control_device(..., siid=1, piid=1) // 可能错误!
105+
```
106+
107+
### ✅ 正确:从设备信息中获取
108+
```
109+
// 先从 find_device_by_name 获取 properties
110+
// 然后使用正确的 siid 和 piid
111+
control_device(..., siid=2, piid=1) // 正确
112+
```
113+
114+
## 示例对话
115+
116+
用户:"帮我打开客厅的灯"
117+
118+
AI 的思考过程:
119+
1. 用户想控制设备(开灯)
120+
2. 需要先找到"客厅灯"这个设备
121+
3. 调用 `find_device_by_name(name="客厅灯")`
122+
4. 从返回结果中获取 `did``properties`
123+
5.`properties` 中找到开关属性(`name` 包含"开关")
124+
6. 获取该属性的 `siid``piid`
125+
7. 调用 `control_device(device_id=did, siid=siid, piid=piid, value=true)`
126+
127+
## 相关 Entries
128+
129+
- `find_device_by_name`: 根据名称查找设备,返回完整设备信息
130+
- `get_cached_devices`: 获取所有缓存的设备
131+
- `control_device`: 控制设备属性(开关、亮度等)
132+
- `call_device_action`: 调用设备动作(开始清扫等)
133+
- `get_device_status`: 获取设备属性值
134+
- `list_devices`: 刷新并获取设备列表

0 commit comments

Comments
 (0)