Hola @ruegerth,
Gracias por este comentario detallado, nos ayudará a entender mejor 
Creo que el cálculo no está mal, pero que los datos enviados no son los que Gladys espera. Hay dos conceptos que hay que distinguir claramente:
- kW = una potencia instantánea (lo que consumes en el instante T)
- kWh = una energía (una potencia durante un período de tiempo)
Tu contador muestra 0,345 kW: es una potencia, no un consumo.
Cómo Gladys calcula el consumo
El seguimiento energético de Gladys se basa únicamente en funcionalidades de tipo
« Índice » (el índice acumulado de tu contador, en kWh, aquel que solo aumenta).
Cada 30 minutos, Gladys hace la diferencia entre las lecturas sucesivas del
índice para deducir el consumo del período, y luego aplica tu tarifa.
Las funcionalidades de tipo « Potencia » nunca se utilizan para este cálculo,
solo sirven para mostrar una curva.
Por lo tanto, si la potencia instantánea se envía a una funcionalidad de tipo
« Índice » (o « Energía »), Gladys hace la diferencia entre dos potencias y suma
todas las variaciones positivas. Ejemplo en un día:
0,3 → 1,2 → 0,4 → 2,1 → 0,5 …
Gladys cuenta +0,9, +1,7, etc. (las bajadas se ignoran, se interpretan
como un reinicio del contador). Rápidamente se obtiene un total 3 a 5 veces demasiado
grande — lo que coincide bien con tu 15,69 en lugar de 3,75.
Segundo detalle: la unidad kW no es una unidad de energía para Gladys (solo Wh,
kWh y MWh se convierten). Una funcionalidad declarada en kW se toma tal cual como
kWh en el momento del cálculo del costo, lo que también distorsiona la tarifa.
¿Puedes confirmar?
En tu dispositivo, ¿cuál es el tipo exacto de la funcionalidad alimentada por
Node-RED (« Índice », « Energía » o « Potencia ») y qué unidad está
seleccionada? Una captura del dispositivo en Gladys ayudaría a validar mi
hipótesis.
Cómo corregir
Solución ideal: enviar a Gladys el índice acumulado de tu contador en kWh (el
total que solo aumenta, no la potencia), en una funcionalidad de tipo
« Índice » con la unidad kWh. Allí, un envío cada 15 minutos es
perfectamente suficiente, y el cálculo será exacto.
Si tu lectura solo te da la potencia instantánea: debes construir el índice
tú mismo en Node-RED integrando la potencia en el tiempo. Un nodo function
antes del envío a Gladys:
const now = Date.now();
const powerKw = Number(msg.payload); // potencia instantánea en kW
const last = context.get('last');
if (!last) {
context.set('last', { t: now, power: powerKw, index: 0 });
return null; // esperamos la segunda lectura
}
const deltaHours = (now - last.t) / 3600000;
const index = last.index + last.power * deltaHours; // kWh acumulados
context.set('last', { t: now, power: powerKw, index });
msg.payload = Number(index.toFixed(4));
return msg;
Dos precauciones:
- usa un contexto persistente (almacenamiento
file en Node-RED), de lo contrario el índice
se reinicia a cero en cada reinicio;
- con una lectura cada 15 minutos, se supone que la potencia se mantuvo
constante durante todo el intervalo: es muy aproximado. Si pasas por
este método, muestra cada minuto (o 10-30 s), la precisión será mucho mejor. Por eso el índice del contador sigue siendo la mejor fuente.
Una vez hecha la corrección
- Elimina el historial erróneo de la funcionalidad concernida (o crea una
funcionalidad limpia);
- Ve a Seguimiento de energía → Configuración y lanza « Recálculo del
consumo », luego « Calcular el costo desde el principio ». Puedes seguir
el progreso en las tareas en segundo plano.
Dime qué dan el tipo y la unidad de tu funcionalidad, afinaremos si es necesario!