# mijiaAPI
小米米家设备的api,可以使用代码直接控制米家设备的功能,[Github link](https://github.com/Do1e/mijia-api),[PyPI link](https://pypi.org/project/mijiaAPI/)。
## 安装
```bash
poetry install
```
或者
```bash
pip install mijiaAPI
```
## 使用
使用实例可以参考`demos`文件夹下的示例代码,以下是简单的使用说明
有三个类分别用于登录和API调用
* `mijiaLogin`:登录小米账号,获取控制设备必须的`userId`, `ssecurity`, `deviceId`, `serviceToken`,方法列表
* `login(username: str, password: str) -> dict`:账号密码登录,返回上述信息
* `QRlogin() -> dict`:扫描二维码登录,返回上述信息(会在支持tty的终端打印二维码,若打印识别可查看当前文件夹下的`qr.png`)
* `mijiaAPI`:API的实现,使用`mijiaLogin`登录后返回的信息进行初始化
* `__init__(auth_data: dict)`:初始化
* `available -> bool`:传入的`auth_data`是否有效
* `get_devices_list() -> list`:获取设备列表
* `get_homes_list() -> list`:获取家庭列表,家庭字典中包含房间列表
* `get_scenes_list(home_id: str) -> list`:获取手动场景列表,在 *米家->添加->手动控制* 中设置
* `run_scene(scene_id: str) -> bool`:运行手动场景
* `get_consumable_items(home_id: str) -> list`:获取设备的耗材信息
* `get_devices_prop(data: list) -> list`:获取设备的属性
* `set_devices_prop(data: list) -> list`:设置设备的属性
* `data`为一个字典的列表,字典需要包含`did`, `siid`, `piid`,后面两个键可从 *https://home.miot-spec.com/spec/{model}* 中获取,其中`model`为设备的model,在设备列表中获取,如[米家台灯 1S](https://home.miot-spec.com/spec/yeelink.light.lamp4)。
* 网站上的方法并非全部可用,需要自行测试
* `run_action(data: dict) -> dict`:执行设备的action
* `data`为一个字典,需要包含`did`, `siid`, `aiid`,获取方法同上
* `mijiaDevices`:使用`mijiaAPI`和设备属性字典初始化,以便更方便地调用设备属性
* `__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`为每次调用设备属性的间隔时间(注:设置属性后立刻获取属性会不符合预期,需要延迟一段时间)
* `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`:设置设备属性
* `get(name: str, did: str) -> Union[bool, int]`:获取设备属性
* v1.2.0 新增直接通过名称设置/获取属性,需要在初始化时传入`did`,详见[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)。名称中包含`-`的属性需要替换为`_`。
* **欢迎大家把自己编写的设备属性字典分享到Issues中,方便大家使用**
* 也可以调用`get_device_info(device_model: str) -> dict`函数从[米家设备列表](https://home.miot-spec.com/)在线获取设备属性字典,详见[demos/test_get_device_info.py](demos/test_get_device_info.py)
## 致谢
* [janzlan/mijia-api](https://gitee.com/janzlan/mijia-api/tree/master)
## 声明
* 本项目仅供学习交流使用,不得用于商业用途,如有侵权请联系删除。
* 本项目作者不对使用本项目产生的任何后果负责,请用户自行承担使用本项目的风险。
Raw data
{
"_id": null,
"home_page": "https://github.com/Do1e/mijia-api",
"name": "mijiaAPI",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.9",
"maintainer_email": null,
"keywords": null,
"author": "Do1e",
"author_email": "dpj.email@qq.com",
"download_url": "https://files.pythonhosted.org/packages/2c/89/0493c73a2ec3ae90da7790ff27ca9084b1b32df8fd2b7b4efc654d7a68be/mijiaapi-1.3.3.tar.gz",
"platform": null,
"description": "# mijiaAPI\n\u5c0f\u7c73\u7c73\u5bb6\u8bbe\u5907\u7684api\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee3\u7801\u76f4\u63a5\u63a7\u5236\u7c73\u5bb6\u8bbe\u5907\u7684\u529f\u80fd\uff0c[Github link](https://github.com/Do1e/mijia-api)\uff0c[PyPI link](https://pypi.org/project/mijiaAPI/)\u3002\n\n## \u5b89\u88c5\n```bash\npoetry install\n```\n\u6216\u8005\n```bash\npip install mijiaAPI\n```\n\n## \u4f7f\u7528\n\u4f7f\u7528\u5b9e\u4f8b\u53ef\u4ee5\u53c2\u8003`demos`\u6587\u4ef6\u5939\u4e0b\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u4ee5\u4e0b\u662f\u7b80\u5355\u7684\u4f7f\u7528\u8bf4\u660e\n\n\u6709\u4e09\u4e2a\u7c7b\u5206\u522b\u7528\u4e8e\u767b\u5f55\u548cAPI\u8c03\u7528\n\n* `mijiaLogin`\uff1a\u767b\u5f55\u5c0f\u7c73\u8d26\u53f7\uff0c\u83b7\u53d6\u63a7\u5236\u8bbe\u5907\u5fc5\u987b\u7684`userId`, `ssecurity`, `deviceId`, `serviceToken`\uff0c\u65b9\u6cd5\u5217\u8868\n * `login(username: str, password: str) -> dict`\uff1a\u8d26\u53f7\u5bc6\u7801\u767b\u5f55\uff0c\u8fd4\u56de\u4e0a\u8ff0\u4fe1\u606f\n * `QRlogin() -> dict`\uff1a\u626b\u63cf\u4e8c\u7ef4\u7801\u767b\u5f55\uff0c\u8fd4\u56de\u4e0a\u8ff0\u4fe1\u606f\uff08\u4f1a\u5728\u652f\u6301tty\u7684\u7ec8\u7aef\u6253\u5370\u4e8c\u7ef4\u7801\uff0c\u82e5\u6253\u5370\u8bc6\u522b\u53ef\u67e5\u770b\u5f53\u524d\u6587\u4ef6\u5939\u4e0b\u7684`qr.png`\uff09\n\n* `mijiaAPI`\uff1aAPI\u7684\u5b9e\u73b0\uff0c\u4f7f\u7528`mijiaLogin`\u767b\u5f55\u540e\u8fd4\u56de\u7684\u4fe1\u606f\u8fdb\u884c\u521d\u59cb\u5316\n * `__init__(auth_data: dict)`\uff1a\u521d\u59cb\u5316\n * `available -> bool`\uff1a\u4f20\u5165\u7684`auth_data`\u662f\u5426\u6709\u6548\n * `get_devices_list() -> list`\uff1a\u83b7\u53d6\u8bbe\u5907\u5217\u8868\n * `get_homes_list() -> list`\uff1a\u83b7\u53d6\u5bb6\u5ead\u5217\u8868\uff0c\u5bb6\u5ead\u5b57\u5178\u4e2d\u5305\u542b\u623f\u95f4\u5217\u8868\n * `get_scenes_list(home_id: str) -> list`\uff1a\u83b7\u53d6\u624b\u52a8\u573a\u666f\u5217\u8868\uff0c\u5728 *\u7c73\u5bb6->\u6dfb\u52a0->\u624b\u52a8\u63a7\u5236* \u4e2d\u8bbe\u7f6e\n * `run_scene(scene_id: str) -> bool`\uff1a\u8fd0\u884c\u624b\u52a8\u573a\u666f\n * `get_consumable_items(home_id: str) -> list`\uff1a\u83b7\u53d6\u8bbe\u5907\u7684\u8017\u6750\u4fe1\u606f\n * `get_devices_prop(data: list) -> list`\uff1a\u83b7\u53d6\u8bbe\u5907\u7684\u5c5e\u6027\n * `set_devices_prop(data: list) -> list`\uff1a\u8bbe\u7f6e\u8bbe\u5907\u7684\u5c5e\u6027\n * `data`\u4e3a\u4e00\u4e2a\u5b57\u5178\u7684\u5217\u8868\uff0c\u5b57\u5178\u9700\u8981\u5305\u542b`did`, `siid`, `piid`\uff0c\u540e\u9762\u4e24\u4e2a\u952e\u53ef\u4ece *https://home.miot-spec.com/spec/{model}* \u4e2d\u83b7\u53d6\uff0c\u5176\u4e2d`model`\u4e3a\u8bbe\u5907\u7684model\uff0c\u5728\u8bbe\u5907\u5217\u8868\u4e2d\u83b7\u53d6\uff0c\u5982[\u7c73\u5bb6\u53f0\u706f 1S](https://home.miot-spec.com/spec/yeelink.light.lamp4)\u3002\n * \u7f51\u7ad9\u4e0a\u7684\u65b9\u6cd5\u5e76\u975e\u5168\u90e8\u53ef\u7528\uff0c\u9700\u8981\u81ea\u884c\u6d4b\u8bd5\n * `run_action(data: dict) -> dict`\uff1a\u6267\u884c\u8bbe\u5907\u7684action\n * `data`\u4e3a\u4e00\u4e2a\u5b57\u5178\uff0c\u9700\u8981\u5305\u542b`did`, `siid`, `aiid`\uff0c\u83b7\u53d6\u65b9\u6cd5\u540c\u4e0a\n\n\n* `mijiaDevices`\uff1a\u4f7f\u7528`mijiaAPI`\u548c\u8bbe\u5907\u5c5e\u6027\u5b57\u5178\u521d\u59cb\u5316\uff0c\u4ee5\u4fbf\u66f4\u65b9\u4fbf\u5730\u8c03\u7528\u8bbe\u5907\u5c5e\u6027\n * `__init__(api: mijiaAPI, dev_info: dict. did: str = None, sleep_time: float = 0.5)`\uff1a\u521d\u59cb\u5316\uff0c`dev_info`\u4e3a\u8bbe\u5907\u5c5e\u6027\uff0c\u53c2\u8003[demos/dev_info_example](demos/dev_info_example)\uff0c`sleep_time`\u4e3a\u6bcf\u6b21\u8c03\u7528\u8bbe\u5907\u5c5e\u6027\u7684\u95f4\u9694\u65f6\u95f4\uff08\u6ce8\uff1a\u8bbe\u7f6e\u5c5e\u6027\u540e\u7acb\u523b\u83b7\u53d6\u5c5e\u6027\u4f1a\u4e0d\u7b26\u5408\u9884\u671f\uff0c\u9700\u8981\u5ef6\u8fdf\u4e00\u6bb5\u65f6\u95f4\uff09\n * `set(name: str, did: str, value: Union[bool, int]) -> Union[bool, int]`\uff1a\u8bbe\u7f6e\u8bbe\u5907\u5c5e\u6027\n * `get(name: str, did: str) -> Union[bool, int]`\uff1a\u83b7\u53d6\u8bbe\u5907\u5c5e\u6027\n * v1.2.0 \u65b0\u589e\u76f4\u63a5\u901a\u8fc7\u540d\u79f0\u8bbe\u7f6e/\u83b7\u53d6\u5c5e\u6027\uff0c\u9700\u8981\u5728\u521d\u59cb\u5316\u65f6\u4f20\u5165`did`\uff0c\u8be6\u89c1[demos/test_devices_v2_light.py](demos/test_devices_v2_light.py)\u3002\u540d\u79f0\u4e2d\u5305\u542b`-`\u7684\u5c5e\u6027\u9700\u8981\u66ff\u6362\u4e3a`_`\u3002\n * **\u6b22\u8fce\u5927\u5bb6\u628a\u81ea\u5df1\u7f16\u5199\u7684\u8bbe\u5907\u5c5e\u6027\u5b57\u5178\u5206\u4eab\u5230Issues\u4e2d\uff0c\u65b9\u4fbf\u5927\u5bb6\u4f7f\u7528**\n * \u4e5f\u53ef\u4ee5\u8c03\u7528`get_device_info(device_model: str) -> dict`\u51fd\u6570\u4ece[\u7c73\u5bb6\u8bbe\u5907\u5217\u8868](https://home.miot-spec.com/)\u5728\u7ebf\u83b7\u53d6\u8bbe\u5907\u5c5e\u6027\u5b57\u5178\uff0c\u8be6\u89c1[demos/test_get_device_info.py](demos/test_get_device_info.py)\n\n## \u81f4\u8c22\n* [janzlan/mijia-api](https://gitee.com/janzlan/mijia-api/tree/master)\n\n## \u58f0\u660e\n* \u672c\u9879\u76ee\u4ec5\u4f9b\u5b66\u4e60\u4ea4\u6d41\u4f7f\u7528\uff0c\u4e0d\u5f97\u7528\u4e8e\u5546\u4e1a\u7528\u9014\uff0c\u5982\u6709\u4fb5\u6743\u8bf7\u8054\u7cfb\u5220\u9664\u3002\n* \u672c\u9879\u76ee\u4f5c\u8005\u4e0d\u5bf9\u4f7f\u7528\u672c\u9879\u76ee\u4ea7\u751f\u7684\u4efb\u4f55\u540e\u679c\u8d1f\u8d23\uff0c\u8bf7\u7528\u6237\u81ea\u884c\u627f\u62c5\u4f7f\u7528\u672c\u9879\u76ee\u7684\u98ce\u9669\u3002\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "A Python API for Xiaomi Mijia",
"version": "1.3.3",
"project_urls": {
"Homepage": "https://github.com/Do1e/mijia-api",
"Repository": "https://github.com/Do1e/mijia-api"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bb7593219e4a06eb5d12ee46b4f2c8bd5fa612a08751af775ea2c1d02d52becd",
"md5": "3883f32f62772f9e1c2c83be333380d1",
"sha256": "db1e82cbddef0ec0457416b7ca00175b5311a88261feed59f70b44cba12bc7ce"
},
"downloads": -1,
"filename": "mijiaapi-1.3.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3883f32f62772f9e1c2c83be333380d1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 22190,
"upload_time": "2024-12-31T05:37:05",
"upload_time_iso_8601": "2024-12-31T05:37:05.448627Z",
"url": "https://files.pythonhosted.org/packages/bb/75/93219e4a06eb5d12ee46b4f2c8bd5fa612a08751af775ea2c1d02d52becd/mijiaapi-1.3.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2c890493c73a2ec3ae90da7790ff27ca9084b1b32df8fd2b7b4efc654d7a68be",
"md5": "d33f20087aa5b369f28fb3eb296af7a3",
"sha256": "5fb974b33bfd04cec167542b08de1e9725faef27288d8a4969b2392328977191"
},
"downloads": -1,
"filename": "mijiaapi-1.3.3.tar.gz",
"has_sig": false,
"md5_digest": "d33f20087aa5b369f28fb3eb296af7a3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.9",
"size": 20858,
"upload_time": "2024-12-31T05:37:07",
"upload_time_iso_8601": "2024-12-31T05:37:07.196241Z",
"url": "https://files.pythonhosted.org/packages/2c/89/0493c73a2ec3ae90da7790ff27ca9084b1b32df8fd2b7b4efc654d7a68be/mijiaapi-1.3.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-31 05:37:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Do1e",
"github_project": "mijia-api",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "requests",
"specs": []
},
{
"name": "qrcode",
"specs": []
}
],
"lcname": "mijiaapi"
}