Objetivos #

En este documento se muestra cómo publicar y recibir datos desde el Opta a Node Red. En varios ejemplos se comunica Node Red por MQTT con el exterior para disponer de esas funciones online. En otros ejemplos veremos cómo utilizar Node Red dentro de Home Assistant (HA en adelante) para que el Opta interactúe con dispositivos domóticos incluidos en HA.

Los dos primeros ejemplos de este documento (apartados 4 y 5) no necesitan tener Node Red dentro de Home Assistant.

Recursos utilizados en todo el proceso #

En este documento se muestra el intercambio de información entre muy distintos dispositivos, por tanto, no es necesario disponer de todos, solo de aquellos (o similares) que se quieran implementar.

  • Material
    • Micro PLC Opta de Arduino
    • Algún dispositivo domótico. En el vídeo se usa un Shelly 1, Shelly EM y Sonoff Mini.
    • Esp32 o Esp8266
    • Sensor de temperatura y humedad DHT22
    • Pulsador, led y resistencias.

Lectura de datos desde servidor remoto: Temperatura y termostato #

En este ejemplo se leen en el PLC Opta, por Modbus TCP/IP, dos datos, uno de temperatura a la que está una estancia y otro de temperatura a la que se quiere dejar la estancia.

Si la temperatura fijada en el termostato es inferior a la temperatura de la sala, se activa una salida física del opta que, como ejemplo podría encender una calefacción. Es, evidentemente, un ejemplo muy básico de control de temperatura, con el fin de mostrar la comunicación y el trabajo con dos datos enteros, que se envían por MQTT desde internet hasta Node Red, y desde ahí, en local, por Modbus TCP/IP al Opta.

  • Programa:

Diagrama

Descripción generada automáticamente

  • Direcciones de lectura de datos en el OPTA:Interfaz de usuario gráfica, Aplicación

Descripción generada automáticamente
  • Flujo en Node Red:Diagrama

Descripción generada automáticamente con confianza media
  • Definición de los canales Modbus por los que se envían las lecturas de temperatura:

Interfaz de usuario gráfica, Texto, Aplicación, Chat o mensaje de texto

Descripción generada automáticamente

Los otros dos nodos son simplemente para poder visualizar el estado en un dashboard.

Los datos de temperatura se envían en el siguiente programa realizado en microlsb.es para un esp32 a través del servidor io.adafruit.es.

Interfaz de usuario gráfica

Descripción generada automáticamente

En el último bloque se publica el estado de un pulsador que se usa mas adelante para encender y apagar otro dispositivo diferente.

La configuración de los nodos para leer los valores anteriores de temperatura y humedad, son:

Envío a internet del estado de una entrada física #

Se va a enviar por Modbus TCP/IP un dato Booleano que corresponde con el estado de una entrada física del OPTA, a Node Red, y desde ahí, por MQTT a un servidor online en el que se visualizará un piloto en verde o rojo en función del estado de activación de la entrada.

  • Programa

Se vincula el estado de la entrada a una variable booleana.

  • Dirección de envío del estado booleano por Modbus TCP/IP

  • Flujo en Node Red:

  • Canal de lectura del dato y adaptación de la señal:

Interfaz de usuario gráfica, Texto, Aplicación, Chat o mensaje de texto

Descripción generada automáticamente

Como se muestra en el flujo anterior, entre el nodo de lectura Modbus y el nodo de envío MQTT hay dos nodos más.

Se ha establecido que Node Red le consulte cada segundo al Opta en qué estado está la variable monitorizada. Sin embargo, no se desea que se envíe con tanta frecuencia ese dato a internet, ya que en muchos casos va a ser un dato repetido y nos va a saturar el límite de intercambio de datos que admite el servidor MQTT. Es por esto que se usa el nodo “filtrar” para enviar el dato solo cuando el estado cambia, y como mucho, una vez cada dos segundos.

Por otro lado, el dato desde el Opta se recibe como Array y para ciertas funciones en el servidor MQTT se necesita un valor numérico. Es por esto por lo que se utiliza el nodo “dividir”, que permite cambiar el tipo de dato de array a número, pero solo en este caso que se recibe un solo dato en el array.

Si se reciben múltiples datos en un array y se quiere acceder a posiciones concretas, se pueden instalar nodos específicos para obtener el dato de la posición deseada, como en el siguiente desarrollo:

