Konzept: Zweistufige Prognoseerstellung
Die Vorhersagen in den Ebenen werden in zwei Schritten durchgeführt. Zunächst wird eine generische Abbildung auf Abhängige Werte vorgenommen und im Anschluss in einen Graphen (=konkrete Zeitreihe) überführt.
Schritt 1: Abbildung
// Create empty array if not exists
let hours = {};
for(let i=0;i<24;i++) {
hours["h"+i] = {
latest: {},
outcome: {
sum: 0,
cnt: 0,
mean: 0,
min: 9999999,
max:0,
min_gsi:999999
}
};
}
for(let i=0;i<msg.payload.length;i++) {
let hour = new Date(msg.payload[i].time).getHours();
hours["h"+hour].latest.gsi = msg.payload[i].mean + 1;
}
msg.hours = hours;
return msg;
In diesem Schritt wird ein Array mit einem Element für jede Stunde des Tages gebildet (Zeile 3-15). Auf Basis der Werte aus der Vergangenheit wird nun ein Wert für jede Stunde prognostiziert.
Ist die Vorhersage von einem anderen Wert als die Tageszeit abhängig, wie zum Beispiel bei der Sonneneinstrahlung, so wird im Anschluss die vorhandenen Bedingungen (Beispiel: Sonneneinstrahlung) zum jeweiligen historischen Wert gemappt.
Schritt 2: Graphen
let a = [];
for(let i=0;i<msg.payload.gsi.forecast.length;i++) {
let item = {
'x':msg.payload.gsi.forecast[i].timeStamp,
'y':msg.payload.gsi.forecast[i].esolar
}
a.push(item);
}
msg.graph = [{
'series': ['GenerationForecast'],
'data': [a]
}];
return msg;
Der Graphen bildet die Zeitstempel für die kommenden 36 Stunden (=Vorhersagezeitraum) ab. Er wird bereits so aufgebaut, dass er am Ende der Verarbeitung in der InfluxDB gespeichert und mittels der Grafana Dashboards visualisiert werden kann.