Primeros pasos con HomeAssistant


No hay nada mas interesante que automatizar nuestro hogar con soluciones abiertas que no dependan de fabricantes o empresas que nos puedan apagar nuestras proyectos (como ha sucedido tantas y tantas veces a lo largo del pasado reciente).

Dentro de las soluciones abiertas sin depender de una infraestructura externa(nube) sin duda destaca el binomio HomeAssistant para la parte del servidor y ESP32Home para la parte de los clientes basados en microcontroladores muy asequibles como sin duda son los ESPXX. Veamos de forma practica como podemos empezar a crear nuestro propio sistema domótico sin depender de proveedores externos.

Photo by Frank Cone on Pexels.com

Instalación de HomeAssistant

Para la parte del servidor de HomeAsistant lo ideal es usar un equipo que consuma muy poca energia dado que debería estar encendido permanentemente. Para ello podemos usar un NUC (un mini-pc) , un placa Home Assistant Green o lo mas sencillo: Una Raspberry Pi. 

Básicamente pues necesitaremos los siguientes componentes :

  • Raspberry Pi 4 (Raspberry Pi 3 Modelo B también está bien, pero el Modelo A no tiene suficiente RAM). Las Raspberry Pi son actualmente difíciles de conseguir, utiliza RPilocator para encontrar distribuidores oficiales con stock.
  • Fuente de alimentación para Raspberry Pi 4 o Fuente de alimentación para Raspberry Pi 3.Por favor, recuerde que debe asegurarse de que está utilizando una fuente de alimentación adecuada con su Raspberry Pi. Los cargadores de móvil pueden no ser adecuados, ya que algunos están diseñados para proporcionar sólo la potencia máxima con los teléfonos de ese fabricante. Los puertos USB de su ordenador tampoco suministrarán suficiente energía y no deben utilizarse.
  • Tarjeta Micro SD. Lo ideal es conseguir una que sea Application Class 2 ya que manejan pequeñas E/S de forma mucho más consistente que las tarjetas no optimizadas para albergar aplicaciones. Se recomienda una tarjeta de 32 GB o más.
  • Lector de tarjetas SD. Esto ya forma parte de la mayoría de portátiles, pero puedes comprar un adaptador USB independiente si no tienes uno. La marca no importa, elige la más barata.
  • Cable Ethernet. Necesario para la instalación. Tras la instalación, el Asistente Doméstico puede funcionar con Wi-Fi, pero una conexión Ethernet es más fiable y muy recomendable.

Instalación del Sistema Operativo Home Assistant


Esta guía muestra cómo instalar el sistema operativo Home Assistant en su Raspberry Pi utilizando Raspberry Pi Imager. Si Raspberry Pi Imager no es compatible con su plataforma, puede utilizar Balena Etcher en su lugar.

ESCRIBIR LA IMAGEN EN SU TARJETA SD

1-Descargue e instale el Raspberry Pi Imager en su ordenador como se describe en https://www.raspberrypi.com/software/.

2-Abra el Raspberry Pi Imager y seleccione su dispositivo Raspberry Pi.

ACCEDER AL ASISTENTE DOMÉSTICO

Pocos minutos después de conectar la Raspberry Pi, podrás acceder a tu nuevo Asistente Doméstico.

-Elija el sistema operativo:

  • Seleccione Elegir SO.
  • Selecciona Otros SO específicos > Asistentes domésticos y domótica > Asistente doméstico.
  • Elige el sistema operativo del Asistente Doméstico que coincida con tu hardware (RPi 3 o RPi 4).

-Elija el almacenamiento: Inserte la tarjeta SD en el ordenador(el contenido de la tarjeta se sobrescribirá) y seleccione su tarjeta SD.

-Escriba el instalador en la tarjeta SD: Para iniciar el proceso, seleccione Siguiente. Espere a que el SO Home Assistant se escriba en la tarjeta SD. Una vez terminado el proceso expulse la tarjeta SD e Inserte la SD en su Raspberry PI. NO OLVIDE CONECTAR EL CABLE ETHERNET A SU RASPBERRY PI

ACCEDER AL ASISTENTE DOMÉSTICO

Pocos minutos después de conectar la Raspberry Pi, podrá acceder a su nuevo Asistente Doméstico desde un ordenador o tableta , para ello en el navegador de su sistema de sobremesa, introduzca homeassistant.local:8123.

Si está ejecutando una versión anterior de Windows o tiene una configuración de red más estricta, puede que tenga que acceder al Asistente Doméstico en homeassistant:8123 o http://X.X.X.X:8123 (sustituya X.X.X.X por la dirección IP de su Raspberry Pi).
El tiempo que tarda esta página en estar disponible depende de su hardware. En una Raspberry Pi 4, esta página debería estar disponible en un minuto.

