Script para cambiar la función MASTER - ESCLAVO entre varios derivadores FreeDS en función de un selector o una hora determinada del día

Paso a paso

Consideraciones previas

Para utilizar este mismo script es necesario tener mas de un derivador con el firmware FreeDS, que todos ellos estén en la misma Red que domoticz, que estén encendidos en el momento en que ponemos el programador en el script y que estén configurados como explicamos a continuación. 

Aunque para este script no es necesario, si quieres tener los datos que envían los derivadores en domoticz, puedes seguir el tutorial: «Cargar los datos MQTT del derivador de excedentes solares FreeDS en domoticz mediante Node Red«.

Como os decía, será necesario que ambos derivadores estén configurados previamente de la siguiente manera:

  • Todos ellos deberán tener metidos los datos del medidor de consumo que utilicemos para su lectura (Shelly EM, Webeee, Fronius, Solax, Tasmota….) con la IP del medidor de consumo inserada correctamente. Para confirmar que lo tenemos correctamente configurado los derivadores (todos ellos) deben funcionar correctamente con lectura en medidor de consumo (ACTUANDO COMO MASTER).
  • A su vez, todos los derivadores estarán configurados como SLAVE (esclavo) habiendo introducido la IP del Master que nos interese, el porcentaje (%) del master al que queremos que inicie funcionamiento el esclavo, etc.
  • En resumen, los derivadores funcionarán correctamente si marcamos la pestaña de lectura de datos con el MEDIDOR de consumo que nos interese y, en caso de que cambiemos la pestaña por SLAVE, el derivador seguirá funcionando automáticamente tomando como referencia al Máster.

¿Por qué este script?

Os cuento mi situación para poneros en contexto y que luego podáis adaptarlo a vuestras necesidades. 

Tengo dos derivadores, uno con un Acumulador de calor de 1300W en el salón, y otro con un Acumulador de calor de 800W en la habitación. 

Si pongo el derivador del salón como máster y el de la habitación como esclavo, durante el día el acumulador del salón funciona en todo momento y, si sobra energía, la capta el de la habitación. El caso es que a última hora el acumulador de la habitación ha captado muy poca energía respecto al del salón.

Me diréis, pues pon como máster el derivador de la habitación y así te garantizas ese acumulador a tope de carga y lo que sobre se le mete al del salón, pero si pongo el derivador de la habitación como máster y el del salón como esclavo, la habitación se calienta desde primera hora cuando NO LA NECESITAMOS CALIENTE HASTA LA NOCHE. Sin embargo llegamos a casa a las 18.00 y el salón es donde nos quedamos hasta la noche, con lo cual, me interesa más lo siguiente (que es por lo que surge este script):

El derivador del salón actúa como MASTER desde primera hora hasta las 13.00 y a partir de las 13.00 el MASTER pasa a serlo el de la habitación, siendo el del salón su esclavo. De este modo aseguro calor por la mañana en el salón para acumular lo máximo posible para cuando nosotros llegamos, y calor por la tarde en la habitación para garantizar calor por la noche en el dormitorio.

Al lío...

Creamos el dummy

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: MasterFreeDS) 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 Acumulador Habitación y Acumulador Salón. 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:

Finalmente en mi caso queda de la siguiente manera:

Creamos el script en Dzvents:

Nos vamos a:

Domoticz > Setup > More options > Events

Y seleccionamos Device e introducimos este script modificando lo rojo y azul por lo que os comentamos a continuación:

return {
on = {
devices = {
'MasterFreeDS'
},
httpResponses = { 'FreeDS' }
},
execute = function(domoticz, device)
if (device.isDevice) and
(domoticz.devices('MasterFreeDS').state == 'Acumulador Salón') then --si tenemos seleccionado como MASTER el Acumulador Salón en el Selector...
--enviamos la orden de cambio de roles para MASTER Acumulador Salón y Slave Acumulador habitación
domoticz.openURL({
url = 'http://IPdelFREEDSdelSALON/selectversion?data=3',
method = 'POST',
callback = 'FreeDS'
})
domoticz.openURL({
url = 'http://IPdelFREEDSdelaHABITACION/selectversion?data=12',
method = 'POST',
callback = 'FreeDS'
})
end
if (device.isDevice) and
(domoticz.devices('MasterFreeDS').state == 'Acumulador Habitación') then --si tenemos seleccionado como MASTER el Acumulador Salón en el Selector...
--enviamos la orden de cambio de roles para MASTER Acumulador Salón y Slave Acumulador habitación
domoticz.openURL({
url = 'http://IPdelFREEDSdelSALON/selectversion?data=12',
method = 'POST',
callback = 'FreeDS'
})
domoticz.openURL({
url = 'http://IPdelFREEDSdelaHABITACION/selectversion?data=3',
method = 'POST',
callback = 'FreeDS'
})
end
end
}

