{"id":13441014,"url":"https://github.com/rytilahti/python-miio","last_synced_at":"2025-12-16T09:30:37.259Z","repository":{"id":38310880,"uuid":"83989500","full_name":"rytilahti/python-miio","owner":"rytilahti","description":"Python library \u0026 console tool for controlling Xiaomi smart appliances","archived":false,"fork":false,"pushed_at":"2025-08-19T18:47:39.000Z","size":3481,"stargazers_count":4083,"open_issues_count":313,"forks_count":588,"subscribers_count":91,"default_branch":"master","last_synced_at":"2025-08-28T09:54:55.204Z","etag":null,"topics":["home-assistant","home-automation","miio","miot","miot-spec","python","smart-home","xiaomi"],"latest_commit_sha":null,"homepage":"https://python-miio.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rytilahti.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"rytilahti"}},"created_at":"2017-03-05T17:41:43.000Z","updated_at":"2025-08-27T07:16:21.000Z","dependencies_parsed_at":"2023-10-05T06:00:25.526Z","dependency_job_id":"0e3e0bfd-2f3d-4351-ad51-83de7c64272a","html_url":"https://github.com/rytilahti/python-miio","commit_stats":{"total_commits":999,"total_committers":174,"mean_commits":5.741379310344827,"dds":0.4974974974974975,"last_synced_commit":"35b1ab22ff0716a3507b9703c5f790d389793d38"},"previous_names":["rytilahti/python-mirobo"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/rytilahti/python-miio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rytilahti%2Fpython-miio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rytilahti%2Fpython-miio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rytilahti%2Fpython-miio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rytilahti%2Fpython-miio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rytilahti","download_url":"https://codeload.github.com/rytilahti/python-miio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rytilahti%2Fpython-miio/sbom","scorecard":{"id":793167,"data":{"date":"2025-08-11","repo":{"name":"github.com/rytilahti/python-miio","commit":"0aa4df3ab1e47d564c8312016fbcfb3a9fc06c6c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Maintained","score":3,"reason":"0 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":4,"reason":"Found 14/30 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:17","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/rytilahti/python-miio/publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:51","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:24","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-79v4-65xg-pq4g","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 9 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T08:09:17.719Z","repository_id":38310880,"created_at":"2025-08-23T08:09:17.719Z","updated_at":"2025-08-23T08:09:17.719Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274357586,"owners_count":25270675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["home-assistant","home-automation","miio","miot","miot-spec","python","smart-home","xiaomi"],"created_at":"2024-07-31T03:01:28.872Z","updated_at":"2025-12-12T11:51:59.974Z","avatar_url":"https://github.com/rytilahti.png","language":"Python","funding_links":["https://github.com/sponsors/rytilahti"],"categories":["HarmonyOS","Python","🏚 Internet of \"Things\""],"sub_categories":["Windows Manager"],"readme":"\u003ch2 align=\"center\"\u003epython-miio\u003c/h2\u003e\n\n[![Chat](https://img.shields.io/matrix/python-miio-chat:matrix.org)](https://matrix.to/#/#python-miio-chat:matrix.org)\n[![PyPI\nversion](https://badge.fury.io/py/python-miio.svg)](https://badge.fury.io/py/python-miio)\n[![PyPI\ndownloads](https://img.shields.io/pypi/dw/python-miio)](https://pypi.org/project/python-miio/)\n[![Build\nStatus](https://github.com/rytilahti/python-miio/actions/workflows/ci.yml/badge.svg)](https://github.com/rytilahti/python-miio/actions/workflows/ci.yml)\n[![Coverage\nStatus](https://codecov.io/gh/rytilahti/python-miio/branch/master/graph/badge.svg?token=lYKWubxkLU)](https://codecov.io/gh/rytilahti/python-miio)\n[![Documentation status](https://readthedocs.org/projects/python-miio/badge/?version=latest)](https://python-miio.readthedocs.io/en/latest/?badge=latest)\n\nThis library (and its accompanying cli tool, `miiocli`) can be used to control devices using Xiaomi's\n[miIO](https://github.com/OpenMiHome/mihome-binary-protocol/blob/master/doc/PROTOCOL.md)\nand MIoT protocols.\n\nThis is a voluntary, community-driven effort and is not affiliated with any of the companies whose devices are supported by this library.\nIssue reports and pull requests are welcome, see [contributing](#contributing)!\n\n---\n\nThe full documentation is available at [python-miio.readthedocs.io](https://python-miio.readthedocs.io/en/latest/).\n\n---\n\n* [Installation](#installation)\n* [Getting started](#getting-started)\n* [Controlling modern (MIoT) devices](#controlling-modern-miot-devices)\n* [Controlling older (miIO) devices](#controlling-older-miio-devices)\n* [Troubleshooting](#troubleshooting)\n* [API usage](#api-usage)\n* [Contributing](#contributing)\n* [Simulators](#simulators)\n* [Supported devices](#supported-devices)\n* [Projects using this library](#projects-using-this-library)\n* [Other related projects](#other-related-projects)\n\n---\n\n## Installation\n\nThe most recent release can be installed using `pip`:\n\n    pip install python-miio\n\nAlternatively, you can install the latest development version from GitHub:\n\n    pip install git+https://github.com/rytilahti/python-miio.git\n\n**This project is currently ongoing [a major refactoring effort](https://github.com/rytilahti/python-miio/issues/1114).\nIf you are interested in controlling modern (MIoT) devices, you want to use the git version (or pre-releases, `pip install --pre python-miio`) until version 0.6.0 is released.**\n\n## Getting started\n\nThe `miiocli` command allows controlling supported devices from the\ncommand line, given that you know their IP addresses and tokens.\n\nThe simplest way to acquire the tokens is by using the `miiocli cloud` command,\nwhich fetches them for you from your cloud account using [micloud](https://github.com/Squachen/micloud/):\n\n    miiocli cloud\n    Username: example@example.com\n    Password:\n\n    == name of the device (Device offline ) ==\n        Model: example.device.v1\n        Token: b1946ac92492d2347c6235b4d2611184\n        IP: 192.168.xx.xx (mac: ab:cd:ef:12:34:56)\n        DID: 123456789\n        Locale: cn\n\nAlternatively, [see the docs](https://python-miio.readthedocs.io/en/latest/discovery.html#obtaining-tokens)\nfor other ways to obtain them.\n\nAfter you have your token, you can start controlling the device.\nFirst, you can use `info` to get some generic information from any (even yet unsupported) device:\n\n    miiocli device --ip \u003cip\u003e --token \u003ctoken\u003e info\n\n    Model: rockrobo.vacuum.v1\n    Hardware version: MW300\n    Firmware version: 1.2.4_16\n    Supported using: RoborockVacuum\n    Command: miiocli roborockvacuum --ip 127.0.0.1 --token 00000000000000000000000000000000\n    Supported by genericmiot: True\n\nNote that the command field which gives you the direct command to use for controlling the device.\nIf the device is supported by the `genericmiot` integration as stated in the output,\nyou can also use [`miiocli genericmiot` for controlling it](#controlling-modern-miot-devices).\n\nYou can always use `--help` to get more information about available\ncommands, subcommands, and their options.\n\n## Controlling modern (MIoT) devices\n\nMost modern (MIoT) devices are automatically supported by the `genericmiot` integration.\nInternally, it uses ([\"miot spec\"](https://home.miot-spec.com/)) files to find out about supported features,\nsuch as sensors, settings and actions.\n\nThis device model specific file will be downloaded (and cached locally) when you use the `genericmiot` integration for the first time.\n\nAll features of supported devices are available using the common commands `status` (to show the device state), `set` (to change the settings), `actions` to list available actions and `call` to execute actions.\n\n### Device status\n\nExecuting `status` will show the current device state, and also the accepted values for settings (marked with access `RW`):\n\n    miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 status\n\n    Service Light (light)\n            Switch Status (light:on, access: RW): False (\u003cclass 'bool'\u003e, )\n            Brightness (light:brightness, access: RW): 60 % (\u003cclass 'int'\u003e, min: 1, max: 100, step: 1)\n            Power Off Delay Time (light:off-delay-time, access: RW): 1:47:00 (\u003cclass 'int'\u003e, min: 0, max: 120, step: 1)\n\n### Changing settings\n\nTo change a setting, you need to provide the name of the setting (e.g., `light:brightness` in the example above):\n\n     miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 set light:brightness 0\n\n     [{'did': 'light:brightness', 'siid': 2, 'piid': 3, 'code': 0}]\n\n### Using actions\n\nMost devices will also offer actions:\n\n    miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 actions\n\n    Light (light)\n            light:toggle            Toggle\n            light:brightness-down   Brightness Down\n            light:brightness-up     Brightness Up\n\n\nThese can be executed using the `call` command:\n\n    miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 call light:toggle\n\n    {'code': 0, 'out': []}\n\n\nUse `miiocli genericmiot --help` for more available commands.\n\n**Note, using this integration requires you to use the git version until [version 0.6.0](https://github.com/rytilahti/python-miio/issues/1114) is released.**\n\n## Controlling older (miIO) devices\n\nOlder devices are mainly supported by their corresponding modules (e.g.,\n`roborockvacuum` or `fan`).\nThe `info` command will output the command to use, if the device is supported.\n\nYou can get the list of available commands for any given module by\npassing `--help` argument to it:\n\n    $ miiocli roborockvacuum --help\n\n    Usage: miiocli roborockvacuum [OPTIONS] COMMAND [ARGS]...\n\n    Options:\n      --ip TEXT       [required]\n      --token TEXT    [required]\n      --id-file FILE\n      --help          Show this message and exit.\n\n    Commands:\n      add_timer                Add a timer.\n      ..\n\nEach command invocation will automatically try to detect the device model.\nIn some situations (e.g., if the device has no cloud connectivity) this information\nmay not be available, causing an error.\nDefining the model manually allows to skip the model detection:\n\n    miiocli roborockvacuum --model roborock.vacuum.s5 --ip \u003cip\u003e --token \u003ctoken\u003e start\n\n## Troubleshooting\n\nThe `miiocli` tool has a `--debug` (`-d`) flag that can be used to enable debug logging.\nYou can repeat this multiple times (e.g., `-dd`) to increase the verbosity of the output.\n\nYou can find some solutions for the most common problems can be found in\n[Troubleshooting](https://python-miio.readthedocs.io/en/latest/troubleshooting.html)\nsection.\n\nIf you have any questions, feel free to create an issue or start a discussion on GitHub.\nAlternatively, you can check [our Matrix room](https://matrix.to/#/#python-miio-chat:matrix.org).\n\n\n## API usage\n\nAll functionalities of this library are accessible through the `miio`\nmodule. While you can initialize individual integration classes\nmanually, the simplest way to obtain a device instance is to use\n`DeviceFactory`:\n\n    from miio import DeviceFactory\n\n    dev = DeviceFactory.create(\"\u003cip address\u003e\", \"\u003ctoken\u003e\")\n    dev.status()\n\nThis will perform an `info` query to the device to detect the model,\nand construct the corresponding device class for you.\n\n### Introspecting supported features\n\nYou can introspect device classes using the following methods:\n\n* `sensors()` to obtain information about sensors.\n* `settings()` to obtain information about available settings that can be changed.\n* `actions()` to return information about available device actions.\n\nEach of these return [device descriptor\nobjects](https://python-miio.readthedocs.io/en/latest/api/miio.descriptors.html),\nwhich contain the necessary metadata about the available features to\nallow constructing generic interfaces.\n\n**Note: some integrations may not have descriptors defined. [Adding them is straightforward](https://python-miio.readthedocs.io/en/latest/contributing.html#status-containers), so feel free to contribute!**\n\n## Contributing\n\nWe welcome all sorts of contributions: from improvements\nor fixing bugs to improving the documentation. We have prepared [a short\nguide](https://python-miio.readthedocs.io/en/latest/contributing.html)\nfor getting you started.\n\n## Simulators\n\nIf you are a developer working on a project that communicates using the miIO/MIoT protocol,\nor want to contribute to this project but do not have a specific device,\nyou can use the simulators provided by this project.\nThe `miiocli` tool ships with [simple simulators for both miIO and MIoT](https://python-miio.readthedocs.io/en/latest/simulator.html) that can be used to test your code.\n\n## Supported devices\n\nWhile all MIoT devices are supported through the `genericmiot`\nintegration, this library supports also the following devices:\n\n* Xiaomi Mi Robot Vacuum V1, S4, S4 MAX, S5, S5 MAX, S6 Pure, M1S, S7\n* Xiaomi Mi Home Air Conditioner Companion\n* Xiaomi Mi Smart Air Conditioner A (xiaomi.aircondition.mc1, mc2, mc4, mc5)\n* Xiaomi Mi Air Purifier 2, 3H, 3C, 4, Pro, Pro H, 4 Pro (zhimi.airpurifier.m2, mb3, mb4, mb5, v7, vb2, va2), 4 Lite\n* Xiaomi Mi Air (Purifier) Dog X3, X5, X7SM (airdog.airpurifier.x3, x5, x7sm)\n* Xiaomi Mi Air Humidifier\n* Smartmi Air Purifier\n* Xiaomi Aqara Camera\n* Xiaomi Aqara Gateway (basic implementation, alarm, lights)\n* Xiaomi Mijia 360 1080p\n* Xiaomi Mijia STYJ02YM (Viomi)\n* Xiaomi Mijia 1C STYTJ01ZHM (Dreame)\n* Dreame F9, D9, L10 Pro, Z10 Pro\n* Dreame Trouver Finder\n* Xiaomi Mi Home (Mijia) G1 Robot Vacuum Mop MJSTG1\n* Xiaomi Roidmi Eve\n* Xiaomi Mi Smart WiFi Socket\n* Xiaomi Chuangmi camera (chuangmi.camera.ipc009, ipc013, ipc019, 038a2)\n* Xiaomi Chuangmi Plug V1 (1 Socket, 1 USB Port)\n* Xiaomi Chuangmi Plug V3 (1 Socket, 2 USB Ports)\n* Xiaomi Smart Power Strip V1 and V2 (WiFi, 6 Ports)\n* Xiaomi Philips Eyecare Smart Lamp 2\n* Xiaomi Philips RW Read (philips.light.rwread)\n* Xiaomi Philips LED Ceiling Lamp\n* Xiaomi Philips LED Ball Lamp (philips.light.bulb)\n* Xiaomi Philips LED Ball Lamp White (philips.light.hbulb)\n* Xiaomi Philips Zhirui Smart LED Bulb E14 Candle Lamp\n* Xiaomi Philips Zhirui Bedroom Smart Lamp\n* Huayi Huizuo Lamps\n* Xiaomi Universal IR Remote Controller (Chuangmi IR)\n* Xiaomi Mi Smart Pedestal Fan V2, V3, SA1, ZA1, ZA3, ZA4, ZA5 1C, P5, P9, P10, P11, P15, P18, P33, P39, P45\n* Xiaomi Rosou SS4 Ventilator (leshow.fan.ss4)\n* Xiaomi Mi Air Humidifier V1, CA1, CA4, CB1, MJJSQ, JSQ, JSQ1, JSQ001\n* Xiaomi Mi Water Purifier (Basic support: Turn on \u0026 off)\n* Xiaomi Mi Water Purifier D1, C1 (Triple Setting)\n* Xiaomi PM2.5 Air Quality Monitor V1, B1, S1\n* Xiaomi Smart WiFi Speaker\n* Xiaomi Mi WiFi Repeater 2\n* Xiaomi Mi Smart Rice Cooker\n* Xiaomi Smartmi Fresh Air System VA2 (zhimi.airfresh.va2), VA4 (va4), T2017 (t2017), A1 (dmaker.airfresh.a1)\n* Yeelight lights (see also [python-yeelight](https://gitlab.com/stavros/python-yeelight/))\n* Xiaomi Mi Air Dehumidifier\n* Xiaomi Tinymu Smart Toilet Cover\n* Xiaomi 16 Relays Module\n* Xiaomi Xiao AI Smart Alarm Clock\n* Smartmi Radiant Heater Smart Version (ZA1 version)\n* Xiaomi Mi Smart Space Heater\n* Xiaomiyoupin Curtain Controller (Wi-Fi) (lumi.curtain.hagl05)\n* Xiaomi Dishwasher (viomi.dishwasher.m02)\n* Xiaomi Xiaomi Mi Smart Space Heater S (zhimi.heater.mc2)\n* Xiaomi Xiaomi Mi Smart Space Heater 1S (zhimi.heater.za2)\n* Yeelight Dual Control Module (yeelink.switch.sw1)\n* Scishare coffee maker (scishare.coffee.s1102)\n* Qingping Air Monitor Lite (cgllc.airm.cgdn1)\n* Xiaomi Walkingpad A1 (ksmb.walkingpad.v3)\n* Xiaomi Smart Pet Water Dispenser (mmgg.pet_waterer.s1, s4, wi11)\n* Xiaomi Mi Smart Humidifer S (jsqs, jsq5)\n* Xiaomi Mi Robot Vacuum Mop 2 (Pro+, Ultra)\n\n*Feel free to create a pull request to add support for new devices as\nwell as additional features for already supported ones.*\n\n## Projects using this library\n\nIf you are using this library for your project, feel free to open a PR\nto get it listed here!\n\n### Home Assistant (official)\n\nHome Assistant uses this library to support several platforms\nout-of-the-box. This list is incomplete as the platforms (in\nparentheses) may also support other devices listed above.\n\n* [Xiaomi Mi Robot Vacuum](https://home-assistant.io/components/vacuum.xiaomi_miio/) (vacuum)\n* [Xiaomi Philips Light](https://home-assistant.io/components/light.xiaomi_miio/) (light)\n* [Xiaomi Mi Air Purifier and Air Humidifier](https://home-assistant.io/components/fan.xiaomi_miio/) (fan)\n* [Xiaomi Smart WiFi Socket and Smart Power Strip](https://home-assistant.io/components/switch.xiaomi_miio/) (switch)\n* [Xiaomi Universal IR Remote Controller](https://home-assistant.io/components/remote.xiaomi_miio/) (remote)\n* [Xiaomi Mi Air Quality Monitor (PM2.5)](https://home-assistant.io/components/sensor.xiaomi_miio/) (sensor)\n* [Xiaomi Aqara Gateway Alarm](https://home-assistant.io/components/alarm_control_panel.xiaomi_miio/) (alarm_control_panel)\n* [Xiaomi Mi WiFi Repeater 2](https://www.home-assistant.io/components/device_tracker.xiaomi_miio/) (device_tracker)\n\n### Home Assistant (custom)\n\n* [Xiaomi Mi Home Air Conditioner Companion](https://github.com/syssi/xiaomi_airconditioningcompanion)\n* [Xiaomi Mi Smart Pedestal Fan](https://github.com/syssi/xiaomi_fan)\n* [Xiaomi Mi Smart Rice Cooker](https://github.com/syssi/xiaomi_cooker)\n* [Xiaomi Raw Sensor](https://github.com/syssi/xiaomi_raw)\n* [Xiaomi MIoT Devices](https://github.com/ha0y/xiaomi_miot_raw)\n* [Xiaomi Miot Auto](https://github.com/al-one/hass-xiaomi-miot)\n\n## Other related projects\n\nThis is a list of other projects around the Xiaomi ecosystem that you\ncan find interesting. Feel free to submit more related projects.\n\n* [dustcloud](https://github.com/dgiese/dustcloud) (reverse engineering and rooting xiaomi devices)\n* [Valetudo](https://github.com/Hypfer/Valetudo) (cloud free vacuum firmware)\n* [micloud](https://github.com/Squachen/micloud) (library to access xiaomi cloud services, can be used to obtain device tokens)\n* [micloudfaker](https://github.com/unrelentingtech/micloudfaker) (dummy cloud server, can be used to fix powerstrip status requests when without internet access)\n* [Xiaomi Cloud Tokens Extractor](https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor) (an alternative way to fetch tokens from the cloud)\n* [Your project here? Feel free to open a PR!](https://github.com/rytilahti/python-miio/pulls)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frytilahti%2Fpython-miio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frytilahti%2Fpython-miio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frytilahti%2Fpython-miio/lists"}