mijiaAPI 2.0.1__tar.gz → 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mijiaapi-3.0.0/PKG-INFO +529 -0
- mijiaapi-3.0.0/README.md +508 -0
- mijiaapi-3.0.0/mijiaAPI/__init__.py +31 -0
- {mijiaapi-2.0.1 → mijiaapi-3.0.0}/mijiaAPI/__main__.py +75 -61
- mijiaapi-3.0.0/mijiaAPI/apis.py +768 -0
- mijiaapi-3.0.0/mijiaAPI/devices.py +361 -0
- mijiaapi-2.0.1/mijiaAPI/code.py → mijiaapi-3.0.0/mijiaAPI/errors.py +34 -7
- {mijiaapi-2.0.1 → mijiaapi-3.0.0}/mijiaAPI/logger.py +13 -9
- mijiaapi-3.0.0/mijiaAPI/miutils.py +81 -0
- mijiaapi-3.0.0/mijiaAPI/version.py +1 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/PKG-INFO +529 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/SOURCES.txt +17 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/dependency_links.txt +1 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/entry_points.txt +2 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/requires.txt +5 -0
- mijiaapi-3.0.0/mijiaAPI.egg-info/top_level.txt +1 -0
- mijiaapi-3.0.0/pyproject.toml +64 -0
- mijiaapi-3.0.0/setup.cfg +4 -0
- mijiaapi-2.0.1/PKG-INFO +0 -297
- mijiaapi-2.0.1/README.md +0 -272
- mijiaapi-2.0.1/mijiaAPI/__init__.py +0 -3
- mijiaapi-2.0.1/mijiaAPI/apis.py +0 -251
- mijiaapi-2.0.1/mijiaAPI/consts.py +0 -9
- mijiaapi-2.0.1/mijiaAPI/devices.py +0 -454
- mijiaapi-2.0.1/mijiaAPI/login.py +0 -291
- mijiaapi-2.0.1/mijiaAPI/utils.py +0 -42
- mijiaapi-2.0.1/pyproject.toml +0 -48
- {mijiaapi-2.0.1 → mijiaapi-3.0.0}/LICENSE +0 -0
mijiaapi-3.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mijiaAPI
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: A Python API for Xiaomi Mijia
|
|
5
|
+
Author-email: Do1e <dpj.email@qq.com>
|
|
6
|
+
License: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/Do1e/mijia-api
|
|
8
|
+
Project-URL: Repository, https://github.com/Do1e/mijia-api
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: <4.0,>=3.9
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: pillow>=11.3.0
|
|
16
|
+
Requires-Dist: pycryptodome>=3.23.0
|
|
17
|
+
Requires-Dist: qrcode>=8.2
|
|
18
|
+
Requires-Dist: requests>=2.32.5
|
|
19
|
+
Requires-Dist: tzlocal>=5.3.1
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
|
|
22
|
+
# mijiaAPI
|
|
23
|
+
|
|
24
|
+
小米米家设备的API,可以使用代码直接控制米家设备。
|
|
25
|
+
|
|
26
|
+
[](https://github.com/Do1e/mijia-api)
|
|
27
|
+
[](https://pypi.org/project/mijiaAPI/)
|
|
28
|
+
[](https://opensource.org/licenses/GPL-3.0)
|
|
29
|
+
|
|
30
|
+
## ⚠️ 重要提醒
|
|
31
|
+
|
|
32
|
+
**v1.5.0 和 v3.0.0包含多项破坏性变更!**
|
|
33
|
+
|
|
34
|
+
如果您正在从旧版本升级,请务必查看 [CHANGELOG.md](CHANGELOG.md) 以了解详细的变更内容和迁移指南。
|
|
35
|
+
|
|
36
|
+
常见问题见 [FAQ.md](FAQ.md)。
|
|
37
|
+
|
|
38
|
+
## 安装
|
|
39
|
+
|
|
40
|
+
### 从 PyPI 安装(推荐)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pip install mijiaAPI
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 从源码安装
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
git clone https://github.com/Do1e/mijia-api.git
|
|
50
|
+
cd mijia-api
|
|
51
|
+
pip install .
|
|
52
|
+
# Or `pip install -e .` for editable mode
|
|
53
|
+
# Or `uv sync` for uv users
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### aur
|
|
57
|
+
如果你使用 Arch Linux 或基于 Arch 的发行版,可以通过 AUR 安装:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
yay -S python-mijia-api
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 使用
|
|
64
|
+
|
|
65
|
+
### 登录
|
|
66
|
+
|
|
67
|
+
#### 扫码登录
|
|
68
|
+
|
|
69
|
+
首次使用需要通过二维码登录,认证数据将被保存以便后续使用:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from mijiaAPI import mijiaAPI
|
|
73
|
+
|
|
74
|
+
# 初始化API(认证文件默认保存在 ~/.config/mijia-api/auth.json)
|
|
75
|
+
api = mijiaAPI()
|
|
76
|
+
|
|
77
|
+
# 或指定自定义路径
|
|
78
|
+
# api = mijiaAPI(".mijia-api-data/auth.json")
|
|
79
|
+
|
|
80
|
+
# 登录(如果Token有效会自动跳过)
|
|
81
|
+
api.login() # 使用二维码登录
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
登录时会在终端打印二维码,使用米家APP扫描即可完成身份验证。
|
|
85
|
+
|
|
86
|
+
### API 基础使用
|
|
87
|
+
|
|
88
|
+
#### 1. 获取家庭和设备列表
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from mijiaAPI import mijiaAPI
|
|
92
|
+
|
|
93
|
+
api = mijiaAPI()
|
|
94
|
+
api.login()
|
|
95
|
+
|
|
96
|
+
# 获取所有家庭
|
|
97
|
+
homes = api.get_homes_list()
|
|
98
|
+
print(homes)
|
|
99
|
+
|
|
100
|
+
# 获取所有设备
|
|
101
|
+
devices = api.get_devices_list()
|
|
102
|
+
for device in devices:
|
|
103
|
+
print(f"设备名称: {device['name']}, Model: {device['model']}, Did: {device['did']}")
|
|
104
|
+
|
|
105
|
+
# 获取指定家庭的设备
|
|
106
|
+
home_id = homes[0]['id']
|
|
107
|
+
devices_in_home = api.get_devices_list(home_id=home_id)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### 2. 获取和设置设备属性
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
# 获取设备属性(原始 siid/piid 方式)
|
|
114
|
+
result = api.get_devices_prop({
|
|
115
|
+
"did": "device_did",
|
|
116
|
+
"siid": 2,
|
|
117
|
+
"piid": 2
|
|
118
|
+
})
|
|
119
|
+
print(f"属性值: {result['value']}")
|
|
120
|
+
|
|
121
|
+
# 设置设备属性
|
|
122
|
+
result = api.set_devices_prop({
|
|
123
|
+
"did": "device_did",
|
|
124
|
+
"siid": 2,
|
|
125
|
+
"piid": 2,
|
|
126
|
+
"value": 50
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
# 支持批量操作
|
|
130
|
+
result = api.get_devices_prop([
|
|
131
|
+
{"did": "device_did1", "siid": 2, "piid": 2},
|
|
132
|
+
{"did": "device_did2", "siid": 2, "piid": 2},
|
|
133
|
+
])
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
#### 3. 执行设备动作
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
# 执行设备动作(如开关灯的切换动作)
|
|
140
|
+
result = api.run_action({
|
|
141
|
+
"did": "device_did",
|
|
142
|
+
"siid": 2,
|
|
143
|
+
"aiid": 1
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### 4. 场景控制
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
# 获取场景列表
|
|
151
|
+
scenes = api.get_scenes_list()
|
|
152
|
+
|
|
153
|
+
# 执行场景
|
|
154
|
+
result = api.run_scene(scene_id="scene_id", home_id="home_id")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### 5. 耗材管理
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
# 获取耗材列表(如滤芯、灯泡等)
|
|
161
|
+
consumables = api.get_consumable_items()
|
|
162
|
+
|
|
163
|
+
# 获取指定家庭的耗材
|
|
164
|
+
consumables_in_home = api.get_consumable_items(home_id=home_id)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### 6. 统计数据
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
# 获取设备统计数据(如耗电量)
|
|
171
|
+
import time
|
|
172
|
+
|
|
173
|
+
result = api.get_statistics({
|
|
174
|
+
"did": "device_did",
|
|
175
|
+
"key": "7.1", # siid.piid
|
|
176
|
+
"data_type": "stat_month_v3", # 统计类型:stat_hour_v3, stat_day_v3, stat_week_v3, stat_month_v3
|
|
177
|
+
"limit": 6, # 返回的最大条目数
|
|
178
|
+
"time_start": int(time.time() - 30*24*3600),
|
|
179
|
+
"time_end": int(time.time()),
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
for item in result:
|
|
183
|
+
print(f"时间: {item['time']}, 数值: {item['value']}")
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 设备信息获取
|
|
187
|
+
|
|
188
|
+
使用 `get_device_info()` 函数可从[米家规格平台](https://home.miot-spec.com/)在线获取设备属性和动作信息:
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from mijiaAPI import get_device_info
|
|
192
|
+
|
|
193
|
+
# 获取设备规格信息
|
|
194
|
+
device_info = get_device_info('yeelink.light.lamp4') # 米家台灯 1S 的 model
|
|
195
|
+
|
|
196
|
+
# 查看设备支持的属性和动作
|
|
197
|
+
print(device_info)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 高级使用:mijiaDevice 类
|
|
201
|
+
|
|
202
|
+
`mijiaDevice` 类提供了一个高级封装,让您可以像操作普通对象一样控制设备,而无需关心 siid/piid 的细节:
|
|
203
|
+
|
|
204
|
+
#### 初始化设备
|
|
205
|
+
|
|
206
|
+
```python
|
|
207
|
+
from mijiaAPI import mijiaAPI, mijiaDevice
|
|
208
|
+
|
|
209
|
+
api = mijiaAPI(".mijia-api-data/auth.json")
|
|
210
|
+
api.login()
|
|
211
|
+
|
|
212
|
+
# 通过设备ID初始化
|
|
213
|
+
device = mijiaDevice(api, did="device_did")
|
|
214
|
+
|
|
215
|
+
# 或通过设备名称初始化(推荐,更人性化)
|
|
216
|
+
device = mijiaDevice(api, dev_name="我的台灯")
|
|
217
|
+
|
|
218
|
+
# 打印设备信息
|
|
219
|
+
print(device)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### 获取和设置属性
|
|
223
|
+
|
|
224
|
+
```python
|
|
225
|
+
# 获取属性值
|
|
226
|
+
brightness = device.get('brightness')
|
|
227
|
+
print(f"当前亮度: {brightness}%")
|
|
228
|
+
|
|
229
|
+
# 设置属性值
|
|
230
|
+
device.set('brightness', 60) # 设置亮度为60%
|
|
231
|
+
device.set('on', True) # 打开设备
|
|
232
|
+
device.set('color-temperature', 5000) # 设置色温
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
也可以直接使用属性值赋值的方式,包含"-"的属性名请使用下划线"_"替代:
|
|
236
|
+
|
|
237
|
+
```python
|
|
238
|
+
print(f"当前亮度: {device.brightness}%")
|
|
239
|
+
device.brightness = 60 # 设置亮度为60%
|
|
240
|
+
device.on = True # 打开设备
|
|
241
|
+
device.color_temperature = 5000 # 设置色温
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### 执行设备动作
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
# 执行动作(如切换开关)
|
|
248
|
+
device.run_action('toggle')
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### 查看设备属性和动作列表
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
# 查看所有支持的属性
|
|
255
|
+
for prop_name, prop_obj in device.prop_list.items():
|
|
256
|
+
print(f"属性: {prop_name} ({prop_obj.desc})")
|
|
257
|
+
print(f" 类型: {prop_obj.type}, 读写: {prop_obj.rw}, 单位: {prop_obj.unit}")
|
|
258
|
+
|
|
259
|
+
# 查看所有支持的动作
|
|
260
|
+
for action_name, action_obj in device.action_list.items():
|
|
261
|
+
print(f"动作: {action_name} ({action_obj.desc})")
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
### 异常处理
|
|
266
|
+
|
|
267
|
+
在使用过程中可能遇到各种异常,以下是常见的异常类型及处理方式:
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
from mijiaAPI import (
|
|
271
|
+
mijiaAPI,
|
|
272
|
+
mijiaDevice,
|
|
273
|
+
LoginError,
|
|
274
|
+
DeviceNotFoundError,
|
|
275
|
+
DeviceGetError,
|
|
276
|
+
DeviceSetError,
|
|
277
|
+
DeviceActionError,
|
|
278
|
+
APIError,
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
api = mijiaAPI()
|
|
282
|
+
|
|
283
|
+
try:
|
|
284
|
+
# 登录异常
|
|
285
|
+
api.login()
|
|
286
|
+
except LoginError as e:
|
|
287
|
+
print(f"登录失败: {e}")
|
|
288
|
+
exit(1)
|
|
289
|
+
|
|
290
|
+
try:
|
|
291
|
+
# 设备不存在异常
|
|
292
|
+
device = mijiaDevice(api, dev_name="不存在的设备")
|
|
293
|
+
except DeviceNotFoundError as e:
|
|
294
|
+
print(f"设备未找到: {e}")
|
|
295
|
+
except MultipleDevicesFoundError as e:
|
|
296
|
+
print(f"找到多个匹配的设备: {e}")
|
|
297
|
+
except Exception as e:
|
|
298
|
+
print(f"其他异常: {e}")
|
|
299
|
+
|
|
300
|
+
try:
|
|
301
|
+
# 获取属性异常
|
|
302
|
+
device = mijiaDevice(api, dev_name="我的台灯")
|
|
303
|
+
brightness = device.get('brightness')
|
|
304
|
+
except DeviceGetError as e:
|
|
305
|
+
print(f"获取属性失败: {e}")
|
|
306
|
+
except ValueError as e:
|
|
307
|
+
print(f"属性名称不支持: {e}")
|
|
308
|
+
|
|
309
|
+
try:
|
|
310
|
+
# 设置属性异常
|
|
311
|
+
device.set('brightness', 150) # 超出范围
|
|
312
|
+
except DeviceSetError as e:
|
|
313
|
+
print(f"设置属性失败: {e}")
|
|
314
|
+
except ValueError as e:
|
|
315
|
+
print(f"属性值无效: {e}")
|
|
316
|
+
|
|
317
|
+
try:
|
|
318
|
+
# 执行动作异常
|
|
319
|
+
device.run_action('invalid_action')
|
|
320
|
+
except DeviceActionError as e:
|
|
321
|
+
print(f"执行动作失败: {e}")
|
|
322
|
+
except ValueError as e:
|
|
323
|
+
print(f"动作不支持: {e}")
|
|
324
|
+
|
|
325
|
+
try:
|
|
326
|
+
# API通用异常
|
|
327
|
+
devices = api.get_devices_list()
|
|
328
|
+
except APIError as e:
|
|
329
|
+
print(f"API调用失败: {e}")
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Mijia API CLI
|
|
333
|
+
|
|
334
|
+
`mijiaAPI` 提供了命令行工具,可以直接在终端中控制米家设备,无需编写Python代码。
|
|
335
|
+
|
|
336
|
+
#### 主命令帮助
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
mijiaAPI --help
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
完整的命令行参数说明:
|
|
343
|
+
|
|
344
|
+
```
|
|
345
|
+
usage: mijiaAPI [-h] [-p AUTH_PATH] [--list_homes] [-l] [--list_scenes]
|
|
346
|
+
[--list_consumable_items] [--run_scene SCENE_ID/SCENE_NAME ...]
|
|
347
|
+
[--get_device_info DEVICE_MODEL] [--run PROMPT]
|
|
348
|
+
[--wifispeaker_name WIFISPEAKER_NAME] [--quiet]
|
|
349
|
+
{get,set} ...
|
|
350
|
+
|
|
351
|
+
positional arguments:
|
|
352
|
+
{get,set} 获取或设置设备属性
|
|
353
|
+
|
|
354
|
+
optional arguments:
|
|
355
|
+
-h, --help 显示此帮助信息
|
|
356
|
+
-p, --auth_path AUTH_PATH
|
|
357
|
+
认证文件保存路径(默认:~/.config/mijia-api/auth.json)
|
|
358
|
+
--list_homes 列出所有家庭
|
|
359
|
+
-l, --list_devices 列出所有米家设备
|
|
360
|
+
--list_scenes 列出所有场景
|
|
361
|
+
--list_consumable_items 列出所有耗材
|
|
362
|
+
--run_scene SCENE_ID/SCENE_NAME [SCENE_ID/SCENE_NAME ...]
|
|
363
|
+
执行场景,可指定场景ID或名称
|
|
364
|
+
--get_device_info DEVICE_MODEL
|
|
365
|
+
获取设备规格信息(指定设备model)
|
|
366
|
+
--run PROMPT 使用自然语言描述需求(需要小爱音箱)
|
|
367
|
+
--wifispeaker_name WIFISPEAKER_NAME
|
|
368
|
+
指定小爱音箱名称(默认为第一个小爱音箱)
|
|
369
|
+
--quiet 小爱音箱静默执行
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### 获取设备属性
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# 查看帮助
|
|
376
|
+
mijiaAPI get --help
|
|
377
|
+
|
|
378
|
+
# 获取设备属性
|
|
379
|
+
mijiaAPI get --dev_name "卧室台灯" --prop_name "brightness"
|
|
380
|
+
|
|
381
|
+
# 指定认证文件路径
|
|
382
|
+
mijiaAPI -p /path/to/auth.json get --dev_name "卧室台灯" --prop_name "on"
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
#### 设置设备属性
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
# 查看帮助
|
|
389
|
+
mijiaAPI set --help
|
|
390
|
+
|
|
391
|
+
# 设置设备属性
|
|
392
|
+
mijiaAPI set --dev_name "卧室台灯" --prop_name "brightness" --value 60
|
|
393
|
+
|
|
394
|
+
# 打开设备
|
|
395
|
+
mijiaAPI set --dev_name "卧室台灯" --prop_name "on" --value True
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### 常用命令示例
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# 列出所有设备(首先需要这个来获取设备名称)
|
|
402
|
+
mijiaAPI -l
|
|
403
|
+
|
|
404
|
+
# 列出所有家庭
|
|
405
|
+
mijiaAPI --list_homes
|
|
406
|
+
|
|
407
|
+
# 列出所有场景
|
|
408
|
+
mijiaAPI --list_scenes
|
|
409
|
+
|
|
410
|
+
# 执行场景
|
|
411
|
+
mijiaAPI --run_scene "睡眠模式" "晚安"
|
|
412
|
+
|
|
413
|
+
# 获取设备规格信息
|
|
414
|
+
mijiaAPI --get_device_info yeelink.light.lamp4
|
|
415
|
+
|
|
416
|
+
# 列出耗材
|
|
417
|
+
mijiaAPI --list_consumable_items
|
|
418
|
+
|
|
419
|
+
# 使用小爱音箱执行自然语言命令
|
|
420
|
+
mijiaAPI --run "打开卧室台灯"
|
|
421
|
+
mijiaAPI --run "把亮度调到50%" --wifispeaker_name "卧室小爱"
|
|
422
|
+
mijiaAPI --run "关闭所有灯" --quiet
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
#### 直接使用 uvx(无需安装)
|
|
426
|
+
|
|
427
|
+
如果安装了 `uv` 工具,可以直接使用 `uvx` 运行,无需提前安装 `mijiaAPI`:
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
uvx mijiaAPI --help
|
|
431
|
+
uvx mijiaAPI -l
|
|
432
|
+
uvx mijiaAPI get --dev_name "台灯" --prop_name "brightness"
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### 最佳实践
|
|
436
|
+
|
|
437
|
+
#### 设置 sleep_time 参数
|
|
438
|
+
|
|
439
|
+
在使用 `mijiaDevice` 时,可以设置 `sleep_time` 参数来控制获取属性值时的等待时间。某些设备可能响应较慢,增加此参数可以获取更准确的值:
|
|
440
|
+
|
|
441
|
+
```python
|
|
442
|
+
# 默认 sleep_time 为 0.5 秒
|
|
443
|
+
device = mijiaDevice(api, dev_name="我的设备", sleep_time=1.0)
|
|
444
|
+
|
|
445
|
+
# 获取属性时会自动等待指定的时间
|
|
446
|
+
value = device.get('brightness')
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
#### 查询设备规格信息
|
|
450
|
+
|
|
451
|
+
在使用 API 之前,您可以通过以下方式查询设备支持的属性和动作:
|
|
452
|
+
|
|
453
|
+
```python
|
|
454
|
+
from mijiaAPI import get_device_info
|
|
455
|
+
|
|
456
|
+
# 从米家规格平台获取设备信息
|
|
457
|
+
device_info = get_device_info('yeelink.light.lamp4')
|
|
458
|
+
|
|
459
|
+
# 查看原始信息
|
|
460
|
+
import json
|
|
461
|
+
print(json.dumps(device_info, ensure_ascii=False, indent=2))
|
|
462
|
+
|
|
463
|
+
# 或者使用 mijiaDevice 类查看
|
|
464
|
+
device = mijiaDevice(api, dev_name="我的台灯")
|
|
465
|
+
print(device) # 会列出所有支持的属性和动作
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
#### 使用正确的认证文件路径
|
|
469
|
+
|
|
470
|
+
认证文件默认保存在用户主目录 `~/.config/mijia-api/auth.json`,您也可以自定义路径:
|
|
471
|
+
|
|
472
|
+
```python
|
|
473
|
+
from pathlib import Path
|
|
474
|
+
|
|
475
|
+
# 默认方式(推荐,认证文件保存在 ~/.config/mijia-api/auth.json)
|
|
476
|
+
api = mijiaAPI()
|
|
477
|
+
|
|
478
|
+
# 方案1:保存在项目目录
|
|
479
|
+
auth_path = Path(__file__).parent / ".mijia-api" / "auth.json"
|
|
480
|
+
api = mijiaAPI(str(auth_path))
|
|
481
|
+
|
|
482
|
+
# 方案2:直接传入目录,自动创建 auth.json
|
|
483
|
+
api = mijiaAPI(".mijia-api-data")
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
#### 批量操作性能优化
|
|
487
|
+
|
|
488
|
+
对多个设备进行操作时,建议使用批量操作而不是逐个操作:
|
|
489
|
+
|
|
490
|
+
```python
|
|
491
|
+
# 低效方式:逐个获取
|
|
492
|
+
for device_id in device_ids:
|
|
493
|
+
result = api.get_devices_prop({"did": device_id, "siid": 2, "piid": 2})
|
|
494
|
+
|
|
495
|
+
# 高效方式:批量获取
|
|
496
|
+
props_list = [{"did": device_id, "siid": 2, "piid": 2} for device_id in device_ids]
|
|
497
|
+
results = api.get_devices_prop(props_list)
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
#### 查看debug日志
|
|
501
|
+
|
|
502
|
+
如果遇到问题,可以启用 debug 日志来了解详细的API调用过程:
|
|
503
|
+
|
|
504
|
+
```python
|
|
505
|
+
import logging
|
|
506
|
+
|
|
507
|
+
# 启用 debug 日志
|
|
508
|
+
logging.getLogger("mijiaAPI").setLevel(logging.DEBUG)
|
|
509
|
+
|
|
510
|
+
# 现在所有 API 调用都会打印详细的日志
|
|
511
|
+
api = mijiaAPI()
|
|
512
|
+
api.login()
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
## 致谢
|
|
516
|
+
|
|
517
|
+
* [janzlan/mijia-api](https://gitee.com/janzlan/mijia-api/tree/master)
|
|
518
|
+
* [米家 APP 网络请求的抓包、加解密与构造的代码笔记](https://imkero.net/posts/mihome-app-api/)
|
|
519
|
+
* [al-one/hass-xiaomi-miot](https://github.com/al-one/hass-xiaomi-miot)
|
|
520
|
+
|
|
521
|
+
## 开源许可
|
|
522
|
+
|
|
523
|
+
本项目采用 [GPL-3.0](LICENSE) 开源许可证。
|
|
524
|
+
|
|
525
|
+
## 免责声明
|
|
526
|
+
|
|
527
|
+
* 本项目仅供学习交流使用,不得用于商业用途,如有侵权请联系删除
|
|
528
|
+
* 用户使用本项目所产生的任何后果,需自行承担风险
|
|
529
|
+
* 开发者不对使用本项目产生的任何直接或间接损失负责
|