Ebene 1 - Flexibilität und Speicher
In dieser Ebene werden alle Komponenten eingebunden, die für das Energiesystem eine Flexibilität darstellen. Dies können entweder verschiebbare Lasten oder ein vorhandener Stromspeicher sein.
Erzeugung und Verbrauch
Erzeugung
Bei der Referenzimplementierung von Casa Corrently existiert kein flexibler Erzeuger. Die Erzeugung ist ausschließlich Photovoltaik und somit vom Sonnenschein abhängig. An dieser Stelle können jedoch flexible Erzeuger wie ein BHK aufgenommen werden, dazu ist analog zur Einbindung der Erzeugung in Ebene 0 vorzugehen.
Die Entladung des Speichers wird, wegen des gewählten Betriebsmodus des Speichers, erst im Saldo / Bilanzierung berücksichtigt.
Funktion Wirkleistung
msg.payload = Math.round(msg.payload.power_mw / 1000);
node.status({text:"P: "+msg.payload+" W"});
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);
return msg;
Verbrauch
Flexible Verbräuche sind Geräte, bei denen entweder der Betriebszustand geschaltet werden kann (An/Aus) oder die Wirkleistung (Watt) begrenzt wird.
Innerhalb der Referenzimpelementierung wird hier ein TP-Link HS110 Smart-Plug als Beispiel für ein schaltbares Gerät verwendet. An der so geschalteten Steckdose hängt ein E-Scooter, der lediglich mit überschüssigem Strom geladen werden soll. Mit Flexon
wird ein Inbound-Webhook definiert, der den SmartPlug schalten kann. Ausgelöst (gesendet) wird der Webhook hier von einem Alert im Grafana Dashboard. Selbstverständlich hätte man dieses Ziel auch direkt aus den Werten der Ebene 2 erreichen können oder zusätzliche Bedingungen/Priorisierungen mit einer anderen Flexibilität vornehmen können.
Die Wallbox ,zur Steuerung der KFZ-Ladung, hat ein eingebautes Management für die Ladung mit Überschussstrom. Zur Saldenbildung wird von der Ladeeinrichtung daher lediglich die momentane Leistung via MQTT abgerufen.
Bilanzierung / Saldo
Bei der Referenzimplementierung kommt ein Speicher zum Einsatz, welcher im Betriebsmodus "Null-Auspegelung am Netzanschlusspunkt" betrieben wird. Dieser Modus hat den Vorteil, dass die Eigenoptimierung des Speichers vollständig erhalten bleibt und als abgeschlossenes System betrachtet werden kann.
Eine Saldierung muss damit nicht durch die Ebene vorgenommen werden, sondern kann aus den Speicherdaten ausgelesen werden.
Funktion SoC kWh Umrechnen
msg.payload = Math.round(5500 * (msg.payload/100));
flow.set('Saldo',msg.payload);
node.status({text:"P: "+msg.payload+" W"});
return msg;
Die Flexibilitäten werden als Kapazität (regelbares/steuerbare Stromnutzung) als e1flex
gespeichert. Hierbei ist zu beachten, dass der Speicher maximal mit 2.000 Watt beladen oder entladen werden kann.
Funktion Kapazität
if(msg.payload > 2000) msg.payload = 2000;
msg.payload += flow.get('Consumption') + global.get('FlexConsumption');
node.status({text:"P: "+msg.payload+" W"});
return msg;
Vorhersage / Prognose
Die Vorhersage in Ebene 1 erfolgt durch Fortschreibung der Prognose in Ebene 0. Basierend auf den Ebene 0 Werten, wird der Speicherfüllstand vorhergesagt und die flexiblen Lasten ergänzt.
Funktion Vorhersage SoC und Flex Integration
let saldo = flow.get("Saldo") - flow.get("Consumption");
let options = global.get("FlexOptions");
for(let i=0; i<msg.payload.length;i++) {
msg.payload[i].measurement = "e1forecastSaldo";
let w = (-1) * msg.payload[i].fields.w;
let flex = 0;
if(i<24) {
for(let j=0;j<options.length;j++) {
w -= options[j][i];
flex += options[j][i];
}
}
if(w > 2000) w = 2000;
if(w < -2000) w = -2000;
if(saldo + w > 5500) w = 5500-saldo;
if(saldo + w < 0) w = saldo;
saldo += w;
msg.payload[i].fields.w -= w;
msg.payload[i].fields.flex = flex;
msg.payload[i].fields.wh = saldo;
}
flow.set("forecastSaldo",msg.payload);
node.status({text:""+new Date().toLocaleString()});
return msg;
Optionen für Flexibilitäten werden im globalen Array FlexOptions
gehalten (Zeile 2). Dort gespeichert werden sie durch das individuelle Fahrplanmanagement zum Gerät. Diese einzelnen Vorhersagen werden vor der Berücksichtigung des Speichers integriert (Zeile 9-14).
Eine Besonderheit hier ist, dass der Speicher der Referenzimplementierung maximal mit 2.000 beladen und entladen werden kann. Entsprechend kann der Speicherfüllstand innerhalb von einer Stunde maximal um +/- 2 kWh verändert werden (Zeile 17-18).
GrünstromIndex
Basierend auf dem prognostizierten Saldo der Ebene wird ein GrünstromIndex gebildet und zur Visualisierung mittels Grafana in die InfluxDB gespeichert.
Vergleiche: GrünstromIndex je Ebene
Funktion Ebenen GSI
let saldo = flow.get("forecastSaldo");
let min = 9999999999;
let max = -999999999999;
for(let i=0; i<saldo.length;i++) {
saldo[i].measurement = "e1gsi";
if(saldo[i].fields.w > max) max = saldo[i].fields.w ;
if(saldo[i].fields.w < min) min = saldo[i].fields.w ;
}
let delta = max - min;
for(let i=0; i<saldo.length;i++) {
saldo[i].fields.gsi = 100-Math.round(((saldo[i].fields.w - min) / delta)*100);
}
flow.set("gsi",saldo);
msg.payload = saldo;
global.set("e1gsi",saldo);
return msg;
Je nach tatsächlichen Vorhandenen Flexibililtäten unterscheidet sich der GrünstromIndex der Ebene 0 und der Ebene 1 nur minimal. Wird, wie bei der Referenzimplementierung, kommt bei der Erzeugung lediglich Photovoltaik zum Einsatz, dann existieren gerade in den Wintermonaten nur wenige Abweichungen.