https://flows.nodered.org/node/node-red-contrib-buffer-parser

Activación de un dispositivo domótico desde el Opta #

En el siguiente ejemplo se utiliza el botón de usuario incluido en el Opta para encender y apagar un relé Wifi de Shelly, en concreto el Shelly 1.

  • Programa

Se vincula el estado del pulsador de usuario con una variable booleana cuyo valor se enviará por Modbus TCP/IP.

  • Dirección de envío del estado booleano por Modbus TCP/IP
  • Flujo en Node Red dentro de Home Assistant

Imagen que contiene Escala de tiempo

Descripción generada automáticamente

El módulo de lectura de la orden de activación del Shelly es el siguiente:

Interfaz de usuario gráfica

Descripción generada automáticamente con confianza baja

La configuración del nodo para activar el Shelly desde Node Red, la siguiente:

Interfaz de usuario gráfica, Texto, Aplicación, Correo electrónico

Descripción generada automáticamente

Y el nodo incluido entre la lectura Modbus y la activación de Shelly, la siguiente:

Este nodo intermedio se utiliza porque se ha configurado el nodo de Shelly como “toggle”, es decir, cada 1 que se recibe cambia el estado del dispositivo. Sería como trabajar con un telerruptor. Por eso se conecta el nodo Shelly al conector superior que sacará un 1 siempre que se lea esta cifra por Modbus. El canal con 0 aquí no es necesario. Se podría usar si se configuraran dos nodos Shelly, uno solo para el encendido y uno solo para el apagado.

Además, se añade un nodo que lee estados desde internet por MQTT para activar o apagar el Shelly en paralelo a lo comentado anteriormente. La configuración del nodo sería esta en la plataforma microlsb.es el mismo que se ha mostrado en un caso anterior. Ahora la parte del programa que interesa, además de la conexión, es la de publicación del estado del pulsador cada vez que este cambia y con una frecuencia máxima de medio segundo.

Interfaz de usuario gráfica

Descripción generada automáticamente

Si el estado del pulsador cambia con mayor frecuencia de medio segundo, lo que puede pasar si se hace un mal uso del dispositivo o si presenta rebotes el pulsador, no se enviará nada. Si pasa mas de medio segundo pero no cambia el estado del pulsador, tampoco se enviará nada.

Encendido de salidas del Opta desde dispositivo domótico #

A continuación se muestra cómo activar salidas del Opta, en este caso los cuatro Leds indicativos, al accionar la entrada digital que se encuentra en un Sonoff mini. Es decir, se lee un estado digital por Modbus para realizar acciones dentro del Opta.

  • Programa:
  • Lectura del estado de la entrada digital del Sonoff Mini por Modbus TCP/IP

  • Flujo en Node Red dentro de Home Assistant:

  • Envío del dato digital por Modbus:

  • Configuración de la lectura del estado del pulsador del Sonoff:

Interfaz de usuario gráfica, Texto, Aplicación

Descripción generada automáticamente

  • Nodo de adaptación de señal

Dado que la lectura del Sonoff se recibe como “on” y “off”, y por Modbus necesitamos enviar valores booleanos en formad e 1 o 0, se utiliza el nodo “change” o “cambia” para sustituir estos valores, tal y como se muestra en su configuración:

Control de una salida en función de valores de un dispositivo domótico #

Veamos cómo leer el consumo de un receptor a través de un Shelly Em y enviar ese dato al Opta para tomar decisiones. En este ejemplo, si el receptor está activo, es decir, su potencia es mayor de cero, se activa una salida del Opta. Para esto, utilizamos Node Red dentro de Home Assistant.

  • ´Programa:

  • Lectura del dato de consumo por Modbus TCP/IP

  • .-Flujo en Node red:

  • Configuración del nodo Modbus para enviar al Opta el dato de potencia

  • Lectura en Node Red del dato de potencia recibido en Home Assistant desde el Shelly Em:

  • Adaptación del dato

Con esta configuración solo se pueden enviar valores enteros desde Node Red. Dado que se está recibiendo desde el Shelly un dato con dos decimales, hay dos opciones. Si se desea disponer de todos los decimales, se puede multiplicar la lectura por 100, enviarla y en el Opta dividir la lectura por 100. Si no se necesita tanta precisión, como es el caso, se puede usar un nodo intermedio para redondear la lectura a un valor sin decimales: