Uso del OpenEVSE con control dinámico de potencia (fotovoltaica cuando haya disponible y potencia contratada por la noche). Válido tanto para domoticz como para Home Assistant (HA)​

Dividimos esta guía en varios apartados

Qué es OpenEVSE, cuál es su precio y qué lo hace tan poderoso

OpenEVSE es un cargador para vehículo eléctrico de origen americano. Además de su económico precio, OpenEVSE es una opción con código abierto para método DIY integrable en cualquier sistema domótico y adaptable a cualquier tipo de instalación.

Su pequeño tamaño hace que se pueda instalar en sitios muy complicados y su gran capacidad de carga permite alcanzar amperajes tan altos que difícilmente podremos alcanzar en nuestras viviendas, por lo que jamás se nos quedará corto.

Por qué OpenEVSE:

  • Su precio. El cargador del que hablamos en este tutorial requiere el módulo Wifi. Os ponemos el ejemplo de los que tenemos nosotros: Openevse Kit Advanced. A la venta desde 239 dólares sin manguera ni protecciones, incluyendo el módulo Wifi. Esto es difícil de conseguir por otros fabricantes.
  • Su adaptabilidad y facilidad para el DIY. Es un cargador que con un simple destornillador y la guía de instrucciones puede montarse como si de un mueble de ikea se tratara. No se requiere perforación, soldadura o engarzado. Eso hace que sea accesible a TODO el mundo. Además, tiene una gran tienda de complementos y accesorios para poder ir completando a media que tus necesidades vayan aumentando. Todos sus componentes se venden por separado por lo que siempe tenemos recambios.
  • Su versatilidad gracias al hardware y software abiertos. Podemos introducir el cargador en domoticz y eso, ante todo, es la mayor de sus ventajas. Gracias a ello podemos aprovechar sus posibilidades cargando nuestro vehículo eléctrico SOLO con excedentes fotovoltaicos (control dinámico de carga por excedentes fotovoltaicos), podemos regular la carga para que la vivienda siempre consuma sin pasarse de la potencia contratada (control dinámico de carga por potencia contratada), podemos establecer que el coche cargue en el horario más económico de PVPC del día, y todo ello a la vez y de manera automática. Otros fabricantes tienen ALGUNA de esas funcionalidades por separado, pero no todas a la vez, además de poderlo incluir en los scripts más complejos que podamos imaginar.

Carga del OpenEVSE con Excedentes Fotovoltaicos

Como os comentábamos, el cargador OpenEVSE puede cargar con excedentes fotovoltaicos regulando la potencia de carga dinámicamente en función del sobrante solar que tengamos en cada momento. Es más, no sólo puede regular en función del sobrante solar (excedente solar), sino que podemos «engañarlo» mediante Node Red para que crea que la producción es otra en caso de que necesitemos reservar constantemente parte de la producción para otras necesidades.

En caso de que queramos aprovechar al máximo los excedentes fotovoltaicos, el OpenEVSE regulará de manera que si la vivienda consume 1kW, utilizará el resto de disponible solar para cargar el vehículo, regulando en escalones de 1 Amperio en 1 Amperio.

Pero bien, las dos preguntas del millón son las siguientes. Os las respondemos:

  • ¿Qué ocurre si no hay suficiente producción solar?

Por defecto el cargador mantendrá el mínimo de carga posible (6A) hasta que finalicemos manualmente la carga. ¿Por qué? Porque puede que aparezcan unas nubes que nos tiren abajo la producción, si de repente pasamos a tener 4A disponibles, el cargador debería cortar la carga porque necesitaría al menos 2A de red y no queremos que cargue con red, verdad? Y si corta la carga y a continuación la nube desaparece y volvemos a tener 10A disponibles? El cargador volvería a iniciar la carga, y así sucesivamente. Esto provocaría un continuo «carga» – «para carga» – «carga» – «para carga» en días nublados o al final del día (donde la producción llega un punto en que oscila por encima y debajo de 6A) que, a su vez, generaría un desgaste del material y posibles errores de carga en el vehículo, por lo que la marca decidió mantener la carga mínima a 6A hasta que el usuario lo finalice.

