Hallo Rolf,
... Womit arbeitest Du?
Eigentlich nutze ich ersteres mit Verweis auf Github. Dort scheint mir alles mehr oder weniger akurat zu sein.
Anyroad - mein Beispiel 2, wo das Objekt Stück für Stück zusammengesetzt wird, ist in dem Fall interessant, wenn Du die Information von verschiedenen Stellen zusammensuchen musst und dafür eventuell auch Funktionen aufrufst. In dem Fall kannst Du nicht ein einzelnes Objektliteral verwenden (oder müsstest die Daten erstmal in Variablen sammeln und die dann im Objektliteral benutzen, was Blödsinn wäre).
Für meinen Fall (denke ich zumindest) sollte sich das Objekt alle seine Daten einfach nur aus dem Adapter holen. Der Adapter liefert alle nur erdenklichen Datenpunkte, sodass ich diese nicht weiter zusammensuchen muss. Somit würde ich also mein Objekt aus nur einem Objektliteral zusammenbauen, sozusagen aus einem Guss geschmiedet. Die Idee zu folgendem Beispiel stammt netterweise von Felix Riesterer (ich hoffe, ich hab seine Erläuterungen richtig interpretiert). Als erstes konstruiere ich mir mein PVA-Objekt das wiederum mit anderen Objekten ausgestattet wird. Diese erhalten dann Eigenschaftswerte, die erst einmal leere Werte enthalten. Das PVA-Objekt bekommt nun noch eine Methode, mit der es möglich wird, die Eigenschaftswerte mit realen Daten aus dem Adapter zu füllen.
const MeinPVAObjekt = {
// die Batterie als Objekt mit seinen Eigenschaften
Batterie: {
Status: null,
LadungEntladung: null
},
// die Solarpanels als Objekt mit seinen Eigenschaften
Panels: {
AktuelleLeistung: null
},
// der Wechselrichter als Objekt mit seinen Eigenschaften
Wechselrichter: {
NetzBezugEinspeisung: null
},
Haus: {
Verbrauch: null
},
// Methode, um die Daten in das Objekt zu laden
DatenEinlesen: function() {
this.Batterie.Status = getState('sun2000.0.collected.SOC').val;
this.Batterie.LadungEntladung = getState('sun2000.0.collected.chargeDischargePower').val;
this.Panels.AktuelleLeistung = getState('sun2000.0.collected.inputPower').val;
this.Wechselrichter.NetzBezugEinspeisung = getState('sun2000.0.meter.activePower').val;
this.Haus.Verbrauch = getState('sun2000.0.collected.houseConsumption').val;
}
};
Das allerdings sollte so gebaut sein, dass ich dann in meinem eigentlichen JavaScript (wo ich dann meine Steuerung programmiere) eine Variable instanzieren und damit dann arbeiten kann.
Wie das aber geht, entzieht sich wieder einmal vollkommen meinen Kenntnissen 😟
Eventuell so ungefähr?
const PVA = MeinPVAObjekt;
PVA.DatenEinlesen();
console.log("Batterie-Status: " + PVA.Batterie.Status);
console.log("Batterie Ladung/Entladung: " + PVA.Batterie.LadungEntladung);
console.log("Aktueller Solar-Ertrag: " + PVA.Panels.AktuelleLeistung);
console.log("Netz Bezug/Einspeisung: " + PVA.Wechselrichter.NetzBezugEinspeisung);
console.log("Hausverbrauch: " + PVA.Haus.Verbrauch);
Möglicherweise habe ich mich mit diesem Beispiel nicht verständlich genug ausgedrückt, falls ja, bitte einfach nachfragen.
Vielen Dank schon mal im Voraus für die konstruktive Hilfeleistung.
LG Roli