Uso del OpenEVSE única y exclusivamente con excedentes fotovoltaicos con y sin vertido a red (con o sin inyección cero). 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.

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.
  • La producción fotovoltaica total.

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 de Node Red

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":"9a51f1b4.cb47a","type":"tab","label":"Openevse_FV","disabled":false,"info":""},{"id":"3b6c9ec1.ae5de2","type":"mqtt in","z":"9a51f1b4.cb47a","name":"","topic":"domoticz/out","qos":"0","datatype":"auto","broker":"db11b21c.c9d5a","x":110,"y":40,"wires":[["382d60c0.b91d5"]]},{"id":"382d60c0.b91d5","type":"json","z":"9a51f1b4.cb47a","name":"","property":"payload","action":"","pretty":false,"x":110,"y":140,"wires":[["d0ec27a7.8ac4b8"]]},{"id":"d0ec27a7.8ac4b8","type":"switch","z":"9a51f1b4.cb47a","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"}],"checkall":"true","repair":false,"outputs":3,"x":230,"y":200,"wires":[["223e9996.dd1716"],[],["238b36b4.14929a"]]},{"id":"223e9996.dd1716","type":"function","z":"9a51f1b4.cb47a","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":410,"y":140,"wires":[["35d9073b.6ab3b8"]]},{"id":"fc94721c.90d62","type":"debug","z":"9a51f1b4.cb47a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":870,"y":140,"wires":[]},{"id":"275bedf4.bb7632","type":"mqtt out","z":"9a51f1b4.cb47a","name":"","topic":"emon/emonpi/power1","qos":"","retain":"","broker":"db11b21c.c9d5a","x":900,"y":320,"wires":[]},{"id":"1e67d450.953f3c","type":"inject","z":"9a51f1b4.cb47a","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":320,"y":40,"wires":[["7e0d291f.fce0f8"]]},{"id":"35d9073b.6ab3b8","type":"function","z":"9a51f1b4.cb47a","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 - 300 ;\n \nmsg.payload = {};\nmsg.payload = grid;\nreturn msg;","outputs":1,"noerr":0,"x":640,"y":160,"wires":[["fc94721c.90d62","275bedf4.bb7632"]]},{"id":"238b36b4.14929a","type":"function","z":"9a51f1b4.cb47a","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":420,"y":240,"wires":[["35d9073b.6ab3b8"]]},{"id":"7e0d291f.fce0f8","type":"function","z":"9a51f1b4.cb47a","name":"","func":"global.set(\"fromGrid\",0);\nglobal.set(\"toGrid\",0);\nreturn msg;\n ","outputs":1,"noerr":0,"x":490,"y":40,"wires":[["35d9073b.6ab3b8"]]},{"id":"db11b21c.c9d5a","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/emonpi/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 la el IDX de nuestro domoticz que nos indica LA INYECCIÓN A RED.
  • El 436 por la el IDX de nuestro domoticz que nos indica LA PRODUCCIÓN FOTOVOLTAICA TOTAL.
  • El 435 por la el IDX de nuestro domoticz que nos indica EL CONSUMO DE RED.

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«.

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/emonpi/power1

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 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.

Script para asegurarnos de que siempre tenemos activo el dummy EcoMode del cargador OpenEVSE y el límite máximo de carga cuando es de día​

Podéis crear un script como el que tenemos aplicado en nuestro caso para que de día el EcoMode SIEMPRE esté activo, el límite de carga sea el máximo para nuestra instalación de carga/producción solar (para nuestro caso 16A)  y así asegurarnos de que SIEMPRE CARGAMOS con fotovoltaica siempre y cuando haya producción solar suficiente.

Clica aquí para visualizarlo.

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!