Si no aparece después de 5 minutos en una Pi 4, tal vez la imagen no se escribió correctamente. Intente flashear la tarjeta SD de nuevo, posiblemente incluso pruebe con una tarjeta SD diferente.Si esto no ayuda, vea la salida de la consola en la Raspberry Pi.Para ello, conecte un monitor a través de HDMI.¡Enhorabuena! ¡Ha terminado la configuración de la Raspberry Pi!

Con el sistema operativo del Asistente Domiciliario instalado y accesible, ya puede continuar con la incorporación y configuracion inicial

CONFIGURACION INICIAL DE HOME ASSISTANT

Muy bien, has llegado hasta aquí. La parte difícil está hecha. Como último paso del procedimiento de instalación específico para su dispositivo, has introducido la dirección del dispositivo del Asistente Domiciliario en la barra de direcciones de tu navegador. Normalmente, se trata de http://homeassistant.local:8123/.Si utiliza una versión anterior de Windows o tienes una configuración de red más estricta, puede que tengas que acceder al Asistente Domiciliario a través de homeassistant:8123 o http://X.X.X.X:8123 (sustituye X.X.X.X por la dirección IP de tu dispositivo).Resultado: Ahora verá la pantalla de bienvenida. Dependiendo de su hardware, la preparación puede tardar un poco.

Dependiendo de la versión del software preinstalado, es posible que vea una versión ligeramente diferente de la pantalla de bienvenida. Para ver los archivos de registro, seleccione el punto azul parpadeante.

Una vez instalado el Asistente Hogar, es hora de configurar lo básico.

Ahora crearemos la cuenta del propietario del Asistente Domiciliario. Esta cuenta es una cuenta de administrador. Siempre será capaz de cambiar todo.

1 – Si desea restaurar desde una copia de seguridad de una instalación anterior, seleccione Restaurar desde copia de seguridad. Continúe con el procedimiento de restauración desde copia de seguridad. Ignore el resto de este procedimiento. os siguientes pasos describen cómo crear una nueva instalación, no cómo restaurar a partir de una copia de seguridad.

2 -Si ésta es su instalación inicial, seleccione Crear mi casa inteligente.

3- Introduzca un nombre, un nombre de usuario y una contraseña. Guarde el nombre, el nombre de usuario y la contraseña en un gestor de contraseñas. No hay forma de recuperar las credenciales de propietario. Seleccione Crear cuenta.

4-Introduzca la ubicación de su domicilio. La ubicación se utiliza para rellenar ajustes como la zona horaria, el sistema de unidades y la moneda. También se utiliza para información basada en la ubicación y automatizaciones: por ejemplo, mostrar la previsión meteorológica, abrir las persianas al amanecer o poner en marcha la aspiradora cuando sales de casa.
Si prefiere no enviar su ubicación, puede elegir un lugar alejado de donde vives: siempre podrá cambiar esta información más adelante en los ajustes.

5- Seleccione la información que desea compartir. La opción de compartir está desactivada por defecto. Sin embargo, nos gustaría animarte a compartir algunos de estos datos. Esta información nos ayuda a averiguar qué plataformas necesitamos apoyar y dónde centrar nuestros esfuerzos. Los datos son anónimos y agregados.

6-Una vez que haya terminado, seleccione Siguiente. El Asistente Hogar mostrará todos los dispositivos que haya detectado en tu red. No se alarmes si ves menos elementos de los que se muestran a continuación; siempre puedes añadir dispositivos manualmente más adelante.

7-Por último, seleccione Finalizar. Ahora accederá a la interfaz web del Asistente Domiciliario. Si algunos de sus dispositivos fueron detectados y configurados automáticamente, es posible que este panel predeterminado ya muestre algunos de sus dispositivos.

MANEJO DE HOMEASSISTANT

Ahora que ya estás en el Asistente Hogar, veamos los conceptos más importantes.

Integraciones

Las integraciones son piezas de software que permiten al Asistente Doméstico conectarse a otros programas y plataformas. Por ejemplo, un producto de Philips llamado Hue utilizaría la integración Philips Hue y permitiría al Asistente Domiciliario comunicarse con el controlador de hardware Hue Bridge. Todos los dispositivos compatibles con el Asistente Doméstico conectados al Hue Bridge aparecerían en el Asistente Doméstico como dispositivos.

Para consultar la lista completa de integraciones compatibles consulte la documentación de las integraciones.