No obstante, aquí entra en juego domoticz y sus grandes posibilidades con DzVents. Si tu intención es saltarte esa directriz, no tienes mas que crear un script para que domoticz envíe orden a OpenEVSE de cortar la carga cuando se empiece a consumir de red, por ejemplo, afinando los factores para que esto coincida realmente con el fin del día en cuanto a producción.

  • ¿Y si tengo inyección cero, cómo sabe OpenEVSE cuánto disponible hay de producción solar?

Aquí es donde entra en juego el poder de Node Red, domoticz y OpenEVSE integrados en un mismo sistema.

En este tutorial os explicamos el paso a paso para configurar que el coche pueda cargar solo con FV siempre y cuando haya producción pero, además, os damos la fórmula para que el propio OpenEVSE regule la carga con inyección cero activada con un vertido máximo de 200W (en función del modelo de coche, para este ejemplo hemos utilizado la media de un Nissan Leaf 40kWh y de un Hyundai Ioniq 28kWh), de manera que el Openevse pueda subir la carga como si de un derivador de excedentes solares se tratase, viendo si el inversor le oferta más producción por la demanda, o bajando un escalón de 1 Amperio en caso de que no haya suficiente producción solar.

Carga del OpenEVSE con Control Dinámico de Potencia sin superar la potencia contratada

¿Cuántos de vosotros habéis querido cargar los coches sabiendo a ciencia cierta que jamás superaréis vuestra potencia contratada? Muchos tenemos calefacción eléctrica, aire acondicionado, etc. que determina una gran parte del consumo de una vivienda, en ocasiones por la noche. Si cargamos nuestros EV en el momento en que se encienden estos sistemas, podemos fácilmente superar la potencia contratada y, con ello, saltarnos la luz.

Con OpenEVSE podemos regular la carga del coche en función del consumo de la vivienda estableciendo nosotros un máximo autorizado para que el cargador se encargue de garantizar que NUNCA se supera dicha potencia.

En la mayoría de cargadores con función de control dinámico de potencia o podemos cargar con excedentes fotovoltaicos o podemos regular la carga en función de la potencia contratada, pero rara vez nos permite hacerlo A LA VEZ, sin modificar la colocación de sus pinzas en el cuadro eléctrico o sin cambiar previamente la configuración del cargador antes de iniciar la carga. Pues bien, con OpenEVSE NO ES NECESARIO. Podemos tener configurado de una sola vez que de día (si hay excedentes fotovoltaicos) el cargador regule la carga en función de dichos excedentes y, al llegar la noche, el cargador pase a regular en función de la potencia contratada.

Os explicamos en esta guía cómo conseguirlo paso a paso…

Requisitos previos

Esta guía es válida tanto para domoticz como para Home Assistant (HA). Para HA deberéis adaptar el MQTT que indicamos introducir como IP de domoticz seguido de puerto 1883, por los datos de MQTT de vuestro HA.

Para seguir este tutorial necesitamos tener cargado en nuestro domoticz el cargador OpenEVSE tal y como vimos en el tutorial con la última versión del plugin: «Integración del cargador de vehículo eléctrico OPENEVSE en domoticz«.

Además, es necesario tener instalado Node Red en nuestra Raspberry, lógicamente también Domoticz, MQTT y demás.

Finalmente, necesitaremos un control de consumo en nuestro domoticz con tres dummys que nos aporten:

  • El consumo de red,
  • La inyección a red.
  • Si tenemos una versión de firmware de OpenEVSE que requiera Voltaje, un dummy de Voltaje.

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

Configuración del flow de Node Red para cargar con FV

Abrimos node red (Recuerda que accedemos a ella introduciendo la IP de nuestra raspberry seguido de :1880) y empezamos instalando el flow que EA4GKQ ha desarrollado para esta función:

