Monitorización de home assistant con Oracle Cloud y Node-RED

Hola a tod@s

Vamos a montar un sistema que monitorice desde fuera de nuestra red si nuestro home assistant está funcionando. Este tutorial se basa en las indicaciones de dos enlaces que pasaron usuarios de los grupos de telegram Domology y Node-RED Spain. Uno explicaba cómo crear una máquina virtual gratis en oracle cloud e instalarle nodered, y el otro cómo monitorizar un servidor. Os pongo al final del tutorial los enlaces por si queréis echarles un vistazo.

Creación de la máquina en Oracle Cloud

Empezamos accediendo a nuestra cuenta de oracle cloud
https://www.oracle.com/cloud/sign-in.html

Si no tenemos una, podemos crearla en el siguiente enlace. Aunque pide una tarjeta de crédito en el momento de crearla, no nos cobrarán nada salvo que realicemos un upgrade del servicio, algo que no necesitamos en nuestro caso
https://myservices.us.oraclecloud.com/mycloud/signup?sourceType=_ref_coc-asset-opcSignIn&language=es_Es

Una vez dentro pinchamos en «crear una instancia de vm». Veremos que tiene la opción «siempre gratis elegible»

En la siguiente pantalla elegimos el nombre que queramos darle y la imagen o sistema operativo. Por defecto podemos dejar Oracle Linux 7.8 como en la captura, aunque puede elegirse otro

Pinchamos en «Mostrar opciones de unidad, red y almacenamiento»

En dominio de disponibilidad podemos elegir el que prefiramos. En unidad, pinchamos en «Cambiar unidad» y en la ventana que se nos abre elegimos las opciones marcadas como «siempre gratis elegible», como en la captura.
Si la unidad de computación marcada como «siempre gratis» no está disponible para seleccionar, tendremos que volver atrás y cambiar el dominio de disponibilidad. Es muy importante que elijamos siempre la opción identificada como «Siempre gratis elegible»

Nos aseguramos que esté marcada la opción «asignar una ip pública» para poder acceder después a nuestra máquina

En la parte de claves SSH podemos optar por generar unas keys nuevas o utilizar unas que ya tengamos, lo que prefiramos.

Pinchamos en crear y veremos que aparece la máquina «Aprovisionando»

Al poco indicará que la máquina está en ejecución y veremos nuestra ip pública

En la pantalla siguiente, en Listas de seguridad, pinchamos en la de default para editarla

Pinchamos en «Agregar reglas de entrada» y creamos una con esta configuración:

Ya tenemos lista la configuración en oracle, por lo que podemos seguir con la máquina

Instalación de node-RED

Conectamos a la máquina con nuestro cliente ssh habitual utilizando las keys que hemos indicado al crear la máquina. El usuario por defecto para conectar es opc (ubuntu si habéis elegido la imágen de Ubuntu en lugar de la de oracle)

Ejecutamos este script:

