mijiaAPI 1.4.4__tar.gz → 1.5.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mijiaAPI
3
- Version: 1.4.4
3
+ Version: 1.5.0
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  License: GPLv3
6
6
  Author: Do1e
@@ -53,6 +53,13 @@ pip install .
53
53
  poetry install
54
54
  ```
55
55
 
56
+ ### aur
57
+ 如果你使用 Arch Linux 或基于 Arch 的发行版,可以通过 AUR 安装:
58
+
59
+ ```bash
60
+ yay -S python-mijia-api
61
+ ```
62
+
56
63
  ## 使用
57
64
 
58
65
  使用实例可以参考 `demos` 文件夹下的示例代码,以下是基本使用说明。
@@ -115,12 +122,12 @@ device_info = get_device_info('yeelink.light.lamp4') # 米家台灯 1S 的 mode
115
122
 
116
123
  ### 设备控制封装
117
124
 
118
- `mijiaDevices`:基于 `mijiaAPI` 的高级封装,提供更简便的设备控制方式。
125
+ `mijiaDevice`:基于 `mijiaAPI` 的高级封装,提供更简便的设备控制方式。
119
126
 
120
127
  #### 初始化:
121
128
 
122
129
  ```python
123
- mijiaDevices(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: str = None, sleep_time: float = 0.5)
130
+ mijiaDevice(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: str = None, sleep_time: float = 0.5)
124
131
  ```
125
132
 
126
133
  * `api`:已初始化的 `mijiaAPI` 对象
@@ -148,7 +155,7 @@ mijiaDevices(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: st
148
155
 
149
156
  ```python
150
157
  # 示例:控制台灯
151
- device = mijiaDevices(api, dev_name='台灯')
158
+ device = mijiaDevice(api, dev_name='台灯')
152
159
  device.on = True # 打开灯
153
160
  device.brightness = 60 # 设置亮度
154
161
  current_temp = device.color_temperature # 获取色温
@@ -29,6 +29,13 @@ pip install .
29
29
  poetry install
30
30
  ```
31
31
 
32
+ ### aur
33
+ 如果你使用 Arch Linux 或基于 Arch 的发行版,可以通过 AUR 安装:
34
+
35
+ ```bash
36
+ yay -S python-mijia-api
37
+ ```
38
+
32
39
  ## 使用
33
40
 
34
41
  使用实例可以参考 `demos` 文件夹下的示例代码,以下是基本使用说明。
@@ -91,12 +98,12 @@ device_info = get_device_info('yeelink.light.lamp4') # 米家台灯 1S 的 mode
91
98
 
92
99
  ### 设备控制封装
93
100
 
94
- `mijiaDevices`:基于 `mijiaAPI` 的高级封装,提供更简便的设备控制方式。
101
+ `mijiaDevice`:基于 `mijiaAPI` 的高级封装,提供更简便的设备控制方式。
95
102
 
96
103
  #### 初始化:
97
104
 
98
105
  ```python
99
- mijiaDevices(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: str = None, sleep_time: float = 0.5)
106
+ mijiaDevice(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: str = None, sleep_time: float = 0.5)
100
107
  ```
101
108
 
102
109
  * `api`:已初始化的 `mijiaAPI` 对象
@@ -124,7 +131,7 @@ mijiaDevices(api: mijiaAPI, dev_info: dict = None, dev_name: str = None, did: st
124
131
 
125
132
  ```python
126
133
  # 示例:控制台灯
127
- device = mijiaDevices(api, dev_name='台灯')
134
+ device = mijiaDevice(api, dev_name='台灯')
128
135
  device.on = True # 打开灯
129
136
  device.brightness = 60 # 设置亮度
130
137
  current_temp = device.color_temperature # 获取色温
@@ -0,0 +1,3 @@
1
+ from .login import mijiaLogin
2
+ from .apis import mijiaAPI
3
+ from .devices import mijiaDevice, mijiaDevices, get_device_info
@@ -6,7 +6,7 @@ import sys
6
6
  import time