Donde debes sustituir según tu versión de FreeDS (lo pone en la pantalla de monitorización al final de la página, en letra pequeña):

SI TU FREEDS ES UNA VERSIÓN IGUAL O ANTERIOR A LA 1.0.6:

  • IPdelFREEDSdelSALON e IPdelFREEDSdelaHABITACION por las IPs de los derivadores que te interesen.
  • 12 es el número que establece como SLAVE (esclavo) al derivador.
  • 3 es el número que establece como MASTER al derivador cuando éste lee como SOLAX (TASMOTA). Para tu caso, tendrás que escoger el número que hará que tu derivador sea MASTER en función de dónde tome lecturas:
    • 1 para Solax Wifi v1 – Hibridos.
    • 2 para Solax Wifi v2.
    • 0 para Solax Wifi v2 local.
    • 11 para Fronius (API).
    • 3 para Solax MQTT (Tasmota).
    • 4 para Meter DDS238-2 Modbus.
    • 5 para Meter DDSU666 Modbus.
    • 6 para Meter SDM120 / SDM220 Modbus.
    • 8 para SMA Modbus TCP (En desarrollo).
    • 14 para Victron Modbus TCP.
    • 15 para Fronius Modbus TCP.
    • 16 para Huawei Modbus TCP.
    • 9 para Wibee.
    • 10 para Shelly EM.
    • 13 para ICC Solar (Mqtt)-
    • 12 para Slave FreeDS.

SI TU FREEDS ES UNA VERSIÓN POSTERIOR O IGUAL A LA 1.0.7:

  • IPdelFREEDSdelSALON e IPdelFREEDSdelaHABITACION por las IPs de los derivadores que te interesen.
  • 27 es el número que establece como SLAVE (esclavo) al derivador.
  • 41 es el número que establece como MASTER al derivador cuando éste lee como MQTT_BROKER. Para tu caso, tendrás que escoger el número que hará que tu derivador sea MASTER en función de dónde tome lecturas:
    • 1 para DDS238_METER
    • 2 para DDSU666_METER
    • 3 para SDM_METER
    • 4 para MUSTSOLAR
    • 21 para SOLAX_V2
    • 22 para SOLAX_V2_LOCAL
    • 23 para SOLAX_V1
    • 24 para WIBEEE 
    • 25 para SHELLY_EM
    • 26 para FRONIUS_API
    • 28 para GOODWE
    • 42 para ICC_SOLAR
    • 61 para SMA_BOY
    • 62 para VICTRON
    • 63 para FRONIUS_MODBUS
    • 64 para HUAWEI_MODBUS
    • 65 para SMA_ISLAND
    • 66 para SCHNEIDER
    • 67 para WIBEEE_MODBUS
    • 68 para INGETEAM
    • 80 para SOLAREDGE

Establecemos un programador (timer) mediante domoticz o mediante script

Tenemos dos posibilidades a la hora de establecer una programación. O bien a través de domoticz (la opción más cómoda), o a través de scripts.

Si lo hacemos mediante domoticz, deberemos tener cuidado a la hora de editar nuestro selector. Para ello, entra en el siguiente tutorial y continúa a partir de él: «Cómo programar los Selector Switch o Interruptores Selectores SIN scripts«.

Si prefieres programar mediante scripts sigue este mismo apartado.

En mi caso he establecido un programador para que desde primera hora hasta las 13.00 el MASTER sea el acumulador del salón y de 13:00 en adelante sea el de la habitación.