Una vez añadida una integración el hardware y/o los datos se representan en el Asistente Domiciliario como dispositivos y entidades.

Entidades
Las entidades son los bloques de construcción básicos para contener datos en Home Assistant. Una entidad representa un sensor actor o función en el Asistente Domiciliario. Las entidades se utilizan para supervisar propiedades físicas o controlar otras entidades.
. Una entidad suele formar parte de un dispositivo o un servicio
. Las entidades tienen estados
.

Dispositivos
Los dispositivos son una agrupación lógica de una o varias entidades. Un dispositivo puede representar un dispositivo físico, que puede tener uno o más sensores. Los sensores aparecen como entidades asociadas al dispositivo. Por ejemplo, un sensor de movimiento se representa como un dispositivo. Puede proporcionar detección de movimiento, temperatura y niveles de luz como entidades. Las entidades tienen estados como detectado cuando se detecta movimiento y despejado cuando no hay movimiento.

En todo el Asistente Domiciliario se utilizan dispositivos y entidades. Por citar algunos ejemplos:

  • Los cuadros de mando pueden mostrar el estado de una entidad . Por ejemplo, si una luz está encendida o apagada.
  • Una automatización puede activarse a partir de un cambio de estado en una entidad. Por ejemplo, una entidad con sensor de movimiento detecta movimiento y activa el encendido de una luz.
  • Una configuración predefinida de color y brillo para una luz guardada como escena.

Automatizaciones
Conjunto de acciones repetibles que se pueden configurar para que se ejecuten automáticamente. Las automatizaciones constan de tres componentes clave:

  • Desencadenantes – eventos que inician una automatización. Por ejemplo, cuando se pone el sol o se activa un sensor de movimiento.
  • Condiciones – pruebas opcionales que deben cumplirse para que pueda ejecutarse una acción pueda ejecutarse. Por ejemplo, si hay alguien en casa.
  • Acciones – interactúan con los dispositivos, como encender una luz.


Para conocer los fundamentos de las automatizaciones consulte la página de conceptos básicos de automatización o intente crear una automatización usted mismo.

Guiones(SCRIPTS)
Al igual que las automatizaciones los scripts son acciones repetibles que pueden ejecutarse. La diferencia entre scripts es que los scripts son componentes que permiten a los usuarios especificar una secuencia de acciones que ejecutará el Asistente Domiciliario al activarse.
y las automatizaciones es que los scripts no tienen disparadores. Esto significa que los scripts no pueden ejecutarse automáticamente a menos que se utilicen en una automatización.
. Los scripts son especialmente útiles si realiza las mismas acciones en diferentes automatizaciones o las desencadena desde un panel de control.

Escenas
Las escenas te permiten crear configuraciones predefinidas para tus dispositivos. De forma similar al modo de conducción de los teléfonos o a los perfiles de conductor de los coches, puede cambiar un entorno para adaptarlo a ti. Por ejemplo, la escena de ver películas
puede atenuar la iluminación, encender el televisor y subir el volumen. Esto puede guardarse como una escena y utilizarla sin tener que configurar cada dispositivo.

Complementos (ADD-ONS)
Dependiendo del tipo de instalación, puedes instalar complementos de terceros. Los complementos suelen ser aplicaciones que pueden ejecutarse con el Asistente Doméstico, pero proporcionan una forma rápida y sencilla de instalar, configurar y ejecutar dentro del Asistente Doméstico. Los complementos proporcionan funciones adicionales, mientras que las integraciones conectan el Asistente Domiciliario con otras aplicaciones.

Control de GPIO de Raspberry Pi sobre MQTT usando ThingsBoard


ThingsBoard es una plataforma de servidor de código abierto que le permite monitorear y controlar dispositivos IoT. Es gratuita tanto para uso personal como comercial y puede implementarlo en cualquier lugar.

ThingsBoard es pues  una plataforma de IoT de código abierto que permite el desarrollo rápido, la gestión y la ampliación de los proyectos de IoT  de modo  que  puede:

  • Crear dispositivos de provisión y control.
  • Recopilar y visualizad datos de dispositivos.
  • Analizea datos del dispositivo y disparae alarmas.
  • Entregar datos del dispositivo a otros sistemas.
  • Habilitar las funciones específicas de casos de uso usando reglas y complementos personalizables.
  • Proporcionar la nube IoT lista para usar o ser la solución en las instalaciones que habilitará la infraestructura del lado del servidor para sus aplicaciones de IoT.