7
7
 
8
8
  from .apis import mijiaAPI
9
- from .devices import mijiaDevices, get_device_info
9
+ from .devices import mijiaDevice, get_device_info
10
10
  from .login import mijiaLogin
11
11
 
12
12
  def parse_args(args):
@@ -253,14 +253,14 @@ def run_scene(api: mijiaAPI, scene_id: str, scene_mapping: Optional[dict] = None
253
253
 
254
254
  def get(args):
255
255
  api = init_api(args.auth_path)
256
- device = mijiaDevices(api, dev_name=args.dev_name)
256
+ device = mijiaDevice(api, dev_name=args.dev_name)
257
257
  value = device.get(args.prop_name)
258
258
  unit = device.prop_list[args.prop_name].unit
259
259
  print(f"The {args.prop_name} of {args.dev_name} is {value} {unit if unit else ''}")
260
260
 
261
261
  def set(args):
262
262
  api = init_api(args.auth_path)
263
- device = mijiaDevices(api, dev_name=args.dev_name)
263
+ device = mijiaDevice(api, dev_name=args.dev_name)
264
264
  ret = device.set_v2(args.prop_name, args.value)
265
265
  unit = device.prop_list[args.prop_name].unit
266
266
  if ret:
@@ -307,12 +307,12 @@ def main(args):
307
307
  wifispeaker = None
308
308
  for device in device_mapping.values():
309
309
  if 'xiaomi.wifispeaker' in device['model']:
310
- wifispeaker = mijiaDevices(api, dev_name=device['name'])
310
+ wifispeaker = mijiaDevice(api, dev_name=device['name'])
311
311
  break
312
312
  if wifispeaker is None:
313
313
  raise ValueError("No wifispeaker found")
314
314
  else:
315
- wifispeaker = mijiaDevices(api, dev_name=args.wifispeaker_name)
315
+ wifispeaker = mijiaDevice(api, dev_name=args.wifispeaker_name)
316
316
  wifispeaker.run_action('execute-text-directive', _in=[args.run, args.quiet])
317
317
  if hasattr(args, 'func') and args.func is not None:
318
318
  if args.func == 'get':
@@ -74,7 +74,7 @@ class DevAction(object):
74
74
  return f' {self.name}: {self.desc}'
75
75
 
76
76
 
77
- class mijiaDevices(object):
77
+ class mijiaDevice(object):
78
78
  def __init__(
79
79
  self,
80
80
  api: mijiaAPI,
@@ -376,9 +376,44 @@ class mijiaDevices(object):
376
376
  return result['code'] == 0
377
377
 
378
378
 
379
+ class mijiaDevices(mijiaDevice):
380
+ def __init__(
381
+ self,
382
+ api: mijiaAPI,
383
+ dev_info: Optional[dict] = None,
384
+ dev_name: Optional[str] = None,
385
+ did: Optional[str] = None,
386
+ sleep_time: Optional[Union[int, float]] = 0.5
387
+ ):
388
+ """
389
+ 初始化设备对象。
390
+
391
+ 如果未提供设备信息,则根据设备名称获取设备信息。如果两者均未提供,则抛出异常。
392
+ 如果同时提供了设备信息和设备名称,则以设备信息为准。
393
+
394
+ Args:
395
+ api (mijiaAPI): 米家API对象。
396
+ dev_info (dict, optional): 设备信息字典,从get_device_info获取。默认为None。
397
+ dev_name (str, optional): 设备名称,从get_devices_list获取。默认为None。
398
+ did (str, optional): 设备ID,如未指定,则需要在调用get/set时指定。默认为None。
399
+ sleep_time ([int, float], optional): 调用设备属性的间隔时间。默认为0.5秒。
400
+
401
+ Raises:
402
+ RuntimeError: 如果dev_info和dev_name都未提供。
403
+ ValueError: 如果找不到指定设备或找到多个同名设备。
404
+
405
+ Note:
406
+ - 如果同时提供了dev_info和dev_name,则以dev_info为准。
407
+ - 如果只提供了dev_name,则根据名称自动获取设备信息。
408
+ - 如果只提供了dev_info,则直接使用该信息。
409
+ """
410
+ super().__init__(api, dev_info, dev_name, did, sleep_time)
411
+ logger.warning("`mijiaDevices` will be deprecated in future versions, use `mijiaDevice` instead.")
412
+
413
+
379
414
  def get_device_info(device_model: str, cache_path: Optional[str] = os.path.join(os.path.expanduser("~"), ".config/mijia-api")) -> dict:
380
415
  """
381
- 获取设备信息,用于初始化mijiaDevices对象。
416
+ 获取设备信息,用于初始化mijiaDevice对象。
382
417
 
383
418
  Args:
384
419
  device_model (str): 设备型号,从get_devices_list获取。
@@ -74,7 +74,7 @@ class mijiaLogin(object):
74
74
  })
75
75
  return data
76
76
 
77
- def _get_account(self, user_id: str) -> dict[str, str]:
77
+ def _get_account_info(self, user_id: str) -> dict[str, str]:
78
78
  """
79
79
  获取账户信息。
80
80
 
@@ -87,14 +87,13 @@ class mijiaLogin(object):
87
87
  Raises:
88
88
  LoginError: 获取账户信息失败时抛出。
89
89
  """
90
- ret = self.session.get(accountURL + str(user_id))
91
- if ret.status_code != 200:
92
- raise LoginError(ret.status_code, f'Failed to get account page, {ret.text}')
93
- ret_data = json.loads(ret.text[11:])['data']
94
- data = {
95
- k: v for k, v in ret_data.items()
96
- if k in ['account', 'gender', 'nickName', 'icon']
97
- }
90
+ try:
91
+ ret = self.session.get(accountURL + str(user_id))
92
+ if ret.status_code != 200:
93
+ raise LoginError(ret.status_code, f'Failed to get account page, {ret.text}')
94
+ data = json.loads(ret.text[11:])['data']
95
+ except (KeyError, json.JSONDecodeError) as e:
96
+ data = {}
98
97
  return data
99
98
 
100
99
  @staticmethod
@@ -190,7 +189,7 @@ class mijiaLogin(object):
190
189
  'deviceId': data['deviceId'],
191
190
  'serviceToken': cookies['serviceToken'],
192
191
  'expireTime': self._extract_latest_gmt_datetime(cookies).strftime('%Y-%m-%d %H:%M:%S'),
193
- **self._get_account(ret_data['userId'])
192
+ 'account_info': self._get_account_info(ret_data['userId'])
194
193
  }
195
194
 
196
195
  self._save_auth()
@@ -275,7 +274,7 @@ class mijiaLogin(object):
275
274
  'deviceId': data['deviceId'],
276
275
  'serviceToken': cookies['serviceToken'],
277
276
  'expireTime': self._extract_latest_gmt_datetime(cookies).strftime('%Y-%m-%d %H:%M:%S'),
278
- **self._get_account(ret_data['userId'])
277
+ 'account_info': self._get_account_info(ret_data['userId'])
279
278
  }
280
279
 
281
280
  self._save_auth()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mijiaAPI"
3
- version = "1.4.4"
3
+ version = "1.5.0"
4
4
  description = "A Python API for Xiaomi Mijia"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9,<4.0"
@@ -15,7 +15,7 @@ mijiaAPI = "mijiaAPI.__main__:cli"
15
15
 
16
16
  [tool.poetry]
17
17
  name = "mijiaAPI"
18
- version = "1.4.4"
18
+ version = "1.5.0"
19
19
  description = "A Python API for Xiaomi Mijia"
20
20
  authors = ["Do1e <dpj.email@qq.com>"]
21
21
  license = "GPLv3"
@@ -1,3 +0,0 @@
1
- from .login import mijiaLogin
2
- from .apis import mijiaAPI
3
- from .devices import mijiaDevices, get_device_info
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes