Эту библиотеку (и сопровождающий ее инструмент cli, miiocli
) можно использовать для управления устройствами с использованием протоколов Xiaomi miIO и MIoT.
Это добровольная инициатива сообщества, не связанная ни с одной из компаний, чьи устройства поддерживаются этой библиотекой. Отчеты о проблемах и запросы на включение приветствуются, см. вклад!
Полная документация доступна по адресу python-miio.readthedocs.io.
Самый последний выпуск можно установить с помощью pip
:
pip install python-miio
Альтернативно вы можете установить последнюю версию разработки с GitHub:
pip install git+https://github.com/rytilahti/python-miio.git
В настоящее время этот проект находится в стадии масштабного рефакторинга. Если вы заинтересованы в управлении современными (MIoT) устройствами, вам нужно использовать версию git (или предварительные версии, pip install --pre python-miio
) до тех пор, пока не будет выпущена версия 0.6.0.
Команда miiocli
позволяет управлять поддерживаемыми устройствами из командной строки, если вы знаете их IP-адреса и токены.
Самый простой способ получить токены — использовать miiocli cloud
, которая извлекает их для вас из вашей облачной учетной записи с помощью micloud:
miiocli cloud
Username: [email protected]
Password:
== name of the device (Device offline ) ==
Model: example.device.v1
Token: b1946ac92492d2347c6235b4d2611184
IP: 192.168.xx.xx (mac: ab:cd:ef:12:34:56)
DID: 123456789
Locale: cn
Альтернативно, ознакомьтесь с документацией, чтобы узнать о других способах их получения.
После того, как вы получите токен, вы сможете начать управлять устройством. Во-первых, вы можете использовать info
для получения общей информации с любого (даже неподдерживаемого) устройства:
miiocli device --ip <ip> --token <token> info
Model: rockrobo.vacuum.v1
Hardware version: MW300
Firmware version: 1.2.4_16
Supported using: RoborockVacuum
Command: miiocli roborockvacuum --ip 127.0.0.1 --token 00000000000000000000000000000000
Supported by genericmiot: True
Обратите внимание, что поле команды дает вам прямую команду для управления устройством. Если устройство поддерживается интеграцией genericmiot
, как указано в выводе, вы также можете использовать miiocli genericmiot
для управления им.
Вы всегда можете использовать --help
, чтобы получить дополнительную информацию о доступных командах, подкомандах и их параметрах.
Большинство современных устройств (MIoT) автоматически поддерживаются благодаря интеграции genericmiot
. Внутри он использует файлы («спецификации miot»), чтобы узнать о поддерживаемых функциях, таких как датчики, настройки и действия.
Этот файл, специфичный для модели устройства, будет загружен (и кэширован локально) при первом использовании интеграции genericmiot
.
Все функции поддерживаемых устройств доступны с помощью общих команд status
(для отображения состояния устройства), set
(для изменения настроек), actions
для вывода списка доступных действий и call
для выполнения действий.
status
выполнения покажет текущее состояние устройства, а также принятые значения настроек (отмечены знаком доступа RW
):
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 status
Service Light (light)
Switch Status (light:on, access: RW): False (<class 'bool'>, )
Brightness (light:brightness, access: RW): 60 % (<class 'int'>, min: 1, max: 100, step: 1)
Power Off Delay Time (light:off-delay-time, access: RW): 1:47:00 (<class 'int'>, min: 0, max: 120, step: 1)
Чтобы изменить настройку, вам необходимо указать имя настройки (например, light:brightness
в приведенном выше примере):
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 set light:brightness 0
[{'did': 'light:brightness', 'siid': 2, 'piid': 3, 'code': 0}]
Большинство устройств также предлагают действия:
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 actions
Light (light)
light:toggle Toggle
light:brightness-down Brightness Down
light:brightness-up Brightness Up
Их можно выполнить с помощью команды call
:
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 call light:toggle
{'code': 0, 'out': []}
Используйте miiocli genericmiot --help
для получения дополнительных доступных команд.
Обратите внимание: для использования этой интеграции необходимо использовать версию git до тех пор, пока не будет выпущена версия 0.6.0.
Старые устройства в основном поддерживаются соответствующими модулями (например, roborockvacuum
или fan
). Команда info
выведет команду для использования, если устройство поддерживается.
Вы можете получить список доступных команд для любого данного модуля, передав ему аргумент --help
:
$ miiocli roborockvacuum --help
Usage: miiocli roborockvacuum [OPTIONS] COMMAND [ARGS]...
Options:
--ip TEXT [required]
--token TEXT [required]
--id-file FILE
--help Show this message and exit.
Commands:
add_timer Add a timer.
..
Каждый вызов команды автоматически пытается определить модель устройства. В некоторых ситуациях (например, если устройство не имеет подключения к облаку) эта информация может быть недоступна, что приводит к ошибке. Определение модели вручную позволяет пропустить определение модели:
miiocli roborockvacuum --model roborock.vacuum.s5 --ip <ip> --token <token> start
Инструмент miiocli
имеет флаг --debug
( -d
), который можно использовать для включения ведения журнала отладки. Вы можете повторить это несколько раз (например, -dd
), чтобы увеличить детализацию вывода.
Некоторые решения наиболее распространенных проблем можно найти в разделе «Устранение неполадок».
Если у вас есть какие-либо вопросы, не стесняйтесь создать проблему или начать обсуждение на GitHub. Кроме того, вы можете посетить нашу комнату «Матрица».
Все функции этой библиотеки доступны через модуль miio
. Хотя вы можете инициализировать отдельные классы интеграции вручную, самый простой способ получить экземпляр устройства — использовать DeviceFactory
:
from miio import DeviceFactory
dev = DeviceFactory.create("<ip address>", "<token>")
dev.status()
Это выполнит info
запрос к устройству для определения модели и создаст для вас соответствующий класс устройства.
Вы можете проанализировать классы устройств, используя следующие методы:
sensors()
для получения информации о датчиках.settings()
для получения информации о доступных настройках, которые можно изменить.actions()
для возврата информации о доступных действиях устройства.Каждый из этих объектов возвращает дескриптор устройства, который содержит необходимые метаданные о доступных функциях, позволяющие создавать универсальные интерфейсы.
Примечание. Для некоторых интеграций могут не быть определены дескрипторы. Добавить их несложно, так что не стесняйтесь вносить свой вклад!
Мы приветствуем любой вклад: от улучшений или исправления ошибок до улучшения документации. Мы подготовили краткое руководство для начала.
Если вы являетесь разработчиком, работающим над проектом, который обменивается данными с использованием протокола miIO/MIoT, или хотите внести свой вклад в этот проект, но у вас нет конкретного устройства, вы можете использовать симуляторы, предоставленные этим проектом. Инструмент miiocli
поставляется с простыми симуляторами для miIO и MIoT, которые можно использовать для тестирования вашего кода.
Хотя все устройства MIoT поддерживаются посредством интеграции genericmiot
, эта библиотека также поддерживает следующие устройства:
Не стесняйтесь создавать запрос на включение, чтобы добавить поддержку новых устройств, а также дополнительные функции для уже поддерживаемых.
Если вы используете эту библиотеку для своего проекта, смело открывайте PR, чтобы разместить ее здесь!
Home Assistant использует эту библиотеку для поддержки нескольких платформ «из коробки». Этот список неполон, поскольку платформы (в скобках) также могут поддерживать другие устройства, перечисленные выше.
Это список других проектов экосистемы Xiaomi, которые могут вас заинтересовать. Не стесняйтесь присылать больше похожих проектов.