ThingsBoard es escalable pues es una plataforma escalable horizontalmente y compilación utilizando tecnologías líderes de código abierto, tolerante a errores  pues  no hay punto único de fallo ya que  cada nodo en el clúster es idéntico,es personalizable pues permite agregar nueva funcionalidad es fácil con widgets personalizables, motor de reglas y sistema de complementos, es s duradero  y es robusto y eficiente  pues  el nodo de servidor único puede manejar decenas o incluso cientos de miles de dispositivos según el caso de uso (un cluster ThingsBoard puede manejar millones de dispositivos). Asimismo también puede conectar dispositivos existentes a la plataforma usando ThingsBoard Gateway .

 

ThingsBoard le permite enviar llamadas de procedimiento remoto (RPC) desde aplicaciones del servidor a dispositivos y viceversa. Básicamente, esta característica le permite enviar comandos a dispositivos y recibir resultados de ejecución de comandos. Similarmente, puede ejecutar la solicitud desde el dispositivo, aplicar algunos cálculos u otra lógica del lado del servidor en el back-end y enviar la respuesta de regreso al dispositivo. Esta guía cubre las capacidades de ThingsBoard RPC. Después de leer esta guía, se familiarizará con los siguientes temas:

  • Tipos de llamadas RPC
  • Casos de uso de RPC básicos
  • Las API RPC del lado del cliente y del lado del servidor
  • Widgets RPC

Tipos de llamadas RPC

La característica de RPC de Thinsboard se puede dividir en dos tipos según el originador: llamadas RPC originadas en el dispositivo y originadas en el servidor. Para utilizar nombres más conocidos, denominaremos llamadas RPC originadas en el dispositivo como llamadas RPC del lado del cliente y llamadas RPC originadas en el servidor como llamadas RPC del lado del servidor .

Las llamadas RPC del lado del servidor se pueden dividir en un solo sentido y bidireccional:

  • La solicitud RPC unidireccional se envía al dispositivo sin confirmación de entrega y, obviamente, no proporciona ninguna respuesta del dispositivo. La llamada RPC puede fallar solo si no hay una conexión activa con el dispositivo objetivo dentro de un período de tiempo de espera configurable.
  • La solicitud de RPC bidireccional se envía al dispositivo y espera recibir una respuesta del dispositivo dentro del tiempo de espera determinado. La solicitud del lado del servidor está bloqueada hasta que el dispositivo de destino responda a la solicitud.

Vamos  a  ver una  aplicación de ejemplo    que  permitirá controlar GPIO de su dispositivo Raspberry Pi utilizando la interfaz de usuario web de ThingsBoard y observaremos el control de GPIO utilizando  un Led conectado a uno de los pines. El propósito de esta aplicación es demostrar las capacidades de ThingsBoard RPC .

Dispositivo RPC API

ThingsBoard está diseñado para ejecutarse y utilizarse en la mayoría del hardware, desde Raspberry PI local hasta potentes servidores en la nube. Las formas de configurar un cluster de ThingsBoard soporta los  siguientes sistemas operativos:

  • Windows : instale el clúster Thingboard en cualquier máquina preexistente que ejecute Windows.
  • Linux (Ubuntu y CentOS) : instala el clúster Thingboard en cualquier máquina preexistente que ejecute Linux.
  • Raspberry Pi 3 Modelo B (Raspbian Jessie) : instala el servidor Cassandra y Thingboard en una Raspberry Pi 3 modelo B.
  • Docker (Linux o Mac OS) : instala un clúster ThingsBoard de un nodo en tu máquina Linux o Mac OS para su desarrollo y prueba.
  • Docker (Windows) : instala un clúster ThingsBoard de un nodo en tu máquina con Windows para su desarrollo y prueba.
  • Instalación de AWC EC2 utilizando AMI : instale un clúster ThingsBoard de nodo único con AWI AMI público.

Asimismo , sin instalar nada ,también si esta es su primera experiencia con la plataforma, puede usar una demostración en vivo para ahorrar tiempo en la instalación (vea la página de documentación de demostración en vivo para más detalles).Ejempl

 

Ejemplo  control de un  led

En  este ejemplo  «hello world»   orientado a controlar un led usaremos  una   Raspberry Pi con una aplicación simple escrita en Python , que se conectará al servidor ThingsBoard a través de MQTT y escuchará los comandos RPC.

El estado GPIO actual y el widget de control GPIO se visualizaran utilizando el panel de control incorporado personalizable.

Por tanto tendrá que tener el servidor ThingsBoard en funcionamiento. Use Live Demo o la Guía de instalación para instalar ThingsBoard.