Puedes adaptar el horario y los scripts a tu gusto. He hecho uno para cada cambio de roles (uno para primera hora que marque el derivador del salón como MASTER y otro para las 13:00 para marcar el derivador de la habitación como MASTER):

Acumulador del salón pasa a ser MASTER a las 6 de la mañana:

return {
on = {
timer = {
'at 06:00', -- specific time
}
},
execute = function(domoticz, device)
domoticz.devices('MasterFreeDS').switchSelector ("Acumulador Salón")
domoticz.log('Acumulador Salon = FreeDSmaster', domoticz.LOG_INFO)
end
}

Acumulador de la habitación pasa a ser MASTER a las 13:

return {
on = {
timer = {
'at 13:00', -- specific time
}
},
execute = function(domoticz, device)
domoticz.devices('MasterFreeDS').switchSelector ("Acumulador Habitación")
domoticz.log('Acumulador Habitacion = FreeDSmaster', domoticz.LOG_INFO)
end
}

Muy importante que tengáis los derivadores encendidos a la hora que programéis el cambio de roles…

Comprobamos su fucionamiento

Para comprobar que funciona primero mirad si el primer script actúa accionando vosotros mismos manualmente el selector de un derivador a otro. Una vez haya cambiado por petición del script, deberéis refrescar la página del FreeDS.

Si el primer script os funciona, podréis pasar al temporizador.

Comandos para controlar FreeDS

Os facilitamos los siguientes comandos en mqtt para controlar FreeDS:

  • pwm -> Valores 0 o 1 (Activa / Desactiva el pwm)
  • pwmman -> Valores 0 o 1 (Activa / Desactiva el modo manual)
  • pwmmanvalue -> Valores de 0 a 100 (Ajusta el % del modo manual)

Todos ellos se utilizan mediante el tema:

NOMBRE_FREEDS/cmnd/COMANDO_A_REALIZAR.

Control del FreeDS mediante Domoticz

Si os fijáis en las opciones de Configuración MQTT del FreeDS, aparece la opción de controlar tres parámetros mediante domoticz:

Si activáis la función, e introducís:

  • Un dummy tipo Switch o Interruptor ON/OFF para el IDX Pwm,
  • Un dummy tipo Switch o Interruptor Dimmer para el IDX Auto/Manual,
  • Un dummy tipo Switch o Interruptor Dimmer para el IDX Pantalla,

podréis utilizar esos devices para controlar el FreeDS desde domoticz. Para ello, deberéis tener en TRUE la siguiente casilla en:

Domoticz > Setup > Hardware > Local MQTT

Pasar de PWM en ON a OFF y de Manual a Automático y viceversa mediante Scripts DzVents

VICENTE nos cuenta cómo ha adaptado el script anterior para encender y apagar el derivador con un interruptor:

return {
on = {
devices = {
'Derivador'
},
},
execute = function(domoticz, device)
if (domoticz.devices('Derivador').state == 'On') then
domoticz.openURL({
url = 'http://IPDELFREEDS/tooglebuttons?data=6',
method = 'POST',
callback = 'FreeDS'
})
end
if (domoticz.devices('Derivador').state == 'Off') then
domoticz.openURL({
url = 'http://IPDELFREEDS/tooglebuttons?data=6',
method = 'POST',
callback = 'FreeDS'
})
end
end
}

EB2RA nos cuenta cómo ha adaptado el script anterior para pasar del modo MANUAL al AUTOMATICO y viceversa con un interruptor:

return {
on = {
devices = {
'FDS-man-auto'
},
},
execute = function(domoticz, device)
if (domoticz.devices('FDS-man-auto').state == 'On') then
domoticz.openURL({
url = 'http://IPDELFREEDS/tooglebuttons?data=7',
method = 'POST',
callback = 'FreeDS'
})
end
if (domoticz.devices('FDS-man-auto').state == 'Off') then
domoticz.openURL({
url = 'http://IPDELFREEDS/tooglebuttons?data=7',
method = 'POST',
callback = 'FreeDS'
})
end
end
}

Si el togglebutton lo usamos con el valor 5 ENCENDEMOS o APAGAMOS la pantalla del ESP32.

Particularidad sugerida por Vicente: sincronizar los estados, pausar DzVents y cambiar el estado hasta que coincida.

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!