Cómo crear un contador o registro de consumo acumulado (o inyección)

En esta miniGuía vamos a contar cómo podemos crear un dispositivo virtual en nuestro domoticz que contabilice consumo o inyección a lo largo de los minutos, horas, días, semanas, meses y años.

Importante tener en cuenta que este sistema funciona cuando tenemos en nuestro domoticz sensores que registran consumos.

Para la guía tenemos dos ejemplos: utilizamos un registro de inyección de energía a red de Fronius y un control de consumo PZEM.

Paso a paso

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: testInyección) y el tipo de sensor. Seleccionaremos Electric (instant + counter) ó Eléctrico (instantáneo + Contador).

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

Clicamos sobre Edit del dispositivo que acabamos de crear:

Y marcamos Computed y Update:

Creamos el script en Dzvents:

Nos vamos a:

Domoticz > Setup > More options > Events

Y seleccionamos Device e introducimos este script:

return {
on = {
devices = {
'PZEM'--Cambiar por el que corresponda
}
},
execute = function(domoticz, device)
local valor = device.actualWatt
domoticz.devices('testInyección').updateElectricity(valor,0)
end
}

Donde debes sustituir:

  • PZEM por el sensor del que quieres que acumulemos el registro de consumo/inyección.
  • testInyección por el device que has creado para registrar este acumulado. OJO con las mayúsculas y las tildes. Debe estar redactado exactamente igual que el nombre del device que acabas de crear.

Ejemplo para registrar el acumulado de inyección de Fronius:

Para tener constancia de cuánto vamos inyectando a red en una instalación solar con Fronius y habiendo cargado el inversor en domoticz mediante el plugin de Fronius («Integración del inversor solar FRONIUS en domoticz mediante plugin«).

En este caso, el plugin de Fronius nos carga un dummy llamado Inyección a Red:

Partiendo de esta base, haríamos lo siguiente.

  1. Creamos un device llamado testInyección siguiendo los pasos anteriores.
  2. Editamos el dummy marcando Computed.
  3. Creamos el script adaptándolo a nuestro caso y guardamos dejando el script ENCENDIDO u ON:

Comprobamos su fucionamiento

El nuevo device irá acumulando a medida que se vayan registrando medidas:

Sistema para que el acumulado no se reste lo que inyecta el inversor

@EB2RA del grupo “Domoticz a lo Spain” de telegram nos cuenta cómo ha conseguido que el acumulado no se reste lo que inyecta el inversor con el siguiente script:

Donde tenemos tres virtuales:

  1. GWgastored: que es el que recoge el consumo instantáneo.
  2. Exp endesa GW y
  3. Acum_endesa_GW que son los que acumulan.

En mi caso consumo de red es negativo y exportar es positivo. Cuando es negativo acumula en uno y cuando es positivo en el otro, para que no se quede la última lectura como una lectura recurrente, doy ese valor 0 para que no ocurra.

return {
on = {
devices = {
'GW-gastored'--Cambiar por el que corresponda
}
},
execute = function(domoticz, device)
--acumula el valor en el contador
if(device.actualWatt < 0) then
local valor = device.actualWatt * -1
domoticz.devices('Acum_endesa_GW').updateElectricity(valor,0)
end
if(device.actualWatt > 0) then
local valor = 0
-- local valor = device.actualWatt
domoticz.devices('Acum_endesa_GW').updateElectricity(valor,0)
end
if(device.actualWatt > 0) then
-- local valor = 0
local valor = device.actualWatt
domoticz.devices('Exp_endesa_GW').updateElectricity(valor,0)
end
if(device.actualWatt < 0) then
local valor = 0
--local valor = device.actualWatt
domoticz.devices('Exp_endesa_GW').updateElectricity(valor,0)
end
end
}

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!