
Home Assistant es una aplicación de código abierto popular para organizar una casa inteligente. La primera experiencia del autor con Home Assistant se basa en un intento de integrar una olla arrocera inteligente. El autor intentará describir los principales componentes y características de esta aplicación, que tuvo la oportunidad de conocer paso a paso. El artículo es de alguna manera una revisión, de alguna manera una guía para aquellos que desean comenzar a conocer a Home Assistant.
Para aquellos que tienen poco tiempo libre, les aconsejo que se salten el dicho, el primer capítulo, y vayan directamente al segundo. Solo necesita saber que trabajaremos con una olla arrocera china inteligente de Xiaomi.
Olla arrocera inteligente
Una olla arrocera es obviamente una olla arrocera. Wiki nos muestra vapores de arroz cerámicos del Museo Británico que datan de 1250 a. C. En 1945, Mitsubishi se convirtió en la primera compañía japonesa de ollas arroceras caseras. Nuestro modelo, la arrocera de Xiaomi, puede cocinar no solo arroz. “Este es un gran dispositivo para hacer no solo arroz, sino también otros tipos de platos. Puede cocinar sopas, pasteles y mucho más ”, dice el anuncio. Pero lo más importante es la presencia de un módulo wi-fi, software con capacidades de automatización y más de 200 recetas instaladas en software. "El camino hacia una casa inteligente a través del estómago es correcto", pensó el autor, y decidió.
Xiaomi Rice Cooker, como corresponde a un dispositivo digital, es externamente muy atractivo, agrada con su forma redonda y minimalismo general. Para configurarlo y usarlo, el fabricante ofrece la aplicación Mi Home. Después de registrar Mi cuenta, el programa encuentra fácilmente un nuevo dispositivo y usted lo registra en su red local. La interfaz de la aplicación no es la peor, proporciona herramientas básicas de automatización y puede recibir notificaciones de los dispositivos. Sin embargo, hay inconvenientes significativos. No todos pueden estar contentos con enviar información al desarrollador sobre cada clic de usuario. Y a menudo se encuentra una expresión desagradable en el color nacional. En lugar de más de 200 recetas, solo cuatro están traducidas y disponibles en idiomas extranjeros. El resto es exclusivamente para el pueblo chino. Cuando su arrocera "inteligente" no puede cumplir con todos los deberes culinarios prometidos, entonces, se da cuenta, se pone triste. Después de deambular por un tiempo en Internet, un autor triste se encontró con el próximo
proyecto interesante (beneficios eternos para el autor). Que resultó estar dedicado al desarrollo de un módulo para un determinado Asistente de inicio.
Asistente de hogar
Primero, alguna información general. Como se nos dice en
la página de inicio de HA , "Este es un software de código abierto para la automatización del hogar inteligente que se centra en la gestión local y la privacidad. Desarrollado por el trabajo de una comunidad abierta de entusiastas, es ideal para trabajar en una Raspberry Pi o servidor local ". El proyecto tiene más de cinco años, usa python y una licencia Apache 2.0. La versión de lanzamiento al momento de escribir estas líneas es 0.99.3.
HA utiliza módulos separados (integraciones o componentes) para administrar dispositivos. Crear uno es bastante simple. En el sitio puede encontrar un catálogo de los módulos
principales (aprobados y respaldados por la comunidad). Entre su número total (1485 piezas), hay completamente diferentes, los nombres amazon, google, xiaomi e incluso una vez que yandex figuran en el catálogo.
Intentemos
instalar HA en un entorno virtual en el escritorio de Linux. Necesitaremos python3 y el administrador de paquetes pip.
python3 -m venv homeassistant
Después de eso, la
GUI HA estará disponible en
http: // localhost: 8123 . Cuando inicie sesión por primera vez, deberá crear una cuenta de usuario. La interfaz web de HA es bastante voluminosa. Un par de elementos importantes que vale la pena mencionar al principio son la pestaña Configuración → General, donde puede volver a cargar fácilmente los archivos de configuración o el propio servidor. Además de la página de información en la lista de herramientas para desarrolladores, donde puede ver los registros de errores.
HA almacena todos los datos de usuario necesarios, en el caso de Linux, en la carpeta de configuración "~ / .homeassistant". Los archivos de configuración están escritos en formato
YAML , y el principal es "configuration.yaml". Combina los datos de módulos, automatización, etc. La función de importación le permite dividir la configuración en archivos separados organizados lógicamente. Los módulos se almacenan en subcarpetas "componentes" (integrados) y "componentes personalizados".
Este conocimiento debería ser suficiente para que podamos instalar un nuevo módulo. Copie la carpeta "xiaomi_cooker" de nuestro repositorio en nuestros "~ / .homeassistant / custom_components". De acuerdo con la descripción, agregue la configuración del módulo al archivo "configuration.yaml":
Listo Después de reiniciar HA, aparecerá una nueva entrada de módulo en la sección General → Integraciones de la interfaz web.
Cualquier módulo es un cierto conjunto de objetos (entidades) y servicios (servicios, en esencia, funciones). Los objetos almacenan diversos datos recibidos de los dispositivos. Por ejemplo, sensor.xiaomi_cooker_temperature es la temperatura de la olla arrocera, sun.sun es la posición del sol. Los datos de un objeto se expresan mediante un valor básico: estado (estado) y un conjunto arbitrario de atributos adicionales (atributos). Los servicios se utilizan para transferir comandos y valores a los dispositivos. Por ejemplo, xiaomi_cooker.start - el comando para iniciar la operación de la olla arrocera, o homeassistant.check_config - la inicialización de la búsqueda de errores en los archivos de configuración de HA. La lista de Herramientas para desarrolladores de la interfaz web contiene la sección Servicios, donde puede ver la lista de servicios disponibles y jugar con sus llamadas. Cerca está la sección de Estados, donde, en consecuencia, puede ver y cambiar los valores de los objetos. Cabe señalar que los cambios en los valores de los objetos en la sección de Estados son unilaterales. Es decir si, por ejemplo, cambia el estado del objeto lights.state aquí de apagado a encendido, esto no afectará el estado verdadero del dispositivo, y la próxima vez que se actualicen los datos del dispositivo, el valor del objeto se sobrescribirá a real.
Automatización
La principal herramienta de administración para un hogar inteligente es la
automatización . Puede agregarlos y editarlos utilizando la interfaz gráfica en la sección General → Automatización o directamente en el archivo "automations.yaml". La función principal de la automatización es llamar a los servicios cuando se cumplen ciertas condiciones. Herramientas básicas para establecer las condiciones para invocar el valor de los objetos, incl. datos de tiempo. Hay soluciones un poco más específicas, como los eventos. Como un simple ejemplo de automatización, le daremos un código que actualiza los datos de más del autor con un período de 15 minutos:
Cabe señalar que hasta ahora no toda la automatización disponible (por ejemplo, la anterior) se puede configurar sin editar el código yaml a través de la interfaz gráfica, pero los desarrolladores dicen que están trabajando activamente para eliminar este inconveniente.
Templar
Después de la automatización, es hora de hablar sobre
plantillas (plantillas). Varios elementos de configuración en archivos yaml le permiten usar inserciones en
el lenguaje de script jinja2 . Muchos de estos elementos están unidos por el nombre común 'Plantillas', como service_template o trigger_template. Mediante el uso de plantillas, tenemos acceso a los valores de los
objetos en HA y la capacidad de utilizar estos datos en expresiones matemáticas y lógicas complejas, lo que amplía enormemente nuestro potencial. Como ejemplo, tomemos un código un poco más complicado de sensor.umpiro_charge escrito en "configuration.yaml". Este es
template_sensor , es decir, "un sensor que forma datos basados en los valores de otros objetos". Nuestro sensor será un análogo de una batería descargada gradualmente:
Dejamos entidad_id vacía porque ya hemos agregado automatización que causará independientemente la actualización de los datos del objeto.
Scripts de Python
A su vez, los scripts de Python son una herramienta simple para crear nuevos servicios. Después de agregar la línea: "script de python:" a "configuration.yaml", todos los archivos con la extensión ".py" que colocamos en la carpeta "~ / .homeassistant / python_scripts" estarán disponibles como servicios con los nombres "python_scripts. < nombre_archivo> ". Su código se ejecuta en un entorno predefinido, donde las variables de datos y hass nos dan acceso a los argumentos de la llamada de servicio, así como a los objetos y servicios de HA. Como ejemplo, le damos el código del archivo "charge_set.py" para el servicio "python_scripts.charge_set". Su función será establecer la carga de nuestra batería:
python_scripts / charge_set.py Creando integración
Todo lo que hicimos con la ayuda de plantillas y scripts de Python, quizás sería más fácil hacerlo escribiendo un módulo separado. Como ya se mencionó, los módulos no oficiales se almacenan en la carpeta "custom_components". En el futuro, necesitaremos un objeto que almacene información sobre la receta actual de nuestra olla arrocera y un servicio que le permita cambiar esta información. Basado en un
ejemplo de la documentación, crearemos un nuevo módulo para esto, "overmind". El primer paso es el archivo custom_components / overmind / __ init__.py:
componentes_personalizados / overmind / __ init__.py Después de eso, informaremos el nuevo módulo al archivo de configuración "configuration.yaml", agregando una línea con el nombre del módulo: "overmind:". El problema está resuelto.
Lovelace ui
Este es el nombre del
extremo frontal utilizado HA. Esta interfaz gráfica, a través de la cual se invita a un usuario común a controlar una casa inteligente, es la página principal de la interfaz web HA. La interfaz LUI está formada por tarjetas de varios tipos, que pueden reflejar los valores de los objetos, servir para llamar funciones y otras tareas. Las tarjetas se pueden distribuir en páginas (ver), por analogía con los marcadores del navegador. La configuración está convenientemente organizada a través de la misma interfaz gráfica, pero también es accesible a través del código yaml, para el cual también hay un editor de texto incorporado. Le recomiendo que mire la página
https://demo.home-assistant.io/ , donde hay varios ejemplos diferentes de configuraciones LUI, y donde puede verlos, hacer clic y modificarlos fácilmente.
Ejemplo de configuración de GUIHablando de las deficiencias de la interfaz, desafortunadamente, los propios desarrolladores admiten que el proyecto está tratando de sentarse simultáneamente en las sillas del escritorio y el teléfono inteligente. A LUI, por defecto, le gusta determinar de forma independiente la ubicación y el tamaño de las tarjetas, lo que a veces puede convertir una página que se ve normal en el monitor en un desastre en la pantalla del teléfono inteligente, y viceversa. Existen algunas herramientas simples para simplificar la interfaz, pero, en mi experiencia, no siempre son efectivas.
Creo que no tiene mucho sentido describir la creación de una interfaz utilizando herramientas gráficas, por lo que daré algunos ejemplos en forma del código yaml que utilicé. Después de haber creado una página separada (vista) para nuestra olla arrocera, intentaremos llenarla con los elementos más necesarios para que no cause rechazo al usar la pantalla del teléfono inteligente.
Aquí probaremos esas herramientas de pedido de interfaz muy simples, estas son horizontal-stack y vertical-stack. Primero, cree una pila vertical a partir de tarjetas de tipos entidad-botón y sensor. El primero servirá para lanzar nuestra olla arrocera, el segundo para mostrar la temperatura:
Home Assistant incluye un archivo de
iconos de diseño de
materiales que, a través de los nombres apropiados (por ejemplo, mdi: selection), se pueden usar en elementos de configuración. La secuencia de comandos (en este caso, no python-, sino yaml-), que solíamos llamar al servicio, es otra herramienta HA conveniente.
Ahora combine la pila vertical anterior con la tarjeta de retrato nuestra en la pila ahora horizontal. Todo será igual de simple:
Aquí debe marcar la línea 'imagen:'. Todos los archivos que ponemos en la carpeta '~ / .homeassistant / www' están disponibles en el enlace
http: // localhost / local / filename .
El siguiente paso es trabajar un poco en el botón de llamada de servicio que creamos. Sería conveniente para nosotros si funcionara como un interruptor de palanca, es decir encendido / apagado, y no de la forma en que se hace ahora. Esto se puede lograr mediante el uso de una tarjeta de tipo condicional, cuya visualización en la pantalla se puede ajustar mediante la configuración de ciertas condiciones. A continuación se muestra el código de la tarjeta, que es el botón para apagar la olla arrocera y solo es visible si la olla arrocera está en proceso de preparar el plato:
Reescribiendo el código del botón de encendido creado previamente de una manera similar, y combinándolo con esto, obtenemos un botón que funciona tanto dentro como fuera.
Complementamos nuestro interés con otra tarjeta, con el tiempo hasta el final de la cocción (similar a la tarjeta de temperatura), y una más con los detalles de la receta (personalizada: tarjeta de receta) mostrada. Como resultado, obtenemos algo como esto:
Tarjetas personalizadas
Home Assistant, además de la riqueza del conjunto integrado de tipos de tarjeta, por supuesto, brinda la posibilidad de crear las suyas propias. Dichas tarjetas se denominan tarjetas personalizadas y se usa javascript para crearlas.
Aquí hay dos ejemplos de código simple. Es fácil encontrar tarjetas preparadas creadas por varios
entusiastas en la red, y si desea experimentar usted mismo, será útil descubrir que hay
módulos js especiales creados para simplificar el trabajo de escribir otras nuevas. Mi experiencia con javascript continúa queriendo menos, así que, como ejemplo, daré solo una pequeña parte del código de la tarjeta utilizada para seleccionar y mostrar la receta actual.
Para usar la nueva tarjeta, deberá agregar el siguiente código al comienzo del archivo de configuración de LUI:
tarjeta de receta resources:
y entre la lista de tarjetas:
- type: 'custom:recipe-card'
Notificaciones
Una parte necesaria de una casa inteligente es enviar mensajes al usuario. En HA, estos mensajes se denominan notificaciones y hay dos tipos básicos de notificaciones. El primero son las notificaciones persistentes. Para enviarlos, se utiliza el servicio integrado "persistent_notification.create". Una lista de tales mensajes está disponible a través del ícono de la campana en la interfaz gráfica, usan marcas de descuento y son esencialmente bastante simples.
Otra herramienta más interesante es el módulo de notificación incorporado, que a través de la instalación de módulos adicionales le permite enviar mensajes utilizando
plataformas de terceros . Como ejemplo, considere un
módulo para telegrama .
Para usar el módulo, antes que nada, necesitaremos crear un bot en el telegrama mismo. Al configurar, necesitamos el chat_id de nuestro usuario y la API del bot de token. Cómo obtener estos datos: descritos en detalle en el enlace anterior, suponemos que estamos listos. Pasando directamente a instalar el módulo, primero, como ya lo hicimos, copie su código fuente en la carpeta de componentes y luego agregue su configuración al archivo "configuration.yaml":
configuration.yaml telegram_bot:
más configuraciones para el módulo de notificación:
notify:
El módulo de telegramas nos permite enviar mensajes, fotos o videos. Como ejemplo, crearemos automatización para enviar un mensaje con una imagen, notificándonos el final de la cocción.
Epílogo
Home Assistant puede ser de interés para aquellos que desean tratar de organizar la administración local de un hogar inteligente. Este es un proyecto amplio, interesante, abierto y de desarrollo activo debido a los esfuerzos de la comunidad. La variedad de herramientas de Home Assistant no puede dejar de alegrarse (no tuve tiempo de mencionar algunas importantes). Como punto negativo, se puede mencionar la relativa complejidad e incompletitud de la documentación.
PS
Recientemente, el 10 de octubre, hubo, no sé si esto puede llamarse lanzamiento, la transición del proyecto de la versión 0.99 a la versión 0.100.
Cita de las notas de la versión:
¡Bienvenido a las notas de lanzamiento de otro lanzamiento maravilloso! No, no vamos por 1.0, ¡estamos haciendo 0.100! Sentimos que aún no estamos listos con nuestros objetivos para 1.0, pero estamos progresando todos los días. Para obtener un adelanto de lo que estamos pensando, consulte nuestro blog Modo simple en Home Assistant 1.0.