Introducimos en el recuadro siguiente texto (lo copiamos con control +c) y lo pegamos en el recuadro (con control + v):

[{"id":"58128f38.d7cc7","type":"tab","label":"Openevse_FV","disabled":false,"info":""},{"id":"efc9cb93.4eee78","type":"mqtt in","z":"58128f38.d7cc7","name":"","topic":"domoticz/out","qos":"0","datatype":"auto","broker":"7e440bbe.f2f8d4","x":110,"y":40,"wires":[["67e587ed.6838e8"]]},{"id":"67e587ed.6838e8","type":"json","z":"58128f38.d7cc7","name":"","property":"payload","action":"","pretty":false,"x":110,"y":140,"wires":[["421eb795.236108"]]},{"id":"421eb795.236108","type":"switch","z":"58128f38.d7cc7","name":"","property":"payload.idx","propertyType":"msg","rules":[{"t":"eq","v":"434","vt":"str"},{"t":"eq","v":"436","vt":"str"},{"t":"eq","v":"435","vt":"str"},{"t":"eq","v":"28","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":110,"y":220,"wires":[["ce73e1d7.4312a"],[],["751143d9.5d3eac"],["f4ad91f.1e04c7"]]},{"id":"ce73e1d7.4312a","type":"function","z":"58128f38.d7cc7","name":"434_toGrid","func":"//leemos el valor que viene de domoticz\n//svalue1 es el instantaneo\n//svalue1 es acumulado\nvar watts = parseInt(msg.payload.svalue1);\n \n if(isNaN(watts)){\n watts = 0;\n}\n\nglobal.set(\"toGrid\",watts);\n//Si hay que inviertir quita este comentario \nwatts = (watts +250 ) * -1; \n//Como es inyección ha de ser negativa\n\n//si watts no es un número ponemos que es cero\n//esto es cuando disparamos el evento a mano desde\n//nodered\n\n\n//aquí engañamos para jugar\n//si le quieres engañar juega aquí con este \n//watts = -500; \nmsg.payload = {};\nmsg.payload = watts ;\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":160,"wires":[["6fa1272a.8b0c68"]]},{"id":"2d4a0143.20d7fe","type":"debug","z":"58128f38.d7cc7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":730,"y":320,"wires":[]},{"id":"d8503de.6ba0ac","type":"mqtt out","z":"58128f38.d7cc7","name":"","topic":"emon/power1","qos":"","retain":"","broker":"7e440bbe.f2f8d4","x":980,"y":80,"wires":[]},{"id":"f6d90fac.35619","type":"inject","z":"58128f38.d7cc7","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":320,"y":40,"wires":[["eee39de8.b9051"]]},{"id":"6fa1272a.8b0c68","type":"function","z":"58128f38.d7cc7","name":"Computo","func":"//esto se dispara por cambio en la FV\nvar toGrid = global.get(\"toGrid\");\nif(isNaN(toGrid)){\n toGrid = 0;\n}\nvar fromGrid = global.get(\"fromGrid\");\nif(isNaN(fromGrid)){\n fromGrid = 0;\n}\n\ngrid = fromGrid - toGrid;\n \ngrid = grid - 360 ;\n \nmsg.payload = {};\nmsg.payload = grid;\nreturn msg;","outputs":1,"noerr":0,"x":740,"y":80,"wires":[["d8503de.6ba0ac","ad231f25.f7aa7"]]},{"id":"751143d9.5d3eac","type":"function","z":"58128f38.d7cc7","name":"435_fromGrid","func":"//leemos el valor que viene de domoticz\n//svalue1 es el instantaneo\n//svalue1 es acumulado\nvar fromGrid = parseInt(msg.payload.svalue1);\n \n if(isNaN(fromGrid)){\n fromGrid = 0;\n}\n\nglobal.set(\"fromGrid\",fromGrid);\n \nreturn msg;","outputs":1,"noerr":0,"x":320,"y":220,"wires":[["6fa1272a.8b0c68"]]},{"id":"eee39de8.b9051","type":"function","z":"58128f38.d7cc7","name":"","func":"global.set(\"fromGrid\",0);\nglobal.set(\"toGrid\",0);\nreturn msg;\n ","outputs":1,"noerr":0,"x":490,"y":60,"wires":[["6fa1272a.8b0c68"]]},{"id":"ad231f25.f7aa7","type":"change","z":"58128f38.d7cc7","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":180,"wires":[["2d7f21cb.372fee"]]},{"id":"2d7f21cb.372fee","type":"function","z":"58128f38.d7cc7","name":"lastUpdateFV","func":"var updateFV = msg.payload;\n\n//Grabamos en variable global timeStamp de la última\n//vez que se actualizó la FV\n\nglobal.set(\"lastUpdateFV\",updateFV);\n\nreturn msg;","outputs":1,"noerr":0,"x":1060,"y":280,"wires":[[]]},{"id":"f4ad91f.1e04c7","type":"function","z":"58128f38.d7cc7","name":"28_Volt","func":"var volt = parseInt(msg.payload.svalue1); \nmsg.payload = {};\nmsg.payload = volt ;\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":280,"wires":[["2d4a0143.20d7fe","d40171ec.952ed"]]},{"id":"d40171ec.952ed","type":"mqtt out","z":"58128f38.d7cc7","name":"","topic":"emon/vrms","qos":"","retain":"","broker":"7e440bbe.f2f8d4","x":650,"y":220,"wires":[]},{"id":"7e440bbe.f2f8d4","type":"mqtt-broker","z":"","name":"192.168.8.150:1883","broker":"192.168.8.150","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Y tras pegar el texto clicamos sobre IMPORT:

Veremos que se nos carga una pestaña nueva denominada Openevse_FV. Clicamos sobre ella:

Y veremos que se nos carga el flow completo. Vamos a configurarlo con nuestros datos.

Efectuamos doble click en domoticz/out y sustituimos el 192.168.8.150 por la IP de nuestra raspberry, dejando el puerto 1883 y aceptamos (DONE). Ver siguiente imagen.

OJO! Si tenemos USER y PASS en MQTT deberemos introducirlo mediante el LÁPIZ. Si no tenemos USER y PASS no entramos en el LÁPIZ. Imágenes a continuación.

Guardamos:

Repetiremos el proceso para emon/power1 sustituyendo la IP por la de nuestra rasperry.

Si tenemos introducido un USER y PASS en nuestro Openevse deberemos volver a entrar en el LÁPIZ e introducir el USEr y PASS para el MQTT del Openevse tal y como lo hemos hecho antes con el node de mqtt de domoticz:

Finalmente, vamos a sustituir los IDX de domoticz que nos van a aportar la información de CONSUMO DE RED (para nuestro ejemplo el IDX 435) y de INYECCIÓN A RED (para nuestro ejemplo el IDX 434).

Efectuamos doble click en switch y sustituimos:

  • El 434 por el IDX de nuestro domoticz que nos indica LA INYECCIÓN A RED.
  • El 435 por el IDX de nuestro domoticz que nos indica EL CONSUMO DE RED.
  • El 28 por el IDX de nuestro domoticz que nos indica VOLTAJE (para versiones posteriores de firmware de OpenEVSE).
  • Del 436 olvidaros. Es de una versión anterior.

Efectuamos doble click en 434_toGrid y sustituimos:

  • El 434 por la el IDX de nuestro domoticz que nos indica LA INYECCIÓN A RED.

Efectuamos doble click en 435_fromGrid y sustituimos:

  • El 435 por la el IDX de nuestro domoticz que nos indica EL CONSUMO DE RED.

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 no 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?

Si te da error y has revisado todos los campos, pasa al apartado «Cómo localizar errores en node red«.

Sinos fijáis uno de los nodes es el Voltaje. Os lo dejamos por si actualizáis el OpenEVSE y os da la opción de enviarle el voltaje. En este caso tendríais que cambiar el IDX de vuestro dummy de Voltaje por el 28 que tenemos puesto en nuestro caso.

Configuración del flow de Node Red para cargar con control dinámico de potencia en función de la potencia contratada

Cargamos ahora el flow que EA4GKQ ha desarrollado para esta función:

Introducimos en el recuadro siguiente texto (lo copiamos con control +c) y lo pegamos en el recuadro (con control + v):

[{"id":"eb691d80.8782","type":"tab","label":"Openevse_RED","disabled":false,"info":" \nvar pilot = msg.payload\n \n\n \nvar pilotId = 215;\nmsg.payload = {};\nmsg.payload.idx = pilotId;\nmsg.payload.svalue = pilot.toString();\nreturn msg;"},{"id":"c4b64b9a.bc01a8","type":"mqtt in","z":"eb691d80.8782","name":"","topic":"domoticz/in","qos":"0","datatype":"auto","broker":"7d76d946.80bcf8","x":150,"y":80,"wires":[["7ad3d396.4f47ec"]]},{"id":"7ad3d396.4f47ec","type":"json","z":"eb691d80.8782","name":"","property":"payload","action":"","pretty":false,"x":150,"y":180,"wires":[["7b21e38b.0d276c"]]},{"id":"7b21e38b.0d276c","type":"switch","z":"eb691d80.8782","name":"","property":"payload.idx","propertyType":"msg","rules":[{"t":"eq","v":"641","vt":"str"},{"t":"eq","v":"28","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":150,"y":240,"wires":[["bfcca658.723698"],["858e50e6.ff533"]]},{"id":"f388dbe5.024d58","type":"function","z":"eb691d80.8782","name":"Calculo para OpenEVSE","func":"var redW = parseInt(msg.payload);\n//obtenemos el consumo de red de la casa\nvar wattsEV = parseInt(global.get(\"OvKwh\"))\n\n\ndisponible = ( 4600 - redW ) * -1;\n\n//watts = -3000; \nmsg.payload = {};\nmsg.payload = disponible ;\n \nreturn msg;","outputs":1,"noerr":0,"x":570,"y":320,"wires":[["180c8982.652256"]]},{"id":"180c8982.652256","type":"mqtt out","z":"eb691d80.8782","name":"","topic":"emon/power1","qos":"","retain":"","broker":"7480cdc5.ca0354","x":920,"y":120,"wires":[]},{"id":"70c29a27.b8c9e4","type":"function","z":"eb691d80.8782","name":"split svalue","func":"\n\n\n\nvar svalue = msg.payload.svalue;\nvar splited = svalue.split(\";\");\n\nmsg.payload = {};\n\nmsg.payload = splited[0];\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":320,"wires":[["f388dbe5.024d58"]]},{"id":"bfcca658.723698","type":"change","z":"eb691d80.8782","name":"TimeStamp","rules":[{"t":"set","p":"payload.timestamp","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":150,"y":280,"wires":[["4900fd0c.d44cb4"]]},{"id":"4900fd0c.d44cb4","type":"function","z":"eb691d80.8782","name":"Check lastUpdate","func":"var currentTS = parseInt(msg.payload.timestamp/1000);\nvar lastUpdateFV = parseInt(global.get(\"lastUpdateFV\"));\n\nif(isNaN(lastUpdateFV)){\n lastUpdateFV=currentTS;\n}else{\n lastUpdateFV = parseInt(lastUpdateFV / 1000);\n \n}\n\n \nmsg.payload.lastUpdateFV = lastUpdateFV;\n\nmsg.payload.difTS = (currentTS-lastUpdateFV);\n\nif(msg.payload.difTS<60){\n return false;\n}\nreturn msg;","outputs":1,"noerr":0,"x":150,"y":320,"wires":[["70c29a27.b8c9e4"]]},{"id":"858e50e6.ff533","type":"function","z":"eb691d80.8782","name":"28_Volt","func":"var volt = parseInt(msg.payload.svalue1); \nmsg.payload = {};\nmsg.payload = volt ;\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":100,"wires":[["99c774aa.f9b6c8"]]},{"id":"99c774aa.f9b6c8","type":"mqtt out","z":"eb691d80.8782","name":"","topic":"emon/vrms","qos":"","retain":"","broker":"7d76d946.80bcf8","x":690,"y":100,"wires":[]},{"id":"7d76d946.80bcf8","type":"mqtt-broker","z":"","name":"192.168.8.150:1883","broker":"192.168.8.150","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"7480cdc5.ca0354","type":"mqtt-broker","z":"","name":"192.168.8.150:1883","broker":"192.168.8.150","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Y tras pegar el texto clicamos sobre IMPORT:

Veremos que se nos carga una pestaña nueva denominada Openevse_RED. Clicamos sobre ella:

Y veremos que se nos carga el flow completo. Vamos a configurarlo con nuestros datos como en el paso anterior.

A partir de aquí hay dos opciones de configuración según de dónde toméis lecturas de consumo. Las diferenciamos en dos apartados distintos para que según cuál sea vuestro caso escojáis el correcto:

  • Si mi medidor de consumo NO es el inversor SOLAX clica aquí.
  • Si mi medidor de consumo ES el inversor SOLAX clica aquí.

Lecturas de consumo mediante un sistema distinto al inversor solar SOLAX

Si el SOLAX es el que te está dando las lecturas de consumo, sigue los siguientes pasos:

Efectuamos doble click en domoticz/in y sustituimos el 192.168.8.150 por la IP de nuestra raspberry, dejando el puerto 1883 y aceptamos (DONE). Ver siguiente imagen.

OJO! Si tenemos USER y PASS en MQTT deberemos introducirlo mediante el LÁPIZ. Si no tenemos USER y PASS no entramos en el LÁPIZ. Imágenes a continuación.

Guardamos:

Repetiremos el proceso para emon/power1 sustituyendo la IP por la de nuestra rasperry.

Si tenemos introducido un USER y PASS en nuestro Openevse deberemos volver a entrar en el LÁPIZ e introducir el USER y PASS para el MQTT del Openevse tal y como lo hemos hecho antes con el node de mqtt de domoticz:

Para continuar configurando pasa al apartado «Continuación para todos los sistemas de lectura de consumo«.

Lecturas de consumo mediante el inversor solar SOLAX

Si no usas el SOLAX para tomar datos de medida pasa al siguiente apartado. Sin embargo, si el SOLAX es el que te está dando las lecturas de consumo, sigue los siguientes pasos:

Efectuamos doble click en domoticz/in y sustituimos varias cosas:

  • El domoticz/in lo cambiamos a domoticz/out
  • El 192.168.8.150 por la IP de nuestra raspberry, dejando el puerto 1883

Aceptamos (DONE). Ver siguiente imagen.

OJO! Si tenemos USER y PASS en MQTT deberemos introducirlo mediante el LÁPIZ. Si no tenemos USER y PASS no entramos en el LÁPIZ. Imágenes a continuación.

Guardamos:

Repetiremos el proceso para emon/power1 sustituyendo la IP por la de nuestra rasperry.

Si tenemos introducido un USER y PASS en nuestro Openevse deberemos volver a entrar en el LÁPIZ e introducir el USER y PASS para el MQTT del Openevse tal y como lo hemos hecho antes con el node de mqtt de domoticz:

Clicamos sobre el node TimeStamp y lo cambiamos a msg.svalue1

Hacemos dobre click sorbre el split svalue y corregimos la fórmula sustituyendo el svalue por svalue1. Aceptamos clicando sobre Done.

Continuación para todos los sistemas de lectura de consumo

Hacemos doble click en Switch para introducir los IDX de los dummys que nos van a aportar la información de consumo donde:

  • 641 es el Consumo de Red en Watts.
  • 28 es el Voltaje de Red en Volts.

Finalmente, vamos a hacer doble click en Calculo para OpenEVSE para introducir el dato de nuestra potencia máxima de carga (la potencia que NO queremos que se supere, por ejemplo en nuestro caso 4600W). Tenemos 4600W contratados y no queremos que supere dicha potencia.

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 no 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?

Si te da error y has revisado todos los campos, pasa al apartado «Cómo localizar errores en node red«.

Sinos fijáis uno de los nodes es el Voltaje. Os lo dejamos por si actualizáis el OpenEVSE y os da la opción de enviarle el voltaje. En este caso tendríais que cambiar el IDX de vuestro dummy de Voltaje por el 28 que tenemos puesto en nuestro caso.

Configuración de OpenEVSE

Entramos por IP en nuestro OpenEVSE y nos vamos a SERVICES:

Configuramos el MQTT introduciendo la IP de nuestra raspberry y marcando la palomita para activarlo.

En la parte inferior de la pantalla, copiamos y pegamos la siguiente linea tal cual en Grdi (+I/-E) topic y guardamos:

emon/power1

Qué hemos hecho hasta ahora

Con la configuración hecha hasta ahora el Openevse con función ECO activa cargará regulando la potencia de carga en función de los excedentes fotovoltaicos y, en caso de que los dummys de la Fotovoltaica dejen de actualizar, el OpenEVSE pasará automáticamente a cargar dinámicamente regulando por debajo de la potencia contratada (la que le hayamos indicado en Node Red).

Comprobación del funcionamiento

Vamos a comprobar que funciona correctamente. Comentar que este tutorial se ha hecho con la carga de un Nissan Leaf 40kWh y un Hyundai Ioniq 28kWh, con una instalación solar de 4,6kW con un inversor solar SOLAX 5kW y la inyección cero activada para exportar máximo 200W.

Enchufamos el coche teniendo producción solar superior a 6A, OpenEVSE con 16A aplicados, dummy EcoMode activo e iniciamos la carga.

Deberemos observar si el cargador oscila valores de carga en función de la producción solar, de manera que no exporte más de 200W ni consuma absolutamente nada de red. Si domináis Node Red podéis modificar los valores utilizados para afinar al detalle vuestra instalación y ponerla al gusto.

Algo importante a tener en cuenta es el dummy EcoMode y el valor máximo de amperaje que dispongáis en el OpenEVSE (para nuestro ejemplo de la imagen 16A). Para que este tutorial tenga efecto debéis aseguraros de que tenéis activo el EcoMode y de que el OpenEVSE tiene marcado el valor máximo de amperaje como límite de carga.

Scripts para automatizar y facilitar el funcionamiento del control dinámico de potencia

Una vez tenemos cargados ambos flows como os hemos enseñado, deberemos entender cómo funciona ahora OpenEVSE.

Tal cual lo tenemos cargado en Node Red, OpenEVSE aplicará la carga regulando en función de los excedentes fotovoltaicos cuando tenga el modo ECO activado y, cuando ya no haya producción, pasará a hacerlo regulando en función de la potencia contratada (la que le hayamos marcado en node red). Ahora bien, nosotros hemos automatizado un poco más el proceso para que nos podamos despreocupar un poco del asunto. En nuestro caso no necesitamos marcar o desmarcar la casilla ECO, por ejemplo, ni marcar al OpenEVSE la carga máxima a la que puede cargar porque domoticz lo hará por nosotros mediante scripts. ¿Cómo? Te lo explicamos a continuación. Sigue paso a paso el siguiente enlace: «Scripts para que OpenEVSE tenga asignado el estado correcto en función de la hora del día, del sobrante solar, del consumo de red y de la carga manual«.

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:

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

El grupo de telegram y la APP de OpenEVSE

Recordar que ahora tenéis también disponible el grupo de telegram del OpenEVSE:

https://t.me/openevse

Y la APP que ha creado uno de sus usuarios (@Toppeer2) y al que queremos agradecer que compartiera su trabajo!

https://play.google.com/store/apps/details?id=com.irifa.programar_carga_ev

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!