Cargar los datos MQTT del derivador de excedentes solares IQAS en domoticz mediante Node Red

Dividimos esta guía en varios apartados

Qué es el derivador de IQAS

Iqas del grupo Solax FAQ” de telegram creó y compartió con el mundo un dispositivo capaz de gestionar los excedentes fotovoltaicos que se generan en una instalación solar. Os adjuntamos el enlace en el que tenéis toda la información para construirlo: https://github.com/iqas/derivador

¿Qué son los excedentes fotovoltaicos? En una instalación solar sobra en multitud de ocasiones producción solar. Esto significa que los paneles solares son capaces de generar más electricidad de la que la vivienda puede aprovechar. Cuando eso ocurre, tenemos tres opciones:

  1. Desaprovecharlo, tener el vertido cero activado y enviar la orden al inversor solar para que no genere esa producción, puesto que no es necesaria.
  2. Inyectarla a la red. Desactivar el vertido cero, y todo aquel W que no haga falta para el consumo, se inyecta a la red eléctrica.
  3. Aprovechar ese excedente derivando su trayectoria a un electrodoméstico (o varios) con carga resistiva. Es decir, disponer de algún modo del dato exacto en todo momento de los kW que nos sobran para inyectar esos mismos kW en un electrodoméstico que pueda absorber energía de manera irregular (las resistencias son nuestras amigas en este campo. Pueden captar 1kW como 500W, lo que le transmitamos, lo aprovechan). Y es aquí donde entra en juego el derivador de IQAS.

El derivador conoce en todo momento cuánta energía solar está disponible y la reconduce a lo que le enchufemos o, mediante domoticz por ejemplo, establezcamos como pauta en cascada. Puede disponer de datos tanto conectado a inversores como Solax o Fronius, como a controles de consumo como Webeee/Mirubee y Shelly EM.

Por ejemplo, tengo el derivador conectado a un radiador de 2000W. Hoy hace mucho sol, no tengo necesidad en cuanto a consumo en mi casa ahora mismo, por lo que el derivador está inyectando 2000W al radiador, pero sigue sobrando energía! Puedo establecer mediante un script, que si sigue sobrando energía a pesar de tener el radiador a 2000W, se active un enchufe inteligente y conecte el termo de agua, que es de 2000W. Esto hará que el termo se encienda y pasemos a consumir 4000W de solar. Si cuando esto ocurra tenemos 3000W (por ejemplo) disponible de energía solar, nos faltarán 1000W y os preguntaréis si la vivienda los cogerá de red, verdad? Pues no, el derivador capta que necesitamos 1000W extra para mantener el consumo actual, y bajará de manera automática los W que transmite al radiador a 1000W, quedando 2000W en el termo y 1000W en el radiador. Cuando el termo haya calentado toda el agua, dejará de demandar progresivamente energía, el derivador lo captará y volverá a inyectar más energía al radiador. Si además tengo más electrodomésticos de este tipo, puedo ir encendiéndolos mediante enchufes inteligentes u otros derivadores en cascada, según orden de prioridad, y así aprovecharemos durante todo el día al máximo nuestra instalación solar.

Después de esta CHAPA, muy útil para los que disonemos de instalaciones solares, entenderéis el gran poder que tiene este sistema en una vivienda, sobretodo para calefacción o ACS, ya que de manera gratuita pueden mantener la vivienda a una temperatura óptima y el ACS 100% a demanda sin gasto alguno.

Requisitos inciales

Para poder seguir este tutorial es necesario tener instalado Node Red en nuestra Raspberry, además de Domoticz, MQTT y demás.

También es fundamental, lógicamente, disponer de un derivador iqas en nuestro poder y que esté conectado a la misma red wifi que la raspberry.

Os dejamos el listado de tutoriales para poder instalar lo que necesitéis antes de empezar esta guía:

  1. Material necesario para poner en marcha domoticz
  2. Instalación de domoticz desde cero
  3. Instalación de Mosquitto MQTT Broker en Raspberry Pi 
  4. Configurar MQTT con usuario y contraseña (opcional)
  5. Cargamos MQTT en nuestro domoticz
  6. Instalar Watchdog en domoticz
  7. Crear usuario y contraseña para domoticz (opcional)
  8. Cómo instalar node red en nuestra raspberry pi

Conocemos los datos MQTT del derivador de excedentes

En este caso, vamos a cargar los datos que exporta el derivador de excedentes vía MQTT. Para ello, debemos configurar antes de nada desde la IP del derivador los datos MQTT de nuestra raspberry:

Una vez introducidos los datos desde el propio derivador y haber activado el servicio MQTT, guardamos y nos vamos a Node Red.

OJO a los que tenéis USER y PASS en MQTT de la raspberry y en MQTT de domoticz.

Introducimos los datos en node red

Abrimos node red y empezamos un nuevo flow. Por defecto al instalar node red nos aparece una pestaña ya creada. Si ya tenemos algo más introducido en node red, creamos una pestaña nueva. Si este es tu caso, observa la siguiente imagen, si empiezas de cero utiliza la pestaña Flow 1:

Creamos un node del tipo network mqtt/in:

Seleccionamos el node mqtt/in y lo arrastramos a la pantalla:

Clicamos dos veces sobre mqtt/in y se nos despliega su configuración a la derecha:

Creamos un nuevo Server:

Introducimos nuestros datos, incluidos USER y PASS de nuestro MQTT en caso de tenerlo:

Guardamos:

A continuación nos pide el TOPIC:

Ahora debemos tener claros los topics con los que nuestro derivador envía la información.

Tenemos por un lado, la información de referencia y, por otro, la activación/desactivación de los RELÉS configurados desde el derivador.

Debéis tomar la primera decisión importante. ¿Queréis que el derivador se encargue de controlar la salida de los otros 4 relés? o ¿Preferís que sea domoticz quien tenga el control con un script para ir encendiendo mediante enchufes inteligentes, sonoffs, etc. cuando haya exceso de energía a pesar de tener el derivador ya inyectando al 100% sobre un elemento? Nosotros preferimos que sea domoticz quien tenga el control, pero vamos a desarrollar el tutorial para poder introducir todos los datos en domoticz. Siempre estás a tiempo de cambiarlo en un futuro si ahora dejas el derivador controlándolo todo y a posteriori quieres que sea domoticz quien lo haga.

Dicho esto, en nuestro caso, que es el derivador genérico porque no hemos modificado su configuración, la información de referencia que envía es cuádruple. Envía 4 datos distintos bajo los topics siguientes:

/opends/pwm
/opends/wgrid
/opends/wsolar
/opends/wtoday

Por ello, para esta información vamos a crear 4 nodes distintos. Sin embargo, la activación de los relés se realiza enviando el mensaje mqtt a través de los siguientes 4 topics:

/opends/relay/1/cmnd/POWER
/opends/relay/2/cmnd/POWER
/opends/relay/3/cmnd/POWER
/opends/relay/4/cmnd/POWER

Para ello crearemos otros 4 nodes distintos.

En resumen, necesitamos 8 nodes en total: 4 para la información y 4 para los relés.

Creamos los nodes para la información de referencia del derivador

Vamos con el primero de información de referencia introduciendo el topic en node red y aceptando:

/opends/pwm

Al aceptar veremos que cambia automáticamente el nombre del mqtt/in:

Repetimos el proceso para los otros tres topics (para la información de referencia) y los otros 4 topics (información de activación de relés). Como sugerencia, os recordamos que podéis seleccionar el mqtt/in que acabáis de crear, clicais sobre control + c parar copiar y, a continuación, sobre control + v para pegarlo. De ese modo solo debéis modificar el topic, ya que el server se mantendrá.

Nos quedará la pantalla de la siguiente manera:

Vamos a comprobar fácilmente si hemos introducido bien los datos. Para ello, clicamos sobre DEPLOY a la derecha:

Pueden ocurrir dos cosas, que nos cargue correctamente (lo ideal) o que nos aparezca desconectado. Si aparece desconectado revisa el server. Asegúrate de que has introducido correctamente la IP de tu raspberry, no la del derivador! Y recuerda el USER y PASS de MQTT, tienes?  Lo has introducido correctamente?

Correcto

Incorrecto

Damos el siguiente paso, continuamos creando una FUNCION del mismo modo que antes hemos creado un node mqtt/in. Seleccionamos Function y lo arrastramos a la pantalla:

Hacemos doble click sobre la función para configurarla:

Nos vamos a domoticz para crear el dummy que recibirá la información de esta función.

Extraemos los datos de domoticz (IDX)

Para poder vincular el derivador desde node red con domoticz, necesitamos tener MQTT cargado en nuestra raspberry y MQTT cargado en nuestro domoticz. Si todavía no lo has hecho no puedes continuar con el tutorial porque el dispositivo no será capaz de conectar. Por ello, sigue los siguientes tutoriales clicando sobre ellos y vuelve luego para continuar a partir de este punto:

  1. Instalación de Mosquitto MQTT Broker en Raspberry Pi
  2. Cargamos MQTT en nuestro domoticz

Una vez cargado MQTT en raspberry y MQTT cargado en hardware de domoticz, vamos a crear los Dummys en nuestro domoticz para darle entrada a los datos de nuestro derivador. Para nuestro ejemplo 4 datos distintos.

Para ello, vamos a domoticz y entramos en Setup > Hardware ó Configuración > Hardware (si lo tenemos en español).

Creamos un nuevo Sensor Virtual. Si esta es la primera vez que introducimos un dispositivo creamos un hardware tipo Dummy. Si ya lo tenemos creado y nos aparece en la lista superior NO CREAMOS OTRO, sino que pulsamos directamente sobre Create Virtual Sensors. En caso de que sea tu primera vez, crear el hardware introduciendo los siguientes datos en los campos inferiores, sino pasa al siguiente paso. Fíjate en las siguientes imágenes si tienes dudas.

En este caso no tenemos creado ningún hardware tipo Dummy en el listado superior, por ello creamos uno:

Sin embargo, en este otro casi SÍ tenemos un hardware tipo dummy creado en el listado, por ello NO CREAMOS OTRO, ya que creamos nuestro nuevo dummy desde él:

A partir de aquí continuamos tanto los que teníamos ya creado este hardware por haber añadido dispositivos anteriormente como los que por primera vez acaban de crearlo. Clicamos sobre Create Virtual Sensors:

Introducimos el nombre (en nuestro ejemplo del primer dato del derivador: Derivador.Pwm) y el tipo de sensor (siguientes dos imágenes).

En este primer caso, escogemos el tipo de sensor PERCENTAGE porque el dato que envía por mqtt es un % de uso.

Los siguientes tres datos que debemos introducir sobre el derivador, son Watts. Para recibirlos tenemos dos posibles tipos de sensores, los CUSTOM SENSOR (que nos permitirán cambiar el icono del sensor a posteriori) o los USAGE (ELECTRIC) que recibe Watts pero no tiene icono modificable. Vamos a crear uno de cada para que tengáis ejemplo de todas las opciones:

Rellenamos el nombre, desplegamos las opciones de sensor y escogemos el tipo:

Para este primer sensor escogemos el porcentaje puesto que recibirá datos de % de uso:

Al aceptar y clicar sobre OK veremos que nos aparece un mensaje que nos indica que ya podemos localizar el nuevo Dummy en el apartado de devices.

Para localizar el Dummy nos vamos a Setup > Devices ó Configuración > Dispositivos (según idioma):

Clicamos sobre Idx para ordenarlos por orden descendente (de mayor a menor) y así localizamos nuestro nuevo IDX. Deberemos anotar este valor para introducirlo posteriormente en la configuración de Node red:

Cogemos nota del IDX que nos aparece, 386.

Ya que estamos aquí, vamos a crear los otros 3 dummys para el resto de datos. Recordamos que necesitamos 3 dummys para registro de W.

Volvemos a  Setup > Hardware ó Configuración > Hardware (si lo tenemos en español).

Creamos otro sensor virtual. En este caso vamos a crear un USAGE (ELECTRIC) para el topic /opends/wgrid. Recordamos que a este tipo de dummy NO le podemos cambiar el icono, nos aparecerá el rayo típico de domoticz. Creamos el dummy y clicamos en OK:

Vamos con el siguiente topic, nos toca /opends/wsolar, para este topic vamos a utilizar un custom sensor, para poder modificarle el icono posteriormente. Fijaros que en este caso nos implica introducir otro dato, el AXIS LABEL. Esto no es más que la unidad de medida, en nuestro caso Watts, pero podrían ser minutos, horas, euros, dólares, etc:

Finalmente nos queda crear un dummy para el topic /opends/wtoday. Volvemos a crear un custom sensor para él:

Y ahora sí, teniendo ya todos los dummys creados, vamos a Setup > Devices ó Configuración > Dispositivos (según idioma) y anotamos los números de IDX que nos ha generado domoticz para cada uno de los dummies, para nuestro caso, tenemos lo siguiente:

  • Topic: /opends/pwm con IDX 386.
  • Topic: /opends/wgrid con IDX 398.
  • Topic: /opends/wsolar con IDX 394.
  • Topic: /opends/wtoday con IDX 397.

Volvemos a node red para rematar la configuración:

Continuamos en node red

Nos habíamos quedado en esta pantalla. Debemos pegar el siguiente texto añadiendo nuestro IDX para este topic. Recordamos que estamos en el topic /opends/pwm al que corresponde un IDX 386.

var smes = msg.payload;
msg.payload = {};
msg.payload.idx = IDX
msg.payload.svalue = smes//smes;
return msg;

Para nuestro caso modificamos el IDX a 386:

var smes = msg.payload;
msg.payload = {};
msg.payload.idx = 386
msg.payload.svalue = smes//smes;
return msg;

Lo copiamos y pegamos en la configuración de la función. Os damos un consejo antes de guardar sin más. Añadir en el Name de la función el IDX para mayor claridad en la pantalla principal. Y ahora sí, guardamos:

Repetimos el mismo procedimiento para el resto de funciones pero con más facilidad. Solo tenemos que seleccionar la que tenemos guardada, presionar control +c para copiar y control + v para pegar. Las colocamos donde corresponden (una por cada mqtt/in), modificamos los nombres y las idx de cada una por las que corresponden en nuestro domoticz por topic.

Finalmente nos quedará un resultado como este, con un temp por cada topic con su IDX:

Vamos un paso más allá, ahora creamos el mqtt/out. Para ello, nos desplazamos de nuevo en la primera columna hasta encontrar ese node. Clicamos sobre él y lo arrastramos a la pantalla:

Hacemos doble click sobre él para configurarlo. Cubirmos los campos con nuestro server creado en el primer punto (la ip de nuestra raspberry y el puerto que hemos añadido anteriormente):

Pasaremos a tener una pantalla como esta:

Vamos a ver si hemos creado bien el mqtt/out. Para ello, clicamos sobre el DEPLOY en la esquina superior derecha de la pantalla:

Tras el deploy, nos tiene que aparecer este resultado:

Vamos ahora a la parte final, la unión de todas las piezas para empezar a recibir información en domoticz.

Unimos los mqtt/in con las functions y las functions con mqtt/out.

Clicamos sobre deploy de nuevo y nos vamos a domoticz a ver si los dummys pasan a recibir información:

A nosotros ya nos aparece la información. Si ves que algún dummy no carga, echa un vistazo al apartado del final del tutorial: «Cómo localizar errores en node red».

Creamos los nodes para la activación de los relés por parte del derivador

Ahora vamos con el primer node para el primer topic de los relés. Nos vamos a node red y copiamos uno de los nodes mqtt/in que hemos creado anteriormente:

Hacemos doble click sobre el node para modificar su configuración e introducir el topic correcto:

Introducimos el topic. Recordamos que para el Relé 1 el topic es:

/opends/relay/1/cmnd/POWER

Al guardar volveremos a la pantalla anterior y veremos que se ha actualizado el nombre del mqtt/in por el correcto:

Copiamos y pegamos este mismo node 3 veces (uno por cada relé mas que nos queda por añadir), quedándonos la siguiente pantalla:

Modificamos los topics de los 3 nuevos nodes tal y como hemos hecho con el anterior, sólo que ahora sólo debemos cambiar el número de relé en el topic, ya que el resto es igual. Recordamos los topics de nuevo:

/opends/relay/1/cmnd/POWER
/opends/relay/2/cmnd/POWER
/opends/relay/3/cmnd/POWER
/opends/relay/4/cmnd/POWER

Cambiamos el 1 por un 2 y guardamos. Lo mismo con el 3 y 4:

Finalmente nos quedará una pantalla como la siguiente:

Clicamos sobre deploy:

Y todo se conecta:

Vamos ahora con las 4 funciones, una por cada mqtt/in. Copiamos y pegamos la función de arriba:

Y modificamos el texto interior. Para ello debemos conocer los IDX de los 4 relés que nos dará domoticz al crearlos.

Nos vamos a domoticz para crear el dummy que recibirá la información de esta función.

Extraemos los datos de domoticz (IDX)

Para ello, vamos a domoticz y entramos en Setup > Hardware ó Configuración > Hardware (si lo tenemos en español).

Recordar que NO CREAMOS OTRO Dummy en hardware porque ya tenemos uno creado. Desde él creamos los virtual sensors:

Introducimos el nombre (en nuestro ejemplo del primer dato para relé: Derivador.Rele1) y el tipo de sensor, que para este caso será SWITCH o INTERRUPTOR:

Rellenamos el nombre, desplegamos las opciones de sensor y escogemos el tipo:

Al aceptar y clicar sobre OK veremos que nos aparece un mensaje que nos indica que ya podemos localizar el nuevo Dummy en el apartado de devices.

Para localizar el Dummy nos vamos a Setup > Devices ó Configuración > Dispositivos (según idioma):

Clicamos sobre Idx para ordenarlos por orden descendente (de mayor a menor) y así localizamos nuestro nuevo IDX. Deberemos anotar este valor para introducirlo posteriormente en Node red:

Cogemos nota del IDX que nos aparece, 401.

Ya que estamos aquí, vamos a crear los otros 3 dummys para el resto de datos. Recordamos que necesitamos 3 dummys switches o interruptores.

Volvemos a  Setup > Hardware ó Configuración > Hardware (si lo tenemos en español) y creamos 3 switches como hemos hecho en el paso anterior:

Y ahora sí, teniendo ya todos los dummys creados, vamos a Setup > Devices ó Configuración > Dispositivos (según idioma) y anotamos los números de IDX que nos ha generado domoticz para cada uno de los dummies, para nuestro caso, tenemos lo siguiente:

  • /opends/relay/1/cmnd/POWER switch con IDX 401.
  • /opends/relay/2/cmnd/POWER switch con IDX 412.
  • /opends/relay/3/cmnd/POWER switch con IDX 413.
  • /opends/relay/4/cmnd/POWER switch con IDX 414.

Volvemos a node red para rematar la configuración:

Continuamos en node red

Nos habíamos quedado en esta pantalla. Debemos pegar el siguiente texto añadiendo nuestro IDX para este topic. Recordamos que estamos en el topic /opends/relay/1/cmnd/POWER al que corresponde un IDX 401.

var smes = msg.payload;
msg.payload = {};
msg.payload.svalue = smes//smes;
//{"command": "switchlight", "idx": idx, "switchcmd": "{{payload}}" }
msg.payload.command = "switchlight";
msg.payload.idx = IDX;
if(smes=="ON"){
msg.payload.switchcmd = "On";
}else{
msg.payload.switchcmd = "Off";
}
return msg;

Para nuestro caso modificamos el IDX a 401:

var smes = msg.payload;
msg.payload = {};
msg.payload.svalue = smes//smes;
//{"command": "switchlight", "idx": idx, "switchcmd": "{{payload}}" }
msg.payload.command = "switchlight";
msg.payload.idx = 401;
if(smes=="ON"){
msg.payload.switchcmd = "On";
}else{
msg.payload.switchcmd = "Off";
}
return msg;

Lo copiamos y pegamos en la configuración de la función. Os damos un consejo antes de guardar sin más. Añadir en el Name de la función el IDX para mayor claridad en la pantalla principal. Y ahora sí, guardamos:

