mijiaAPI 1.1.1__tar.gz → 1.2.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.
Files changed (30) hide show
  1. {mijiaapi-1.1.1/mijiaAPI.egg-info → mijiaapi-1.2.0}/PKG-INFO +3 -2
  2. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/README.md +2 -1
  3. mijiaapi-1.2.0/demos/test_devices_v2_light.py +43 -0
  4. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/__version__.py +1 -1
  5. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/devices.py +34 -4
  6. {mijiaapi-1.1.1 → mijiaapi-1.2.0/mijiaAPI.egg-info}/PKG-INFO +3 -2
  7. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI.egg-info/SOURCES.txt +1 -0
  8. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/.gitignore +0 -0
  9. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/.vscode/launch.json +0 -0
  10. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/LICENSE +0 -0
  11. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/dev_info_example/miaomiaoce.sensor_ht.t1.json +0 -0
  12. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/dev_info_example/yeelink.light.lamp4.json +0 -0
  13. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_QRlogin.py +0 -0
  14. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_apis.py +0 -0
  15. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_available.py +0 -0
  16. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_devices_airconditioner.py +0 -0
  17. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_devices_light.py +0 -0
  18. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_devices_sensor.py +0 -0
  19. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/demos/test_login.py +0 -0
  20. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/__init__.py +0 -0
  21. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/apis.py +0 -0
  22. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/login.py +0 -0
  23. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/urls.py +0 -0
  24. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI/utils.py +0 -0
  25. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI.egg-info/dependency_links.txt +0 -0
  26. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI.egg-info/requires.txt +0 -0
  27. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/mijiaAPI.egg-info/top_level.txt +0 -0
  28. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/requirements.txt +0 -0
  29. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/setup.cfg +0 -0
  30. {mijiaapi-1.1.1 → mijiaapi-1.2.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mijiaAPI
3
- Version: 1.1.1
3
+ Version: 1.2.0
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  Home-page: https://github.com/Do1e/mijia-api
6
6
  Author: Do1e
@@ -50,9 +50,10 @@ pip install mijiaAPI
50
50
 
51
51
 
52
52
  * `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
53
- * `__init__(api: mijiaAPI, dev_info: dict, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考`demos/dev_info_example`,`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
53
+ * `__init__(api: mijiaAPI, dev_info: dict. did: str = None, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考[demos/dev_info_example](demos/dev_info_example),`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
54
54
  * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
55
55
  * `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
56
+ * v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
56
57
  * **欢迎大家把自己编写的设备属性字典分享到Issues中,方便大家使用**
57
58
 
58
59
  ## 致谢
@@ -34,9 +34,10 @@ pip install mijiaAPI
34
34
 
35
35
 
36
36
  * `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
37
- * `__init__(api: mijiaAPI, dev_info: dict, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考`demos/dev_info_example`,`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
37
+ * `__init__(api: mijiaAPI, dev_info: dict. did: str = None, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考[demos/dev_info_example](demos/dev_info_example),`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
38
38
  * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
39
39
  * `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
40
+ * v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
40
41
  * **欢迎大家把自己编写的设备属性字典分享到Issues中,方便大家使用**
41
42
 
42
43
  ## 致谢
@@ -0,0 +1,43 @@
1
+ import json
2
+ import sys
3
+ sys.path.extend(['.', '..'])
4
+ from mijiaAPI import mijiaDevices, mijiaAPI
5
+
6
+ with open('jsons/auth.json') as f:
7
+ auth = json.load(f)
8
+ api = mijiaAPI(auth)
9
+
10
+ with open('demos/dev_info_example/yeelink.light.lamp4.json', encoding='utf-8') as f:
11
+ dev_info = json.load(f)
12
+ with open('jsons/devices.json') as f:
13
+ devices = json.load(f)
14
+ did = devices[0]['did']
15
+ # sleep_time is optional, default is 0.5
16
+ # get after set shuold be delayed for a while, or the result may be incorrect
17
+ device = mijiaDevices(api, dev_info, did=did, sleep_time=2)
18
+ print(device)
19
+ print('---------------------')
20
+ print(device.on)
21
+ device.on = True
22
+ print('---------------------')
23
+ print(f"{device.brightness} {device.prop_list['brightness'].unit}")
24
+ device.brightness = 60
25
+ print(f"{device.brightness} {device.prop_list['brightness'].unit}")
26
+ print('---------------------')
27
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
28
+ device.color_temperature = 5000
29
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
30
+ print('---------------------')
31
+ device.mode = 0
32
+ print('---------------------')
33
+ print(f"{device.brightness} {device.prop_list['brightness'].unit}")
34
+ device.brightness_delta = -10
35
+ print(f"{device.brightness} {device.prop_list['brightness'].unit}")
36
+ print('---------------------')
37
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
38
+ device.ct_delta = -10
39
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
40
+ device.ct_adjust_alexa_increase = 1
41
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
42
+ device.ct_adjust_alexa_decrease = 2
43
+ print(f"{device.color_temperature} {device.prop_list['color-temperature'].unit}")
@@ -1,5 +1,5 @@
1
1
  __title__ = "mijiaAPI"
2
- __version__ = "1.1.1"
2
+ __version__ = "1.2.0"
3
3
  __description__ = "A Python API for Xiaomi Mijia"
4
4
  __url__ = "https://github.com/Do1e/mijia-api"
5
5
  __author__ = "Do1e"
@@ -1,4 +1,4 @@
1
- from typing import Union
1
+ from typing import Union, Optional
2
2
  from time import sleep
3
3
  from .apis import mijiaAPI
4
4
 
@@ -19,16 +19,21 @@ class DevProp(object):
19
19
  f' valuetype: {self.type}, rw: {self.rw}, unit: {self.unit}, range: {self.range}'
20
20
 
21
21
  class mijiaDevices(object):
22
- def __init__(self, api: mijiaAPI, dev_info: dict, sleep_time: float = 0.5):
22
+ def __init__(self, api: mijiaAPI, dev_info: dict,
23
+ did: Optional[str] = None,
24
+ sleep_time: Optional[Union[int, float]] = 0.5):
23
25
  self.api = api
24
26
  self.name = dev_info['name']
25
27
  self.model = dev_info['model']
26
28
  self.prop_list = {prop['name']: DevProp(prop) for prop in dev_info['properties']}
29
+ self.prop_list.update({prop['name'].replace('-', '_'): DevProp(prop) for prop in dev_info['properties'] if '-' in prop['name']})
30
+ self.did = did
27
31
  self.sleep_time = sleep_time
28
32
 
29
33
  def __str__(self):
34
+ prop_list = [str(v) for k, v in self.prop_list.items() if '_' not in k]
30
35
  return f'{self.name} ({self.model})\n' \
31
- f'Properties:\n' + '\n'.join([str(v) for v in self.prop_list.values()])
36
+ f'Properties:\n' + '\n'.join(prop_list)
32
37
 
33
38
  def set(self, name: str, did: str, value: Union[bool, int]) -> Union[bool, int]:
34
39
  if name not in self.prop_list:
@@ -67,7 +72,19 @@ class mijiaDevices(object):
67
72
  sleep(self.sleep_time)
68
73
  return ret
69
74
 
70
- def get(self, name: str, did: str) -> Union[bool, int]:
75
+ def set_v2(self, name: str, value: Union[bool, int], did: Optional[str] = None) -> Union[bool, int]:
76
+ if did is not None:
77
+ return self.set(name, did, value)
78
+ elif self.did is not None:
79
+ return self.set(name, self.did, value)
80
+ else:
81
+ raise ValueError('Please specify the did')
82
+
83
+ def get(self, name: str, did: Optional[str] = None) -> Union[bool, int]:
84
+ if did is None:
85
+ did = self.did
86
+ if did is None:
87
+ raise ValueError('Please specify the did')
71
88
  if name not in self.prop_list:
72
89
  raise ValueError(f'Unsupported property: {name}, available properties: {list(self.prop_list.keys())}')
73
90
  prop = self.prop_list[name]
@@ -78,3 +95,16 @@ class mijiaDevices(object):
78
95
  ret = self.api.get_devices_prop([method])[0]['value']
79
96
  sleep(self.sleep_time)
80
97
  return ret
98
+
99
+ def __setattr__(self, name: str, value: Union[bool, int]) -> None:
100
+ if 'prop_list' in self.__dict__ and name in self.prop_list:
101
+ if not self.set_v2(name, value):
102
+ raise RuntimeError(f'Failed to set property: {name}')
103
+ else:
104
+ super().__setattr__(name, value)
105
+
106
+ def __getattr__(self, name: str) -> Union[bool, int]:
107
+ if 'prop_list' in self.__dict__ and name in self.prop_list:
108
+ return self.get(name)
109
+ else:
110
+ return super().__getattr__(name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mijiaAPI
3
- Version: 1.1.1
3
+ Version: 1.2.0
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  Home-page: https://github.com/Do1e/mijia-api
6
6
  Author: Do1e
@@ -50,9 +50,10 @@ pip install mijiaAPI
50
50
 
51
51
 
52
52
  * `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
53
- * `__init__(api: mijiaAPI, dev_info: dict, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考`demos/dev_info_example`,`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
53
+ * `__init__(api: mijiaAPI, dev_info: dict. did: str = None, sleep_time: float = 0.5)`:初始化,`dev_info`为设备属性,参考[demos/dev_info_example](demos/dev_info_example),`sleep_time`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
54
54
  * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
55
55
  * `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
56
+ * v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
56
57
  * **欢迎大家把自己编写的设备属性字典分享到Issues中,方便大家使用**
57
58
 
58
59
  ## 致谢
@@ -10,6 +10,7 @@ demos/test_available.py
10
10
  demos/test_devices_airconditioner.py
11
11
  demos/test_devices_light.py
12
12
  demos/test_devices_sensor.py
13
+ demos/test_devices_v2_light.py
13
14
  demos/test_login.py
14
15
  demos/dev_info_example/miaomiaoce.sensor_ht.t1.json
15
16
  demos/dev_info_example/yeelink.light.lamp4.json
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes