Esta biblioteca (y la herramienta cli que la acompaña, miiocli
) se puede utilizar para controlar dispositivos que utilizan los protocolos miIO y MIoT de Xiaomi.
Este es un esfuerzo voluntario impulsado por la comunidad y no está afiliado a ninguna de las empresas cuyos dispositivos son compatibles con esta biblioteca. Los informes de problemas y las solicitudes de extracción son bienvenidos. ¡Consulte cómo contribuir!
La documentación completa está disponible en python-miio.readthedocs.io.
La versión más reciente se puede instalar usando pip
:
pip install python-miio
Alternativamente, puedes instalar la última versión de desarrollo desde GitHub:
pip install git+https://github.com/rytilahti/python-miio.git
Este proyecto actualmente lleva a cabo un importante esfuerzo de refactorización. Si está interesado en controlar dispositivos modernos (MIoT), desea utilizar la versión de git (o versiones preliminares, pip install --pre python-miio
) hasta que se publique la versión 0.6.0.
El comando miiocli
permite controlar los dispositivos compatibles desde la línea de comando, siempre que conozca sus direcciones IP y tokens.
La forma más sencilla de adquirir los tokens es mediante el comando miiocli cloud
, que los recupera de su cuenta en la nube mediante 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
Alternativamente, consulte los documentos para conocer otras formas de obtenerlos.
Una vez que tengas tu token, puedes comenzar a controlar el dispositivo. Primero, puede usar info
para obtener información genérica de cualquier dispositivo (incluso aún no compatible):
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
Tenga en cuenta que el campo de comando le brinda el comando directo que debe usar para controlar el dispositivo. Si el dispositivo es compatible con la integración genericmiot
como se indica en el resultado, también puede usar miiocli genericmiot
para controlarlo.
Siempre puede utilizar --help
para obtener más información sobre los comandos y subcomandos disponibles y sus opciones.
La mayoría de los dispositivos modernos (MIoT) son compatibles automáticamente con la integración genericmiot
. Internamente, utiliza archivos ("miot spec") para conocer las funciones compatibles, como sensores, configuraciones y acciones.
Este archivo específico del modelo de dispositivo se descargará (y almacenará en caché localmente) cuando utilice la integración genericmiot
por primera vez.
Todas las funciones de los dispositivos compatibles están disponibles mediante los comandos comunes status
(para mostrar el estado del dispositivo), set
(para cambiar la configuración), actions
para enumerar las acciones disponibles y call
para ejecutar acciones.
status
de ejecución mostrará el estado actual del dispositivo y también los valores aceptados para la configuración (marcados con acceso 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)
Para cambiar una configuración, debe proporcionar el nombre de la configuración (por ejemplo, light:brightness
en el ejemplo anterior):
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 set light:brightness 0
[{'did': 'light:brightness', 'siid': 2, 'piid': 3, 'code': 0}]
La mayoría de los dispositivos también ofrecerán acciones:
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
Estos se pueden ejecutar usando el comando call
:
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 call light:toggle
{'code': 0, 'out': []}
Utilice miiocli genericmiot --help
para obtener más comandos disponibles.
Tenga en cuenta que el uso de esta integración requiere que utilice la versión de git hasta que se publique la versión 0.6.0.
Los dispositivos más antiguos se sustentan principalmente en sus módulos correspondientes (p. ej., roborockvacuum
o fan
). El comando info
generará el comando a usar, si el dispositivo es compatible.
Puede obtener la lista de comandos disponibles para cualquier módulo determinado pasándole el argumento --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.
..
Cada invocación de comando intentará detectar automáticamente el modelo del dispositivo. En algunas situaciones (por ejemplo, si el dispositivo no tiene conectividad a la nube) es posible que esta información no esté disponible, lo que provoca un error. Definir el modelo manualmente permite omitir la detección del modelo:
miiocli roborockvacuum --model roborock.vacuum.s5 --ip <ip> --token <token> start
La herramienta miiocli
tiene un indicador --debug
( -d
) que se puede utilizar para habilitar el registro de depuración. Puede repetir esto varias veces (por ejemplo, -dd
) para aumentar la detalle de la salida.
Puede encontrar algunas soluciones para los problemas más comunes en la sección Solución de problemas.
Si tiene alguna pregunta, no dude en crear un problema o iniciar una discusión en GitHub. Alternativamente, puedes consultar nuestra sala Matrix.
Se puede acceder a todas las funcionalidades de esta biblioteca a través del módulo miio
. Si bien puedes inicializar clases de integración individuales manualmente, la forma más sencilla de obtener una instancia de dispositivo es usar DeviceFactory
:
from miio import DeviceFactory
dev = DeviceFactory.create("<ip address>", "<token>")
dev.status()
Esto realizará una consulta info
al dispositivo para detectar el modelo y construirá la clase de dispositivo correspondiente para usted.
Puede realizar una introspección de clases de dispositivos utilizando los siguientes métodos:
sensors()
para obtener información sobre los sensores.settings()
para obtener información sobre las configuraciones disponibles que se pueden cambiar.actions()
para devolver información sobre las acciones disponibles del dispositivo.Cada uno de estos devuelve objetos descriptores de dispositivo, que contienen los metadatos necesarios sobre las funciones disponibles para permitir la construcción de interfaces genéricas.
Nota: es posible que algunas integraciones no tengan descriptores definidos. Agregarlos es sencillo, ¡así que siéntete libre de contribuir!
Damos la bienvenida a todo tipo de contribuciones: desde mejoras o corrección de errores hasta mejorar la documentación. Hemos preparado una breve guía para empezar.
Si es un desarrollador que trabaja en un proyecto que se comunica mediante el protocolo miIO/MIoT, o desea contribuir a este proyecto pero no tiene un dispositivo específico, puede utilizar los simuladores proporcionados por este proyecto. La herramienta miiocli
viene con simuladores simples tanto para miIO como para MIoT que pueden usarse para probar su código.
Si bien todos los dispositivos MIoT son compatibles a través de la integración genericmiot
, esta biblioteca también admite los siguientes dispositivos:
No dudes en crear una solicitud de extracción para agregar compatibilidad con nuevos dispositivos, así como funciones adicionales para los que ya son compatibles.
Si está utilizando esta biblioteca para su proyecto, no dude en abrir un PR para incluirla aquí.
Home Assistant utiliza esta biblioteca para admitir varias plataformas listas para usar. Esta lista está incompleta ya que las plataformas (entre paréntesis) también pueden admitir otros dispositivos enumerados anteriormente.
Esta es una lista de otros proyectos relacionados con el ecosistema Xiaomi que pueden resultar interesantes. No dudes en enviar más proyectos relacionados.