# Einleitung

[![ebenen_in_nodered.png](https://casa.corrently.de/uploads/images/gallery/2020-07/scaled-1680-/ebenen_in_nodered.png)](https://casa.corrently.de/uploads/images/gallery/2020-07/ebenen_in_nodered.png)

Innerhalb von Node-Red sind die ebenen als einzelne Flows angelegt und fassen Schritte im Energiemanagement zusammen. Jede Ebene bietet die Möglichkeit eine eigene Erzeugung und Verbrauch zu definieren, welche zur [Bildung einer Bilanz](https://casa.corrently.de/books/ebenen-modell/page/konzept-bilanzierung-einer-ebene-%28saldo%29 "Konzept: Bilanzierung einer Ebene (Saldo)") genutzt wird.

**Flow Daten einer Ebene**

[![ebene_0_flowdaten.png](https://casa.corrently.de/uploads/images/gallery/2020-07/scaled-1680-/ebene_0_flowdaten.png)](https://casa.corrently.de/uploads/images/gallery/2020-07/ebene_0_flowdaten.png)

Die einzelnen Komponenten (zum Beispiel Stromzähler) fügen ihren individuellen Wert in Watt zur entsprechenden Variable des Flows hinzu.

[![wirkleistungs_knoten.png](https://casa.corrently.de/uploads/images/gallery/2020-07/scaled-1680-/wirkleistungs_knoten.png)](https://casa.corrently.de/uploads/images/gallery/2020-07/wirkleistungs_knoten.png)

```JavaScript
// msg.payload =  msg.payload;
const subSUM='Consumption';


let sum = flow.get(subSUM) * 1;
if(isNaN(sum)) sum = 0;

let previous = context.get("previous") * 1;
if(isNaN(previous)) previous = 0;

if(flow.get("SaldoID") != context.get("SaldoID")) {
    context.set("SaldoID",flow.get("SaldoID"));
} else {
    sum -= previous;
}
sum += msg.payload;

context.set("previous",msg.payload);

flow.set(subSUM,sum);
node.status({text:msg.payload +" W"});
return msg;
```

Damit auch bei asynchronem Empfang der Daten immer eine Bilanz gebildet werden kann, wird mit einer `SaldoId` gearbeitet, welche als Indikator für die einzelnen Komponenten dient, ob der Leistungswert bereits zur Summe (`Consumption` oder `Production`) hinzugefügt wurde.

In der Referenzimplementierung merkt sich der Node im eigenen Context, welche Leistung zur Summe hinzugefügt wurde (Variable `previous`) sowie die `SaldoId`. Sollte beim folgenden Messwert die `SaldoId` gleich sein, so wird der vorherigen Messung zunächst von der Summe abgezogen (Zeile 14) und im Anschluss der aktuelle Wert hinzugefügt (Zeile 16).