Controlando luces Yeelight con Voice Kit

Con ayuda de la la librería python-yeelight

Siguiendo con el Google Voice Kit hoy vamos a modificar las demos incluídas para, controlar las luces Xiaomi Yeelight con Voice Kit

309

Ahora que ya tenemos funcionando nuestro Voice Kit, pensamos ¿y ahora? Pues a mi se me ha ocurrido controlar las luces Xiaomi Yeelight con Voice Kit utilizando Google Assitant.  ¿Por qué Google Assistant? Pues porque aunque lo ideal sería utilizar la Cloud Speech API aquí, en Europa, no la tenemos disponible para utilizar con Voice Kit. Además, todo esto será en inglés ya que todavía no tenemos disponible el idioma español para Voice Kit aunque sí lo esté en Google Assistant.

¿Qué hace el script?

Con este script podremos controlar los siguientes parámetros de nuestras luces Yeelight (probado con Yeelight Bulb RGBW y Yeelight Bulb Mono):

  • Encender o apagar una luz
  • Cambiar el color de una luz
  • Controlar el nivel el brillo
  • Ajustar la temperatura del color

El script detectará automáticamente si nuestra bombilla es compatible con cada una de dichas acciones.

Además implementaremos las acciones locales incluidas en el script de demostración  assistant_library_with_local_commands_demo.py

  • Decir nuestra IP local
  • Reiniciar la Raspberry Pi
  • Apagar la Raspberry Pi

Por último, podremos activar la escucha tanto con la palabra clave “OK Google” como con el botón.

¿Cómo lo hace?

Para hacer esto, en primer lugar, necesitaremos activar el “LAN Mode” (aka. Developer mode)  en nuestras bombillas Yeelight.

Combinaremos dos de los scripts demo. Partiremos del script   assistant_library_with_button_demo.py en el que nuestro asistente se ejecutará en segundo plano permitiendos utilizar tanto la palabra clave cómo el botón. Este script lo combinaremos con el anteriormente mencionado al que añadiremos nuestras propias acciones. Esta combinación de scripts quedaría tal que así:

Cómo podemos ver en las líneas destacadas (lo que hemos añadido) lo primero que hacemos es importar “audio” para poder convertir texto a voz.

En el loop de eventos del asistente añadimos una condición para que cuando al terminar reconocimiento de voz compruebe si en lo que hemos dicho hay alguna palabra clave que lance uno de los comandos locales definidos. Para ello pasamos a la función handle_events(text)  el texto que ha reconocido, en minúsculas.

Por último copiamos las funciones que ejecutan cada uno de los comandos locales.

En este momento, tenemos un asistente que se activa tanto por la voz como pulsando el botón y que además soporta comandos locales. Ahora ampliaremos este script con la libreria python-yeelight para controlar nuestras luces.

Integrando Yeelight con Voice Kit

Para poder controlar las luces Yeelight con Voice Kit necesitamos instalar la librería python-yeelight. Para ello abriremos una terminal y ejecutaremos  pip install yeelight

Con la librería instalada lo primero que tenemos que hacer es que nuestro script busque las bombillas que tenemos en nuestra red local. Para esto crearemos un función que busque las bombillas, compruebe si tienen nombre y nos devuelva una lista de las mismas:

En esta parte del script hacemos uso del comando  discover_bulbs() de la librería python-yeelight para descubrir las bombillas conectadas. Este comando produce como salida una lista de diccionarios con las bombillas encontradas:

Una vez tenemos la lista la recorremos para comprobar que todas las bombillas tienen un nombre (será necesario más adelante) si una de ellas no tiene nombre:

  1. Asignamos la bombilla objetivo a una variable  target_bulb = Bulb(bulb['ip'])
  2. Pedimos al usuario que introduzca un nombre para la bombilla  bulb_name = input('Enter name of the bulb: ')
  3. Asignamos el nombre a nuestra bombilla objetivo  target_bulb.set_name(bulb_name)
  4. Actualizamos la lista de bombillas

Controlando las bombillas Yeelight con Voice Kit

Ahora que ya sabemos que bombillas tenemos conectadas pasamos a ver cómo haremos para controlarlas. Para ello, detectaremos cuándo se nombra una bombilla añadiendo la siguiente condición en la función  handle_event(text, my)

Si se encuentra el nombre de una bombilla procesaremos el texto en busca de la acción a realizar en la función  process_yeelight(text) .  Dicha función contiene condiciones para discriminar las palabras clave de cada acción así como para determinar si la bombilla es o no compatible con dicha acción:

Comentemos un poco esta función (asumiremos que lamp es el nombre de la bombilla).

Analizando el script

Lo primero que hacemos es definir un diccionario de colores con sus nombres y valores RGB. Estos colores serán los colores que podremos poner en la bombilla mediante comandos de voz. Podemos añadir los que queramos. Por otra parte, la variable answer almacenará la respuesta que nos dará el asistente una vez evaluadas todas las condiciones siguientes.

En primer lugar tenemos la condición para encender o apagar una bombilla. Todas las condiciones funcionaran más o menos igual. Se trata de buscar una palabra clave en el texto, en este caso turn o toggle y si se detecta esa palabra buscar otra para acotar la acción en este caso encendido (on), apagado (off) o conmutar (toggle). Se aceptarían frases como “Turn on lamp” o “Toggle lamp“.

A continuación tenemos el brillo. Funciona exactamente igual al anterior. Simplemente la palabra clave en esta ocasión es brightnessbright. Si decimos “set lamp to full brightness” el brillo se ajustará al 100%, si no tendremos que decir algo así como “Set lamp brightess to 50%” para con un regex recoger dicho valor y pasarlo a la función  target_bulb.set_brightness(value) . Si no se pasa valor de brillo se asume 0 y se apaga la bombilla.

En cuanto al color RGB, comprobaremos que el texto contiene la palabra “color” o “RGB” pero no “temperature” o “temp“. Si es así chequeamos si el texto contiene alguna palabra que se corresponda con una clave en la lista colors y pasamos dichos valores a la bombilla  target_bulb.set_rgb(colors[key][0],colors[key][1],colors[key][2]) . Si no pasamos color o no se encuentra avisamos al usuario con un mensaje de voz.

La temperatura de color funciona igual que el brillo. Se aceptan frases tipo “Set lamp color temp to 2000“. Se comprobará si la temperatura que pasamos (y recogemos con un regex) está entre los límites permitidos y si lo está la pasamos a la bombilla con  target_bulb.set_color_temp(value) .

Demostración del script

Si habéis leído hasta aquí tal vez queráis ver cómo funciona el script. Pues bien, aquí os dejo una demostración en video de cómo controlar bombillas Yeelight con Voice Kit y el script que acabamos de crear.

Esto es sólo una muestra de lo que python-yeelight puede hacer, ahora os toca a vosotros experimentar. Podéis descargar el script completo de Github y no os olvidéis de compartir el post si os ha gustado.

También podría gustarte
Comentarios

Si, el Agente 404 utiliza cookies. Al utilizar este sitio aceptas su uso. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar