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(); -
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?
-
@longbow was heißt denn nie geklappt?
@holger-will Es wurde keine Werte gefunden... und dann zusammen gerechnet
-
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 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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden