Ist die Berechnung des Energieverbrauchs falsch? Unstimmig?

Hallo zusammen,

ich bräuchte etwas Hilfe bei der Überwachung des Energieverbrauchs.

Aktuell lese ich direkt am Stromzähler des Hauses den Netzbezug in kW ab und übermittle diesen Wert an Gladys mit vier Nachkommastellen. Dort habe ich ein virtuelles Gerät mit Energieüberwachungsfunktionen angelegt, den Stromtarif definiert und alles synchronisiert.

Also: Node-RED liefert über eine Abfrage den aktuellen Verbrauch in kW (z. B. 0,345 kW) und übermittelt diesen Wert alle 15 Minuten an Gladys. Dort scheint die Berechnung aber komplett falsch zu sein. Gestern hatte ich z. B. einen Verbrauch von ca. 3,75 kW. Gladys behauptet aber, es wären 15,69 kW gewesen… Wie lassen sich diese gravierenden Unterschiede erklären?

Hallo @ruegerth,

Vielen Dank für dein ausführliches Feedback, das hilft uns sehr weiter :slightly_smiling_face:

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

  1. Lösche den fehlerhaften Verlauf der betroffenen Funktion (oder erstelle eine
    neue, saubere Funktion);
  2. 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!

Vielen Dank für die schnelle Hilfe.
Wenn ich doch nur besser in Physik aufgepasst hätte.
Ich kann immer noch von vorne beginnen, ich habe bisher alles gelöscht.
An meinem Stromzähler (in Deutschland der Lieferpunkt des Energieanbieters) kann ich den Verbrauch sekündlich ablesen.
In Node-RED frage ich diesen Zähler nun alle 15 Minuten ab und sende die Daten über MQTT an Gladys. So sieht das Ganze aus:

Übersetzt mit DeepL.com (kostenlose Version)

Ich habe ein virtuelles Gerät in Gladys konfiguriert, hole mir das MQTT-Thema und habe die Überwachung des Energieverbrauchs darauf aufgebaut. Mal sehen… Ich hoffe (für mich und für euch), die Differenz zwischen Energie und Leistung richtig verstanden zu haben. Grüße, Thomas

Entschuldigung, ich habe vergessen… So werden die Daten in Gladys angezeigt. Im Moment sieht es so aus und dann alle 15 Minuten:

Super, funktioniert jetzt alles? :slight_smile:

Ja, vielen Dank (P.S.: Deep L ist leistungsfähiger und genauer für Übersetzungen :wink: )

Zur Information, ich weiß nicht, ob du Englisch sprichst, aber das Forum übersetzt Nachrichten automatisch in diese Sprache.

Falls wir eines Tages viele deutsche Nutzer haben, könnte ich die Übersetzung ins Deutsche aktivieren! (Aber ich zahle die KI-Übersetzungsanfragen, also braucht es eine kritische Masse an Nutzern :smiley: )

Mais non, surtout pas dépenser d’argent, DeepL fait très bien l’affaire (et puis, de toute façon, nous, les Allemands, on apprend le français, et vous, les Français, vous apprenez l’allemand :grinning_face: :joy: :grinning_face:)