Lista de hardware y pinouts

  • Raspberry Pi : utilizaremos Raspberry Pi 3 Model B pero puede usar cualquier otro modelo.
  • Led y resistencia correspondiente
  • 2 cables de puente hembra a macho

Dado que nuestra aplicación permitirá controlar el estado de todos los pines GPIO disponibles, recomendamos conectar algunos LED a esos pines para mayor visibilidad. Puede usar culquier  instrucción básica u otra para cablear algunos LED.

Instalación de la biblioteca MQTT

El siguiente comando instalará la biblioteca MQTT Python:

sudo pip install paho-mqtt

La aplicación consiste en un único script python que está bien documentado. Tendrá que modificar la constante THINGSBOARD_HOST para que coincida con su dirección IP de instalación del servidor ThingsBoard o nombre de host. Utilice «demo.thingsboard.io» si está utilizando el servidor de demostración en vivo .

El valor de la constante ACCESS_TOKEN corresponde al dispositivo Raspberry Pi de muestra en datos de demostración preaprovisionados . Si está utilizando un servidor de demostración en vivo , obtenga el token de acceso para el «Dispositivo de demostración Raspberry Pi preaprovisionado».

 

resources/gpio.py 
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json

THINGSBOARD_HOST = 'YOUR_THINGSBOARD_IP_OR_HOSTNAME'
ACCESS_TOKEN = 'RASPBERRY_PI_DEMO_TOKEN'

# We assume that all GPIOs are LOW
gpio_state = {7: False, 11: False, 12: False, 13: False, 15: False, 16: False, 18: False, 22: False, 29: False,
              31: False, 32: False, 33: False, 35: False, 36: False, 37: False, 38: False, 40: False}


# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc, *extra_params):
    print('Connected with result code ' + str(rc))
    # Subscribing to receive RPC requests
    client.subscribe('v1/devices/me/rpc/request/+')
    # Sending current GPIO status
    client.publish('v1/devices/me/attributes', get_gpio_status(), 1)


# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print 'Topic: ' + msg.topic + '\nMessage: ' + str(msg.payload)
    # Decode JSON request
    data = json.loads(msg.payload)
    # Check request method
    if data['method'] == 'getGpioStatus':
        # Reply with GPIO status
        client.publish(msg.topic.replace('request', 'response'), get_gpio_status(), 1)
    elif data['method'] == 'setGpioStatus':
        # Update GPIO status and reply
        set_gpio_status(data['params']['pin'], data['params']['enabled'])
        client.publish(msg.topic.replace('request', 'response'), get_gpio_status(), 1)
        client.publish('v1/devices/me/attributes', get_gpio_status(), 1)


def get_gpio_status():
    # Encode GPIOs state to json
    return json.dumps(gpio_state)


def set_gpio_status(pin, status):
    # Output GPIOs state
    GPIO.output(pin, GPIO.HIGH if status else GPIO.LOW)
    # Update GPIOs state
    gpio_state[pin] = status


# Using board GPIO layout
GPIO.setmode(GPIO.BOARD)
for pin in gpio_state:
    # Set output mode for all GPIO pins
    GPIO.setup(pin, GPIO.OUT)

client = mqtt.Client()
# Register connect callback
client.on_connect = on_connect
# Registed publish message callback
client.on_message = on_message
# Set access token
client.username_pw_set(ACCESS_TOKEN)
# Connect to ThingsBoard using default MQTT port and 60 seconds keepalive interval
client.connect(THINGSBOARD_HOST, 1883, 60)

try:
    client.loop_forever()
except KeyboardInterrupt:
    GPIO.cleanup()

Este simple comando lanzará la aplicación:   python gpio.py

Visualización de datos

Para simplificar esta guía, en  «Raspberry PI GPIO Demo Dashboard» vemos los datos de demostración que están disponibles en cada instalación Thingboard. Aún puede modificar este panel: sintonizar, agregar, eliminar widgets, etc. Puede acceder a este panel iniciando sesión como administrador de inquilinos.

Utilizar en caso de instalación local de ThingsBoard.

 

Una vez que haya iniciado sesión, abra la página Dashboards-> Raspberry PI GPIO Demo Dashboard . Debe observar el tablero de demostración con el panel de control y estado de GPIO para su dispositivo. Ahora puede cambiar el estado de los GPIO usando el panel de control. Como resultado, verá que el estado de los LED cambia en el dispositivo y en el panel de estado.

A continuación se muestra la captura de pantalla del «Tablero Demo de Raspberry PI GPIO».

imagen

 

 

El vídeo a continuación  resume  todo el proceso  citado llegando  hasta el resultado final :.