Hallo @ruegerth,
Vielen Dank für dein ausführliches Feedback, das hilft uns sehr weiter 
Ich denke, die Berechnung ist nicht falsch, aber die gesendeten Daten sind nicht
jene, die Gladys erwartet. Hier müssen zwei Begriffe klar unterschieden werden:
- kW = eine Momentanleistung (was du zum Zeitpunkt T verbrauchst)
- kWh = eine Energie (eine Leistung über einen Zeitraum)
Dein Zähler zeigt 0,345 kW an: das ist eine Leistung, keine Verbrauchsmessung.
Wie Gladys den Verbrauch berechnet
Die Energieverfolgung von Gladys basiert ausschließlich auf Funktionen vom Typ
„Index“ (der kumulierte Zählerstand in kWh, der nur steigt).
Alle 30 Minuten berechnet Gladys die Differenz zwischen aufeinanderfolgenden
Zählerständen, um daraus den Verbrauch des Intervalls abzuleiten und wendet dann
deinen Tarif an.
Funktionen vom Typ „Leistung“ werden niemals für diese Berechnung verwendet,
sie dienen nur zur Anzeige einer Kurve.
Wenn also die Momentanleistung in eine Funktion vom Typ
„Index“ (oder „Energie“) gesendet wird, berechnet Gladys die Differenz zwischen zwei
Leistungen und addiert alle positiven Änderungen. Beispiel für einen Tag:
0,3 → 1,2 → 0,4 → 2,1 → 0,5 …
Gladys zählt +0,9, +1,7 usw. (die Abnahmen werden ignoriert, sie werden als
Rücksetzung des Zählers interpretiert). Man erhält sehr schnell einen Gesamtwert, der
3- bis 5-mal zu groß ist — was gut zu deinem Wert von 15,69 statt 3,75 passt.
Zweiter Punkt: Die Einheit kW ist für Gladys keine Energieeinheit (nur Wh,
kWh und MWh werden umgerechnet). Eine Funktion, die in kW deklariert ist, wird
also beim Berechnen der Kosten als kWh behandelt, was den Tarif ebenfalls verfälscht.
Kannst du das bestätigen?
In deinem Gerät, welcher ist der exakte Typ der von Node-RED versorgten
Funktion („Index“, „Energie“ oder „Leistung“) und welche Einheit ist
ausgewählt? Ein Screenshot des Geräts in Gladys würde helfen, meine Hypothese zu
validieren.
Wie korrigiert man das?
Ideale Lösung: Sende an Gladys den kumulierten Zählerstand deines Zählers in kWh
(der Gesamtwert, der nur steigt, nicht die Leistung), in einer Funktion vom Typ
„Index“ mit der Einheit kWh. Dort ist ein Senden alle 15 Minuten
vollständig ausreichend, und die Berechnung wird exakt sein.
Wenn dein Ablesen dir nur die Momentanleistung liefert: Du musst den Index
selbst in Node-RED konstruieren, indem du die Leistung über die Zeit integrierst. Ein
function-Knoten vor dem Senden an Gladys:
const now = Date.now();
const powerKw = Number(msg.payload); // Momentanleistung in kW
const last = context.get('last');
if (!last) {
context.set('last', { t: now, power: powerKw, index: 0 });
return null; // wir warten auf die 2. Ablesung
}
const deltaHours = (now - last.t) / 3600000;
const index = last.index + last.power * deltaHours; // kumulierte kWh
context.set('last', { t: now, power: powerKw, index });
msg.payload = Number(index.toFixed(4));
return msg;
Zwei Vorsichtsmaßnahmen:
- Verwende einen persistenten Kontext (Speicher
file in Node-RED), sonst
startet der Index bei jedem Neustart bei null;
- Bei einer Ablesung alle 15 Minuten geht man davon aus, dass die Leistung während
des gesamten Intervalls konstant blieb: das ist sehr ungenau. Wenn du diesen
Weg gehst, solltest du lieber alle Minuten (oder 10-30 Sekunden) ablesen, dann
ist die Genauigkeit viel besser. Deshalb ist auch der Zählerstand die beste
Quelle.
Nach der Korrektur
- Lösche den fehlerhaften Verlauf der betroffenen Funktion (oder erstelle eine
neue, saubere Funktion);
- Gehe zu Energieverfolgung → Einstellungen und starte „Verbrauch
neu berechnen“, dann „Kosten seit Beginn berechnen“. Du kannst den
Fortschritt in den Hintergrundaufgaben verfolgen.
Sag mir, was der Typ und die Einheit deiner Funktion ergeben, dann können wir
falls nötig noch nachjustieren!