bash <(curl -sL https://raw.githubusercontent.com/Node-RED/linux-installers/master/rpm/update-nodejs-and-nodered)

Nos preguntará si queremos que cree una regla en el firewall para el puerto 1880, le decimos que sí (en mi caso no creó la regla, más adelante os explico cómo solucionarlo)
Después nos informará de los pasos que va a seguir. Como estamos con una máquina limpia, no es necesario que hagamos nada más, sólo decirle que sí

Cuando acabe tendremos algo parecido a esto

Ahora arrancamos Node-RED con el comando node-red-start y veremos que nuestro node-RED se pone en marcha

Si queremos podemos parar node-RED con CTRL+C y ejecutar el siguiente comando para que nodered se ejecute como servicio cada vez que arranque la máquina: sudo systemctl enable nodered.service

Como os decía, aunque el script debería crear las reglas en el firewall, a mí no me funcionó correctamente. Si os ocurre podéis crearlas a mano con este comando
sudo firewall-cmd --permanent --add-port=1880/tcp

Y después recargar el firewall
sudo firewall-cmd --reload

Una vez hecho todo esto y con nodered arrancado podemos abrir nuestro navegador y utilizando la ip pública de nuestra máquina abrir http://ippublica:1880
Con ello accederemos a nuestro panel de nodered. Ahora mismo el acceso es libre, por lo que podría entrar cualquiera. Podemos añadirle seguridad con usuario y contraseña siguiendo la docu de nodered:
https://nodered.org/docs/user-guide/runtime/securing-Node-RED

Creación del flujo de Node-RED

Muchos de vosotros ya conoceréis Node-RED. En ese caso no necesitaréis mucha de la información que hay a partir de ahora. Para aquellos que no lo conozcáis, Node-RED es una herramienta que nos va a permitir crear flujos y automatizaciones gráficamente, arrastrando componentes y conectándolos entre ellos.

En la parte izquierda veréis un panel en el que aparecen lo que llamamos nodos. Hay infinidad de nodos para ejecutar funciones, llamar a servicios de otros sistemas con los que lo integremos, crear bucles, etc. Podemos integrarlo con home assistat. Aquí tenéis un tuto para hacerlo.

Para añadir nodos a nuestro flujo simplemente tenemos que arrastrarlo al panel central. Para editar la configuración de cada nodo haremos doble clic. Conectándo los nodos entre sí crearemos el flujo. Vamos con nuestro flujo

Para empezar añadimos un nodo Inject. Este tipo de nodo nos permitirá ejecutar el flujo manualmente pero además podemos decirle que se ejecute cada x tiempo. Vamos a ponerle, por ejemplo, cada minuto

Después añadimos un nodo http request y lo configuramos como en esta captura, indicando el dominio en el que tengamos home assistant
Con ello hará una petición a nuestro home assistant equivalente a cuando lo cargamos por web. Si está todo ok obtendremos como respuesta un statusCode 200

Añadimos ahora un nodo «Switch» que se encargará de evaluar la respuesta que haya obtenido el nodo anterior, y lo configuramos así. Lo que estamos diciéndole es que mande la salida al output 1 del nodo si el statusCode no es 200, es decir, si nuestro Home Assistant no responde correctamente

A continuación añadimos un nodo delay y lo configuramos como en la siguiente captura. Con ello lo que vamos a hacer es separar cada x tiempo (en este caso cada 15 minutos) las notificaciones que recibiremos. Si no lo hiciéramos y nuestro home assistant no estuviera disponible, como le hemos dicho que se realice la verificación cada minuto, recibiríamos una notificación cada minuto, y no lo necesitamos.

hora vamos a preparar la notificación. He elegido telegram porque a muchos nos resulta ya familiar por haberla utilizado con home assistant, pero se puede utilizar también notificación por email, slack, etc
Añadimos un nodo function donde prepararemos el mensaje que vamos a pasar a telegram

Lo editamos y en la función pegamos lo siguiente

newMsg = {payload:{chatId:"" ,type:"message",content:msg.payload}};
newMsg.payload.chatId="xxxxxxxx";
newMsg.payload.content= "Home assistant no está disponible";
return newMsg;

Como podéis ver se compone de tres parámetros:
chatId: el id del usuario o grupo de telegram al que queremos enviar la notificación. Poned aquí el que vayáis a utilizar. El ejemplo es para una destinatario, si queréis enviarlo a varios tendréis que utilizar newMsg.payload.chatId=["xxxxxxxx", "xxxxxxxx"];
type: El tipo de mensaje que vamos a enviar. En este caso es message porque enviaremos texto, pero podríamos enviar también fotos, vídeos, etc
content: El mensaje en sí mismo. Al ser de tipo message es simplemente el texto que queremos enviar. 

Una vez configurado este nodo pasamos al siguiente, que es el que enviará la notificación de telegram. No es un nodo que venga instalado por defecto, por lo que tenemos que instalarlo

Para ello pinchamos en las tres rayitas de la parte superior de la página y después en «Manage palette»

Ahí veremos los nodos que tenemos instalados. Nos vamos a la pestaña Install y buscamos telegram. Elegimos el que os marco y le damos a install

Una vez haya acabado volvemos a nuestro flujo y veremos que en el panel de la izquierda se nos han añadido los nuevos nodos de telegram

Añadimos el que se llama Telegram Sender

Al entrar a configurarlo veremos que en Bot nos aparece «add a new bot». Pinchamos en el icono del lapicero y rellenamos con los datos de nuestro bot. Esto seguramente os sonará de home assistant. Simplemente tenemos que añadir el nombre del bot, el token y los chatid a los que enviaremos notificaciones. El resto podemos dejarlo como está.

Cuando lo tengamos todo listo simplemente unimos los nodos como se puede ver en la siguiente imagen. Después pinchamos en la parte superior derecha de la página en el «Deploy» y ya tendremos nuestro sistema funcionando.

Para comprobar que todo funciona correctamente podéis cambiar el dominio del http request para que se dirija a un dominio que no exista, lo que hará que falle y siga todo el resto del flujo, enviándonos la notificación. Cada vez que cambieis cualquier cosa en el flujo es necesario que volváis a pinchar en Deploy para que se aplique.

Espero haber sido claro con las explicaciones. Si tenéis cualquier duda podeis encontrarme por el grupo de Telegram

Links de referencia:

https://blogs.oracle.com/developers/installing-Node-RED-in-an-always-free-vm-on-oracle-cloud
https://dev.to/webhookrelay/creating-your-own-health-check-monitor-with-Node-RED-51fn

Deja una respuesta

Síguenos

Siguenos en facebook
Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de sus datos para estos propósitos. Ver
Privacidad