NEWS
Script den Objektstamm durchsuchen
-
Hallo
ich habe mal versucht, was zu programmieren. Wollte der JS den Objektbaum durch suchen, wenn man ein DP mit einer bestimmten Bezeichnung findet, das dann dieser Wert Addiert wird.
Leider hat es nie geklappt, dran liegt das ? Hier mein Beispiel.
const suchPfad = 'shelly.0.'; const suchEndung = '.Power'; const zielDatenpunkt = '0_userdata.0.Shelly.GesamtPower'; // Ziel-DP erstellen, wenn nicht vorhanden if (!existsObject(zielDatenpunkt)) { createState(zielDatenpunkt, 0, { name: 'Summierter Power-Wert aller Shellys', type: 'number', read: true, write: true }); } // Array für passende IDs let powerIDs = []; // Funktion: Alle State-IDs durchgehen und passende merken function findePowerDatenpunkte() { powerIDs = []; getStates().forEach(id => { if (id.startsWith(suchPfad) && id.endsWith(suchEndung)) { powerIDs.push(id); } }); } // Funktion: Summe berechnen function berechneSumme() { let summe = 0; powerIDs.forEach(id => { const val = parseFloat(getState(id).val) || 0; summe += val; }); setState(zielDatenpunkt, summe); } // Funktion: Listener setzen function setzeListener() { powerIDs.forEach(id => { on({ id: id, change: 'ne' }, berechneSumme); }); } // Hauptablauf findePowerDatenpunkte(); berechneSumme(); setzeListener();
-
@longbow was heißt denn nie geklappt?
-
@holger-will Es wurde keine Werte gefunden... und dann zusammen gerechnet
-
-
@paul53 Danke für den Hinweis, da ich Neuling bin, wie müsste es aussehen?
-
@longbow sagte: wie müsste es aussehen?
const ids = $('shelly.0.*.Power').toArray(); const zielDatenpunkt = '0_userdata.0.Shelly.GesamtPower'; // Funktion: Summe berechnen function berechneSumme() { let summe = 0; ids.forEach((id) => { summe += parseFloat(getState(id).val) || 0; }); setState(zielDatenpunkt, summe, true); } on(ids, berechneSumme); berechneSumme(); // Scriptstart