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
En nuestro caso hemos creado un Selector para que OpenEVSE pueda cambiar su estado en función de la hora del día, del sobrante solar, del consumo de red y de la carga manual.
Creamos el dummy Selector
Nos vamos a:
Domoticz > Setup > Hardware
Creamos un nuevo Sensor Virtual. Pulsamos directamente sobre Create Virtual Sensors. En caso de que sea tu primera vez añadiendo un sensor virtual tipo MQTT, has de 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: OpenEVSE – ControlDinamico) y el tipo de sensor. Seleccionaremos Selector Switch ó Interruptor de Selector.
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.
Nos vamos a:
Domoticz > Switches
Clicamos sobre Edit del dispositivo que acabamos de crear:
Y editamos los Levels poniendo los nombres que nos interesen, en nuestro ejemplo Manual, NightWaiting, Day y NightCharging. Eliminaremos las líneas que no nos interesen clicando sobre la basura y añadiremos las líneas que nos interesen en Level name y Add justo debajo del primer cuadro.
MUCHO CUIDADO! En nuestro caso dejaremos la línea del 0 con la palabra Manual (el 0 significa OFF). Este estado del selector hará que esté apagado (para poder cargar a la potencia que queramos nosotros manualmente, sin control dinámico de potencia).
Creamos el primer Script
En nuestro caso hemos creado un Selector con los distintos apartados para seleccionarlos en función de la situación:
- Manual: si tenemos activa esta opción podremos utilizar el cargador a nuestro gusto, sin regulación de potencia. Marcaremos manualmente un amperaje de carga y el OpenEVSE se limitará a cargar a esa potencia. El modo ECO estará deshabilitado.
- NightWaiting: situación en la que ya no hay fotovoltaica suficiente como para 6A, no está dentro de la tarifa VALLE y, si está dentro de la franja VALLE, no le hemos dado la orden de que cargue. El cargador está «a la espera» de iniciar carga por la noche.
- Day: en este caso ya es de día, hay producción fotovoltaica (que no tiene porque ser suficiente como para 6A). Puede estar cargando o no.
- NightCharging: situación a la que pasa el estado del cargador cuando es de noche (no hay producción fotovoltaica) y el coche está cargando. En este caso el OpenEVSE regulará dinámicamente la carga en función de la potencia contratada marcada como máximo.
Para ello el primer script que generamos hará dos cosas:
- Cambiará el OpenEVSE de los estados «NightWaiting» y «NightCharging» a «Day» para que sepamos que tomará datos de la fotovoltaica en caso de iniciar la carga para regular la potencia de carga.
- Cambiará el OpenEVSE del estado «Day» a «NightWaiting», desactivando la carga y desactivando la función ECO.
Donde:
- Solax_TEST – TO_GRID es la inyección a red.
- Solax_TEST – FV_POWER es la producción solar.
- ConsumoRed.W es el control de consumo de la vivienda.
return {
on = {
devices = {'ConsumoRed.W'}
},
execute = function(domoticz, device)
if domoticz.devices('Solax_TEST - TO_GRID').WhActual>10 and
(domoticz.devices('OpenEVSE - ControlDinamico').levelName == 'NightWaiting' or
domoticz.devices('OpenEVSE - ControlDinamico').levelName == 'NightCharging') then
domoticz.devices('OpenEVSE - ControlDinamico').switchSelector ("Day").checkFirst()
domoticz.log('Pasamos al Openevse a carga con FV', domoticz.LOG_ERROR)
end
if domoticz.devices('Solax_TEST - FV_POWER').WhActual<100 and
domoticz.devices('ConsumoRed.W').WhActual>100 and
(domoticz.devices('OpenEVSE - ControlDinamico').levelName == 'Day') then
domoticz.devices('OpenEvSe_New - Stop').switchOn().checkFirst()
domoticz.devices('OpenEvSe_New - EcoMode').switchOff().checkFirst()
domoticz.devices('OpenEVSE - ControlDinamico').switchSelector ("NightWaiting")
domoticz.log('Pasamos al Openevse a esperar carga dinámica nocturna', domoticz.LOG_ERROR)
end
if (domoticz.time.isDayTime) and
(domoticz.devices('Solax_TEST - TO_GRID').lastUpdate.minutesAgo > 10 and
(domoticz.devices('OpenEVSE - ControlDinamico').levelName == 'Day') and
(domoticz.devices('OpenEvSe_New - Status').state == 'Charging') and
(domoticz.devices('ConsumoRed.W').WhActual>300))then
domoticz.devices('OpenEvSe_New - EcoMode').switchOff().checkFirst()
domoticz.devices('OpenEvSe_New - Stop').switchOn().checkFirst()
domoticz.devices('OpenEVSE - ControlDinamico').switchSelector ("NightWaiting")
domoticz.log('Apago Openevse', domoticz.LOG_ERROR)
domoticz.openURL({
url = "https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX_HMPclIYYds/sendMessage?chat_id=XXXXXXXXXX&text=Apago Openevse",
method = 'GET'
})
end
end
}
Creamos el segundo Script
Partiendo de la información del anterior script, ya tenemos asegurado que el sistema migrará de un estado a otro, pero el OpenEVSE suele dejar el límite de carga máximo establecido en el último amperaje en el que se quedó al terminar la última carga. Normalmente la carga se termina a 6A porque con el control dinámico de potencia durante el día carga con excedentes fotovoltaicos hasta que nos quedamos sin producción. Con lo cual, el OpenEVSE iniciará la carga e irá bajando la potencia a medida que se termine el sol, dejando en su registro un límite máximo de carga de 6A. Si sólo tenemos el script anterior, llegará la noche, activaremos la carga del OpenEVSE y éste lo hará sin regular potencia porque la máxima establecida será de 6A, aunque haya disponible para cargar a más. Por ello creamos otro script:
Con este script conseguiremos que al haber un cambio en el estado del «OpenEVSE_New Status«:
- Que si es de día, estamos cargando y hace más de 5 minutos que no inyectamos a red (por tanto, estamos consumiendo), domoticz pasará el selector a modo «NightWaiting«, parará la carga y enviará la orden al OpenEVSE para que ponga el pilot a 20A (el límite máximo de carga para cuando vuelva a iniciar la carga). Esta será la situación en la que estamos cargando con RED porque ya no hay FV y queremos que corte la carga.
- Si el selector está en modo «Day» y si OpenEVSE está en modo «Disable«, o «Disconnected«, o «Timer» o «Charging» entonces domoticz enviará la orden de activar el ECO mode y el comando de 20A para el pilot. Es decir, si tenemos el selector en «Day» activamos modo ECO y máxima carga para control dinámico con FV.
- Si tenemos el selector en «NightWaiting» y no estamos cargando, entonces domoticz enviará la orden de activar el ECO mode y el comando de 20A para el pilot para preparar la carga nocturna con control dinámico de potencia en función de la potencia contratada.
- Si tenemos el selector como «NightWaiting» y si inicia la carga, domoticz vuelve a enviar la orden de activar el ECO mode y el comando de 20A para el pilot.
- Finalmente, cuando el selector esté en estado «NightWaiting» domoticz enviará la orden de 20A para el pilot.
return {
on = {
devices = {
'OpenEvSe_New - Status'
},
httpResponses = { 'OpenEvSeBack' }
},
execute = function(domoticz, device)
if (device.isDevice) and
(domoticz.time.isDayTime) and
(domoticz.devices('OpenEvSe_New - Status').state == 'Charging') and
(domoticz.devices('Solax_TEST - TO_GRID').lastUpdate.minutesAgo > 5) then --si estamos cargando y SOLAX deja de transmitir datos....
domoticz.devices('OpenEVSE - ControlDinamico').switchSelector ("NightWaiting") -- nos ponemos modo espera
domoticz.devices('OpenEvSe_New - EcoMode').switchOff().checkFirst()
--domoticz.devices('20A').switchOn().checkFirst()
domoticz.openURL({
url = 'http://IPdelOPENEVSE/r?json=1&rapi=$SC+20',
method = 'GET',
callback = 'OpenEvSeBack'
})
end
if (device.isDevice) and (domoticz.devices('OpenEVSE - ControlDinamico').state == 'Day') then --si estamos modo dia activamos ECO para carga de FV
if (domoticz.devices('OpenEvSe_New - Status').state == 'Disable') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Disconnected') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Timer') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Charging')then
domoticz.devices('OpenEvSe_New - EcoMode').switchOn().checkFirst()
--domoticz.devices('20A').switchOn().checkFirst()
domoticz.openURL({
url = 'http://IPdelOPENEVSE/r?json=1&rapi=$SC+20',
method = 'GET',
callback = 'OpenEvSeBack'
})
end
end
if (device.isDevice) and (domoticz.devices('OpenEVSE - ControlDinamico').state == 'NightWaiting') then --si estamos modo espera nocturna y sin cargar desactivamos ECO para NO cargar
if (domoticz.devices('OpenEvSe_New - Status').state == 'Disable') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Disconnected') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Timer') then
domoticz.devices('OpenEvSe_New - EcoMode').switchOff().checkFirst()
--domoticz.devices('20A').switchOn().checkFirst()
domoticz.openURL({
url = 'http://IPdelOPENEVSE/r?json=1&rapi=$SC+20',
method = 'GET',
callback = 'OpenEvSeBack'
})
end
end
if (device.isDevice) and
(domoticz.time.isNightTime) and
(domoticz.devices('OpenEVSE - ControlDinamico').state == 'NightWaiting') then --si estamos modo espera nocturna y activamos carga, activamos ECO para control dinamico de potencia
if (domoticz.devices('OpenEvSe_New - Status').state == 'Charging')then
domoticz.devices('OpenEvSe_New - EcoMode').switchOn().checkFirst()
domoticz.devices('OpenEVSE - ControlDinamico').switchSelector ("NightCharging")
--domoticz.devices('20A').switchOn().checkFirst()
domoticz.openURL({
url = 'http://IPdelOPENEVSE/r?json=1&rapi=$SC+20',
method = 'GET',
callback = 'OpenEvSeBack'
})
end
end
if (device.isDevice) and
(domoticz.devices('OpenEVSE - ControlDinamico').state == 'NightWaiting') then --si estamos modo espera nocturna y activamos carga, activamos ECO para control dinamico de potencia
--domoticz.devices('20A').switchOn().checkFirst()
domoticz.openURL({
url = 'http://IPdelOPENEVSE/r?json=1&rapi=$SC+20',
method = 'GET',
callback = 'OpenEvSeBack'
})
--domoticz.log('FUNCIONA', domoticz.LOG_ERROR)
end
if (device.isHTTPResponse) then --ejecutado por httpResponses = { 'OpenEvSeBack' }
--no hacemos nada
end
end
}
Creamos el tercer Script
Finalmente, nos falta definir qué pasará cuando tengamos el Selector en «Manual». Para ello ejecutamos el siguiente script:
- Si tenemos el OpenEVSE en cualquier estado excepto cargando y el Selector en «Manual«, entonces domoticz desactivará el ECO mode para poder cargar a la potencia que nosotros queramos, independientemente de la hora del día que sea y de si hay fotovoltaica o no.
return {
on = {
devices = {
'OpenEvSe_New - Status'
}
},
execute = function(domoticz)
if ((domoticz.devices('OpenEvSe_New - Status').state == 'Disable') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Disconnected') or
(domoticz.devices('OpenEvSe_New - Status').state == 'Timer')) and
(domoticz.devices('OpenEVSE - ControlDinamico').state == 'Manual') then
domoticz.devices('OpenEvSe_New - EcoMode').switchOff().checkFirst()
end
end
}
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.
Cualquier duda, sugerencia o comentario será bien recibida en la web!