Repetimos el mismo procedimiento para el resto de funciones pero con más facilidad. Solo tenemos que seleccionar la que tenemos guardada, presionar control + c para copiar y control + v para pegar. Las colocamos donde corresponden (una por cada mqtt/in), modificamos los nombres y las idx de cada una por las que corresponden en nuestro domoticz por topic.

Finalmente nos quedará un resultado como este, con un temp por cada topic con su IDX:

Vamos ahora a la parte final, la unión de todas las piezas para empezar a recibir información en domoticz.

Unimos los mqtt/in con las functions y las functions con mqtt/out.

Clicamos sobre deploy de nuevo y nos vamos a domoticz a ver si los dummys pasan a recibir información:

Vemos que nos aparecen 3 de las 4 bombillas encendidas, es decir, el derivador mantiene el relé en OFF. Vamos a comprobarlo en el derivador entrando por IP en él:

Y, efectivamente, el 4 aparece apagado porque ahora mismo no hay producción suficiente para los 4 relés.

Ya podemos aprovechar las bombillas para encender mediante sonoffs, enchufes inteligentes u otros sistemas electrodomésticos en cascada en función del excedente solar de cada momento.

Si ves que algún dummy no carga, echa un vistazo al siguiente apartado:

Cómo localizar errores en node red

Os damos un truquito para vuestra información. Tenemos un node en el listado de la izquierda que se llama DEBUG. Cuando lo llevamos a la pantalla principal, lo conectamos a un node y lo activamos, nos dá mucha información (como un LOG) en la columna de la derecha del todo. Os explicamos con unas cuantas imágenes cómo conseguirlo:

Mantén el cursor pulsando la bola del final del recuadro del mqtt/in y arrástrala hasta la bola del inicio del recuadro del debug:

Clicamos sobre deploy:

Activamos la cucaracha y a la derecha nos aparecerá el debug con info de errores /( y así podremos analizar qué estamos haciendo mal) o info correcta:

Cambiar los iconos de los custom sensors

Como os comentábamos, podemos cambiar el icono de los custom sensors para poner la imagen que queramos. 

Si no sabes cómo hacerlo sigue las instrucciones del siguiente tutorial: «Cómo añadir iconos personalizados a los dummys interruptores y sensores (custom sensors) de domoticz«.

Creamos un PING para controlar su conexión con domoticz

Recordar que podemos establecer un dummy tipo PING para controlar que el derivador está correctamente conectado a nuestra red (en ocasiones algunos se desconectan por un bloqueo casual o falta de cobertura). Si esos bloqueos son a causa de una mala conexión con el wifi esta es la manera para recibir una notificación, por ejemplo, de que el derivador se ha quedado «pillado». Si el bloqueo es debido a una mala conexión entre el derivador y el inversor (en caso de que lo tengas conectado a él), este sistema no te servirá para detectar el bloqueo y deberás echar mano de un script.

Para establecer un PING al derivador sigue las indicaciones del siguiente tutorial: «Cómo saber si un dispositivo en concreto está conectado a la red Wifi«.

Inicio automático de Node RED con Raspberry Pi

Recordar que por defecto Node RED está apagado. Podemos iniciarlo de dos formas diferentes: manual o automático.

Para inicio manual introducimos en puTTY:

node-red-start

Para que Node Red inicie de forma automática (tras caídas de red, o tras apagar y encender la raspberry) lanzamos el siguiente comando en puTTY:

sudo systemctl enable nodered.service

Agradecimientos

Agradecer a nuestro amigo Iqas del grupo Solax FAQ” de telegram todo el tiempo que ha invertido en la construcción y, más importante aún, su desinteresado trabajo para que todos podamos tener acceso a este eficiente sistema.

Del mismo modo, queremos agradecer a Jinig del grupo Domoticz a lo spain” de telegram su ayuda en la elaboración de este tutorial.

Para cualquier duda o consulta tienes disponible el grupo de telegram «Domoticz a lo Spain» para entrar, ponerte cómodo y participar cuanto quieras.

Clica aquí para entrar en él

Cualquier duda, sugerencia o comentario será bien recibida en la web!