mijiaAPI 1.3.7__tar.gz → 1.3.8__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.3.7
3
+ Version: 1.3.8
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  License: GPLv3
6
6
  Author: Do1e
@@ -1,73 +1,73 @@
1
- # mijiaAPI
2
- 小米米家设备的api,可以使用代码直接控制米家设备的功能,[Github link](https://github.com/Do1e/mijia-api),[PyPI link](https://pypi.org/project/mijiaAPI/)。
3
-
4
- ## 安装
5
- ```bash
6
- poetry install
7
- ```
8
- 或者
9
- ```bash
10
- pip install mijiaAPI
11
- ```
12
-
13
- ## 使用
14
- 使用实例可以参考`demos`文件夹下的示例代码,以下是简单的使用说明
15
-
16
- ### 登录
17
-
18
- `mijiaLogin`:登录小米账号,获取控制设备必须的`userId`, `ssecurity`, `deviceId`, `serviceToken`,方法列表:
19
- * `login(username: str, password: str) -> dict`:账号密码登录,返回上述信息。**注意,目前这一方法大概率遇到手机验证码,请尽可能使用`QRlogin`。**
20
- * `QRlogin() -> dict`:扫描二维码登录,返回上述信息(会在支持tty的终端打印二维码,若打印识别可查看当前文件夹下的`qr.png`)
21
-
22
- **手动登录方法**
23
-
24
- 可以使用浏览器,手动获取`userId`, `ssecurity`, `deviceId`, `serviceToken`。当然我还是更推荐大家使用扫码登录,但大家也可以根据下述步骤了解如何获取这些信息。
25
-
26
- 打开浏览器访问 https://account.xiaomi.com/pass/serviceLogin?sid=xiaomiio&_json=true ,会得到下述信息,复制location中的url到新的界面打开:
27
-
28
- ```text
29
- &&&START&&&{"serviceParam":"{\"checkSafePhone\":false,\"checkSafeAddress\":false,\"lsrp_score\":0.0}","qs":"%3Fsid%3Dxiaomiio%26_json%3Dtrue","code":70016,"description":"登录验证失败","securityStatus":0,"_sign":"0psXfr43eNI0IX6q9Suk3qWbRqU=","sid":"xiaomiio","result":"error","captchaUrl":null,"callback":"https://sts.api.io.mi.com/sts","location":"https://account.xiaomi.com/fe/service/login?_json=true&sid=xiaomiio&qs=%253Fsid%253Dxiaomiio%2526_json%253Dtrue&callback=.........","pwd":0,"child":0,"desc":"登录验证失败"}
30
- ```
31
-
32
- 打开后会进入小米的登录界面(如果直接显示了`ok`,是因为保存了之前的cookie,建议使用无痕窗口重新开始上述步骤),此时需要先按下 `F12` 打开开发者工具,切换到`Network`选项卡,之后可以输入账号密码或者扫码登录。完成后页面会显示一个`ok`。
33
-
34
- 此时在网络选项卡中按下`Ctrl+F`,搜索上述所需的`userId`, `ssecurity`, `deviceId`, `serviceToken`即可。
35
-
36
- 或者筛选请求:
37
- 1. `https://sts.api.io.mi.com/sts`,其中的`set-cookie`中包含`userId`和`serviceToken`(`=`到`;`前止)。
38
- 2. `https://account.xiaomi.com/pass/serviceLoginAuth2/end`,其中的`extension-pragma`中包含`ssecurity`(`:"`到`"`前止)。
39
- 3. `https://account.xiaomi.com/identity/authStart`,其中的`cookie`中包含`deviceId`(`=`到`;`前止)。
40
-
41
-
42
- ### API
43
-
44
- `mijiaAPI`:API的实现,使用`mijiaLogin`登录后返回的信息进行初始化
45
- * `__init__(auth_data: dict)`:初始化
46
- * `available -> bool`:传入的`auth_data`是否有效
47
- * `get_devices_list() -> list`:获取设备列表
48
- * `get_homes_list() -> list`:获取家庭列表,家庭字典中包含房间列表
49
- * `get_scenes_list(home_id: str) -> list`:获取手动场景列表,在 *米家->添加->手动控制* 中设置
50
- * `run_scene(scene_id: str) -> bool`:运行手动场景
51
- * `get_consumable_items(home_id: str) -> list`:获取设备的耗材信息
52
- * `get_devices_prop(data: list) -> list`:获取设备的属性
53
- * `set_devices_prop(data: list) -> list`:设置设备的属性
54
- * `data`为一个字典的列表,字典需要包含`did`, `siid`, `piid`,后面两个键可从 *https://home.miot-spec.com/spec/{model}* 中获取,其中`model`为设备的model,在设备列表中获取,如[米家台灯 1S](https://home.miot-spec.com/spec/yeelink.light.lamp4)。
55
- * 网站上的方法并非全部可用,需要自行测试
56
- * `run_action(data: dict) -> dict`:执行设备的action
57
- * `data`为一个字典,需要包含`did`, `siid`, `aiid`,获取方法同上
58
-
59
- ### 针对设备的封装
60
-
61
- `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
62
- * `__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`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
63
- * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
64
- * `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
65
- * v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
66
- * 可以调用`get_device_info(device_model: str) -> dict`函数从[米家设备列表](https://home.miot-spec.com/)在线获取设备属性字典,详见[demos/test_get_device_info.py](demos/test_get_device_info.py)
67
-
68
- ## 致谢
69
- * [janzlan/mijia-api](https://gitee.com/janzlan/mijia-api/tree/master)
70
-
71
- ## 声明
72
- * 本项目仅供学习交流使用,不得用于商业用途,如有侵权请联系删除。
73
- * 本项目作者不对使用本项目产生的任何后果负责,请用户自行承担使用本项目的风险。
1
+ # mijiaAPI
2
+ 小米米家设备的api,可以使用代码直接控制米家设备的功能,[Github link](https://github.com/Do1e/mijia-api),[PyPI link](https://pypi.org/project/mijiaAPI/)。
3
+
4
+ ## 安装
5
+ ```bash
6
+ poetry install
7
+ ```
8
+ 或者
9
+ ```bash
10
+ pip install mijiaAPI
11
+ ```
12
+
13
+ ## 使用
14
+ 使用实例可以参考`demos`文件夹下的示例代码,以下是简单的使用说明
15
+
16
+ ### 登录
17
+
18
+ `mijiaLogin`:登录小米账号,获取控制设备必须的`userId`, `ssecurity`, `deviceId`, `serviceToken`,方法列表:
19
+ * `login(username: str, password: str) -> dict`:账号密码登录,返回上述信息。**注意,目前这一方法大概率遇到手机验证码,请尽可能使用`QRlogin`。**
20
+ * `QRlogin() -> dict`:扫描二维码登录,返回上述信息(会在支持tty的终端打印二维码,若打印识别可查看当前文件夹下的`qr.png`)
21
+
22
+ **手动登录方法**
23
+
24
+ 可以使用浏览器,手动获取`userId`, `ssecurity`, `deviceId`, `serviceToken`。当然我还是更推荐大家使用扫码登录,但大家也可以根据下述步骤了解如何获取这些信息。
25
+
26
+ 打开浏览器访问 https://account.xiaomi.com/pass/serviceLogin?sid=xiaomiio&_json=true ,会得到下述信息,复制location中的url到新的界面打开:
27
+
28
+ ```text
29
+ &&&START&&&{"serviceParam":"{\"checkSafePhone\":false,\"checkSafeAddress\":false,\"lsrp_score\":0.0}","qs":"%3Fsid%3Dxiaomiio%26_json%3Dtrue","code":70016,"description":"登录验证失败","securityStatus":0,"_sign":"0psXfr43eNI0IX6q9Suk3qWbRqU=","sid":"xiaomiio","result":"error","captchaUrl":null,"callback":"https://sts.api.io.mi.com/sts","location":"https://account.xiaomi.com/fe/service/login?_json=true&sid=xiaomiio&qs=%253Fsid%253Dxiaomiio%2526_json%253Dtrue&callback=.........","pwd":0,"child":0,"desc":"登录验证失败"}
30
+ ```
31
+
32
+ 打开后会进入小米的登录界面(如果直接显示了`ok`,是因为保存了之前的cookie,建议使用无痕窗口重新开始上述步骤),此时需要先按下 `F12` 打开开发者工具,切换到`Network`选项卡,之后可以输入账号密码或者扫码登录。完成后页面会显示一个`ok`。
33
+
34
+ 此时在网络选项卡中按下`Ctrl+F`,搜索上述所需的`userId`, `ssecurity`, `deviceId`, `serviceToken`即可。
35
+
36
+ 或者筛选请求:
37
+ 1. `https://sts.api.io.mi.com/sts`,其中的`set-cookie`中包含`userId`和`serviceToken`(`=`到`;`前止)。
38
+ 2. `https://account.xiaomi.com/pass/serviceLoginAuth2/end`,其中的`extension-pragma`中包含`ssecurity`(`:"`到`"`前止)。
39
+ 3. `https://account.xiaomi.com/identity/authStart`,其中的`cookie`中包含`deviceId`(`=`到`;`前止)。
40
+
41
+
42
+ ### API
43
+
44
+ `mijiaAPI`:API的实现,使用`mijiaLogin`登录后返回的信息进行初始化
45
+ * `__init__(auth_data: dict)`:初始化
46
+ * `available -> bool`:传入的`auth_data`是否有效
47
+ * `get_devices_list() -> list`:获取设备列表
48
+ * `get_homes_list() -> list`:获取家庭列表,家庭字典中包含房间列表
49
+ * `get_scenes_list(home_id: str) -> list`:获取手动场景列表,在 *米家->添加->手动控制* 中设置
50
+ * `run_scene(scene_id: str) -> bool`:运行手动场景
51
+ * `get_consumable_items(home_id: str) -> list`:获取设备的耗材信息
52
+ * `get_devices_prop(data: list) -> list`:获取设备的属性
53
+ * `set_devices_prop(data: list) -> list`:设置设备的属性
54
+ * `data`为一个字典的列表,字典需要包含`did`, `siid`, `piid`,后面两个键可从 *https://home.miot-spec.com/spec/{model}* 中获取,其中`model`为设备的model,在设备列表中获取,如[米家台灯 1S](https://home.miot-spec.com/spec/yeelink.light.lamp4)。
55
+ * 网站上的方法并非全部可用,需要自行测试
56
+ * `run_action(data: dict) -> dict`:执行设备的action
57
+ * `data`为一个字典,需要包含`did`, `siid`, `aiid`,获取方法同上
58
+
59
+ ### 针对设备的封装
60
+
61
+ `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
62
+ * `__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`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
63
+ * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
64
+ * `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
65
+ * v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
66
+ * 可以调用`get_device_info(device_model: str) -> dict`函数从[米家设备列表](https://home.miot-spec.com/)在线获取设备属性字典,详见[demos/test_get_device_info.py](demos/test_get_device_info.py)
67
+
68
+ ## 致谢
69
+ * [janzlan/mijia-api](https://gitee.com/janzlan/mijia-api/tree/master)
70
+
71
+ ## 声明
72
+ * 本项目仅供学习交流使用,不得用于商业用途,如有侵权请联系删除。
73
+ * 本项目作者不对使用本项目产生的任何后果负责,请用户自行承担使用本项目的风险。
@@ -1,169 +1,171 @@
1
- from typing import Union
2
- import requests
3
- import requests.cookies
4
-
5
- from .utils import defaultUA, post_data, PostDataError
6
-
7
- class mijiaAPI(object):
8
- def __init__(self, auth_data: dict):
9
- if any(k not in auth_data for k in ['userId', 'deviceId', 'ssecurity', 'serviceToken']):
10
- raise Exception('Invalid authorize data')
11
- self.userId = auth_data['userId']
12
- self.ssecurity = auth_data['ssecurity']
13
- self.session = requests.Session()
14
- self.session.headers.update({
15
- 'User-Agent': defaultUA,
16
- 'x-xiaomi-protocal-flag-cli': 'PROTOCAL-HTTP2',
17
- 'Cookie': f'PassportDeviceId={auth_data["deviceId"]};'
18
- f'userId={auth_data["userId"]};'
19
- f'serviceToken={auth_data["serviceToken"]};',
20
- })
21
-
22
- @staticmethod
23
- def _post_process(data: dict) -> Union[list, bool]:
24
- if data['code'] != 0:
25
- raise Exception(f'Failed to get data, {data["message"]}')
26
- return data['result']
27
-
28
- @property
29
- def available(self) -> bool:
30
- """check if the API is available"""
31
- uri = '/home/device_list'
32
- data = {"getVirtualModel": False, "getHuamiDevices": 0}
33
- try:
34
- post_data(self.session, self.ssecurity, uri, data)
35
- return True
36
- except PostDataError:
37
- return False
38
-
39
- def get_devices_list(self) -> list:
40
- """get devices list
41
- mijiaAPI.get_devices_list() -> list
42
- -------
43
- @return
44
- dict, devices list
45
- """
46
- uri = '/home/device_list'
47
- data = {"getVirtualModel": False, "getHuamiDevices": 0}
48
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
49
-
50
- def get_homes_list(self) -> list:
51
- """get homes list
52
- mijiaAPI.get_homes_list() -> list
53
- -------
54
- @return
55
- list, homes list, including rooms
56
- """
57
- uri = '/v2/homeroom/gethome'
58
- data = {"fg": False, "fetch_share": True, "fetch_share_dev": True, "limit": 300, "app_ver": 7}
59
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
60
-
61
- def get_scenes_list(self, home_id: str) -> list:
62
- """get scenes list
63
- set it in Mi Home APP -> Add -> Manual controls
64
- mijiaAPI.get_scenes_list(home_id: str) -> list
65
- -------
66
- @param
67
- home_id: str, room id, get from get_homes_list
68
- -------
69
- @return
70
- list, scenes list
71
- """
72
- uri = '/appgateway/miot/appsceneservice/AppSceneService/GetSceneList'
73
- data = {"home_id": home_id}
74
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
75
-
76
- def run_scene(self, scene_id: str) -> bool:
77
- """run scene
78
- mijiaAPI.run_scene(scene_id: str) -> bool
79
- -------
80
- @param
81
- scene_id: str, scene id, get from get_scenes_list
82
- -------
83
- @return
84
- dict, result
85
- """
86
- uri = '/appgateway/miot/appsceneservice/AppSceneService/RunScene'
87
- data = {"scene_id": scene_id, "trigger_key": "user.click"}
88
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
89
-
90
- def get_consumable_items(self, home_id: str) -> list:
91
- """get consumable items
92
- mijiaAPI.get_consumable_items(did: str) -> list
93
- -------
94
- @param
95
- home_id: str, room id, get from get_homes_list
96
- -------
97
- @return
98
- list, consumable items
99
- """
100
- uri = '/v2/home/standard_consumable_items'
101
- data = {"home_id": int(home_id), "owner_id": self.userId}
102
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
103
-
104
- def get_devices_prop(self, data: list) -> list:
105
- """get devices properties
106
- mijiaAPI.get_devices_prop(data: list) -> list
107
- -------
108
- @param
109
- data: list of dict
110
- dict keys:
111
- - did: str, device id, get from get_devices_list
112
- - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
113
- - piid: str, property id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
114
- model yeelink.light.lamp4 as an example:
115
- [
116
- {"did": "1234567890", "siid": 2, "piid": 2}, # get the brightness
117
- {"did": "1234567890", "siid": 2, "piid": 3}, # get the color temperature
118
- ]
119
- -------
120
- @return
121
- list, device properties
122
- """
123
- uri = '/miotspec/prop/get'
124
- data = {"params": data}
125
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
126
-
127
- def set_devices_prop(self, data: list) -> list:
128
- """set devices properties
129
- mijiaAPI.set_devices_prop(data: list) -> list
130
- -------
131
- @param
132
- data: list of dict
133
- dict keys:
134
- - did: str, device id, get from get_devices_list
135
- - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
136
- - piid: str, property id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
137
- - value: str, value to set
138
- model yeelink.light.lamp4 as an example:
139
- [
140
- {"did": "1234567890", "siid": 2, "piid": 2, "value": 50} # set the brightness to 50%
141
- {"did": "1234567890", "siid": 2, "piid": 3, "value": 2700} # set the color temperature to 2700K
142
- ]
143
- -------
144
- @return
145
- dict, result
146
- """
147
- uri = '/miotspec/prop/set'
148
- data = {"params": data}
149
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
150
-
151
- def run_action(self, data: dict) -> dict:
152
- """run action
153
- mijiaAPI.run_action(data: dict) -> dict
154
- @param
155
- data: dict
156
- dict keys:
157
- - did: str, device id, get from get_devices_list
158
- - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
159
- - aiid: str, action id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
160
- - value: list, value to list
161
- model xiaomi.feeder.pi2001 as an example:
162
- {"did": "1234567890", "siid": 2, "aiid": 1, "value": [2]}, # Remote feeding (2 servings) of food
163
- -------
164
- @return
165
- dict, result
166
- """
167
- uri = '/miotspec/action'
168
- data = {"params": data}
169
- return self._post_process(post_data(self.session, self.ssecurity, uri, data))
1
+ from typing import Union
2
+ import requests
3
+ import requests.cookies
4
+
5
+ from .code import ERROR_CODE
6
+ from .utils import defaultUA, post_data, PostDataError
7
+
8
+
9
+ class mijiaAPI(object):
10
+ def __init__(self, auth_data: dict):
11
+ if any(k not in auth_data for k in ['userId', 'deviceId', 'ssecurity', 'serviceToken']):
12
+ raise Exception('Invalid authorize data')
13
+ self.userId = auth_data['userId']
14
+ self.ssecurity = auth_data['ssecurity']
15
+ self.session = requests.Session()
16
+ self.session.headers.update({
17
+ 'User-Agent': defaultUA,
18
+ 'x-xiaomi-protocal-flag-cli': 'PROTOCAL-HTTP2',
19
+ 'Cookie': f'PassportDeviceId={auth_data["deviceId"]};'
20
+ f'userId={auth_data["userId"]};'
21
+ f'serviceToken={auth_data["serviceToken"]};',
22
+ })
23
+
24
+ @staticmethod
25
+ def _post_process(data: dict) -> Union[list, bool]:
26
+ if data['code'] != 0:
27
+ raise Exception(f'Failed to get data, {data["message"]}')
28
+ return data['result']
29
+
30
+ @property
31
+ def available(self) -> bool:
32
+ """check if the API is available"""
33
+ uri = '/home/device_list'
34
+ data = {"getVirtualModel": False, "getHuamiDevices": 0}
35
+ try:
36
+ post_data(self.session, self.ssecurity, uri, data)
37
+ return True
38
+ except PostDataError:
39
+ return False
40
+
41
+ def get_devices_list(self) -> dict:
42
+ """get devices list
43
+ mijiaAPI.get_devices_list() -> dict
44
+ -------
45
+ @return
46
+ dict, devices list
47
+ """
48
+ uri = '/home/device_list'
49
+ data = {"getVirtualModel": False, "getHuamiDevices": 0}
50
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
51
+
52
+ def get_homes_list(self) -> list:
53
+ """get homes list
54
+ mijiaAPI.get_homes_list() -> list
55
+ -------
56
+ @return
57
+ list, homes list, including rooms
58
+ """
59
+ uri = '/v2/homeroom/gethome'
60
+ data = {"fg": False, "fetch_share": True, "fetch_share_dev": True, "limit": 300, "app_ver": 7}
61
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
62
+
63
+ def get_scenes_list(self, home_id: str) -> list:
64
+ """get scenes list
65
+ set it in Mi Home APP -> Add -> Manual controls
66
+ mijiaAPI.get_scenes_list(home_id: str) -> list
67
+ -------
68
+ @param
69
+ home_id: str, room id, get from get_homes_list
70
+ -------
71
+ @return
72
+ list, scenes list
73
+ """
74
+ uri = '/appgateway/miot/appsceneservice/AppSceneService/GetSceneList'
75
+ data = {"home_id": home_id}
76
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
77
+
78
+ def run_scene(self, scene_id: str) -> bool:
79
+ """run scene
80
+ mijiaAPI.run_scene(scene_id: str) -> bool
81
+ -------
82
+ @param
83
+ scene_id: str, scene id, get from get_scenes_list
84
+ -------
85
+ @return
86
+ dict, result
87
+ """
88
+ uri = '/appgateway/miot/appsceneservice/AppSceneService/RunScene'
89
+ data = {"scene_id": scene_id, "trigger_key": "user.click"}
90
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
91
+
92
+ def get_consumable_items(self, home_id: str) -> list:
93
+ """get consumable items
94
+ mijiaAPI.get_consumable_items(did: str) -> list
95
+ -------
96
+ @param
97
+ home_id: str, room id, get from get_homes_list
98
+ -------
99
+ @return
100
+ list, consumable items
101
+ """
102
+ uri = '/v2/home/standard_consumable_items'
103
+ data = {"home_id": int(home_id), "owner_id": self.userId}
104
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
105
+
106
+ def get_devices_prop(self, data: list) -> list:
107
+ """get devices properties
108
+ mijiaAPI.get_devices_prop(data: list) -> list
109
+ -------
110
+ @param
111
+ data: list of dict
112
+ dict keys:
113
+ - did: str, device id, get from get_devices_list
114
+ - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
115
+ - piid: str, property id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
116
+ model yeelink.light.lamp4 as an example:
117
+ [
118
+ {"did": "1234567890", "siid": 2, "piid": 2}, # get the brightness
119
+ {"did": "1234567890", "siid": 2, "piid": 3}, # get the color temperature
120
+ ]
121
+ -------
122
+ @return
123
+ list, device properties
124
+ """
125
+ uri = '/miotspec/prop/get'
126
+ data = {"params": data}
127
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
128
+
129
+ def set_devices_prop(self, data: list) -> list:
130
+ """set devices properties
131
+ mijiaAPI.set_devices_prop(data: list) -> list
132
+ -------
133
+ @param
134
+ data: list of dict
135
+ dict keys:
136
+ - did: str, device id, get from get_devices_list
137
+ - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
138
+ - piid: str, property id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
139
+ - value: str, value to set
140
+ model yeelink.light.lamp4 as an example:
141
+ [
142
+ {"did": "1234567890", "siid": 2, "piid": 2, "value": 50} # set the brightness to 50%
143
+ {"did": "1234567890", "siid": 2, "piid": 3, "value": 2700} # set the color temperature to 2700K
144
+ ]
145
+ -------
146
+ @return
147
+ dict, result
148
+ """
149
+ uri = '/miotspec/prop/set'
150
+ data = {"params": data}
151
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
152
+
153
+ def run_action(self, data: dict) -> dict:
154
+ """run action
155
+ mijiaAPI.run_action(data: dict) -> dict
156
+ @param
157
+ data: dict
158
+ dict keys:
159
+ - did: str, device id, get from get_devices_list
160
+ - siid: str, service id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
161
+ - aiid: str, action id, get from https://home.miot-spec.com/spec/{model}, model from get_devices_list
162
+ - value: list, value to list
163
+ model xiaomi.feeder.pi2001 as an example:
164
+ {"did": "1234567890", "siid": 2, "aiid": 1, "value": [2]}, # Remote feeding (2 servings) of food
165
+ -------
166
+ @return
167
+ dict, result
168
+ """
169
+ uri = '/miotspec/action'
170
+ data = {"params": data}
171
+ return self._post_process(post_data(self.session, self.ssecurity, uri, data))
@@ -0,0 +1,56 @@
1
+ """
2
+ 来源:https://github.com/kekeandzeyu/ha_xiaomi_home/blob/main/custom_components/xiaomi_home/miot/i18n/zh-Hans.json
3
+ """
4
+
5
+ """
6
+ 小米米家API错误码
7
+ """
8
+ ERROR_CODE = {
9
+ "-10000": "未知错误",
10
+ "-10001": "服务不可用",
11
+ "-10002": "参数无效",
12
+ "-10003": "资源不足",
13
+ "-10004": "内部错误",
14
+ "-10005": "权限不足",
15
+ "-10006": "执行超时",
16
+ "-10007": "设备离线或者不存在",
17
+ "-10020": "未授权OAuth2)",
18
+ "-10030": "无效的token(HTTP)",
19
+ "-10040": "无效的消息格式",
20
+ "-10050": "无效的证书",
21
+ "-704000000": "未知错误",
22
+ "-704010000": "未授权(设备可能被删除)",
23
+ "-704014006": "没找到设备描述",
24
+ "-704030013": "Property不可读",
25
+ "-704030023": "Property不可写",
26
+ "-704030033": "Property不可订阅",
27
+ "-704040002": "Service不存在",
28
+ "-704040003": "Property不存在",
29
+ "-704040004": "Event不存在",
30
+ "-704040005": "Action不存在",
31
+ "-704040999": "功能未上线",
32
+ "-704042001": "Device不存在",
33
+ "-704042011": "设备离线",
34
+ "-704053036": "设备操作超时",
35
+ "-704053100": "设备在当前状态下无法执行此操作",
36
+ "-704083036": "设备操作超时",
37
+ "-704090001": "Device不存在",
38
+ "-704220008": "无效的ID",
39
+ "-704220025": "Action参数个数不匹配",
40
+ "-704220035": "Action参数错误",
41
+ "-704220043": "Property值错误",
42
+ "-704222034": "Action返回值错误",
43
+ "-705004000": "未知错误",
44
+ "-705004501": "未知错误",
45
+ "-705201013": "Property不可读",
46
+ "-705201015": "Action执行错误",
47
+ "-705201023": "Property不可写",
48
+ "-705201033": "Property不可订阅",
49
+ "-706012000": "未知错误",
50
+ "-706012013": "Property不可读",
51
+ "-706012015": "Action执行错误",
52
+ "-706012023": "Property不可写",
53
+ "-706012033": "Property不可订阅",
54
+ "-706012043": "Property值错误",
55
+ "-706014006": "没找到设备描述"
56
+ }