NEWS
Probleme beim Auswerten von DP mit Javascript
-
Hallo zusammen,
habe Probleme beim Auswerten von DP.//Ändert sich der Zustand eines Fensters wird in einem DP der Aktuelle Zustand festgehalten. //Anschließend wird die Funktion "farbe_Rand" aufgerufen. on({id: 'bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value'}, function () { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Haustuere', getState('bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value').val, true); farbe_Rand("Buero", `[id=0_userdata.0.vis.Zuhause.Fenster.Buero.*]`); }); on({id: 'bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value'}, function () { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Strasse', getState('bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value').val, true); farbe_Rand("Buero", `[id=0_userdata.0.vis.Zuhause.Fenster.Buero.*]`); }); //Parameter: //raum der Raum in dem das Fenster sich befindet //zuHauseSelector die Struktur des zu durchlaufenden DP function farbe_Rand(raum, zuHauseSelector) { // Alle DP let FensterList = $(zuHauseSelector); //der DP mit der Randfarbe wird mit "grey" vorbelegt = alle Fenster im Raum sind geschlossen setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, 'grey', true); //Das Array mit den DP wird durchlaufen for (var i = 0; i <= FensterList.length - 1; i++) { //Der Name des DP wird gelesen let nameArray = FensterList[i].split(":"); let name = nameArray[0]; //Sollte der Wert eines DP "OPEN" sein wird die Farbe auf "red" gesetzt //ansonsten bleibt sie "grey" if (getState(name).val === 'OPEN') { setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, 'red', true); }; }; };Ablauf:
Habe ich einen Raum mit 2 Fenstern:
Erste Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand bleibt grey wird nicht red
Zweite Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand wird redErste Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_Rand bleibt red
Zweite Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_RAnd bleibt red geht nicht auf greyBei einem Fenster
Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand bleibt grey wird nicht red
Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_Rand wird redWo liegt der Fehler?
Kann mir einer helfen?Ich hoffe das ich mich verständlich ausgedrückt habe!!
Danke im voraus
MfG
Wastl -
Hallo zusammen,
habe Probleme beim Auswerten von DP.//Ändert sich der Zustand eines Fensters wird in einem DP der Aktuelle Zustand festgehalten. //Anschließend wird die Funktion "farbe_Rand" aufgerufen. on({id: 'bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value'}, function () { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Haustuere', getState('bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value').val, true); farbe_Rand("Buero", `[id=0_userdata.0.vis.Zuhause.Fenster.Buero.*]`); }); on({id: 'bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value'}, function () { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Strasse', getState('bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value').val, true); farbe_Rand("Buero", `[id=0_userdata.0.vis.Zuhause.Fenster.Buero.*]`); }); //Parameter: //raum der Raum in dem das Fenster sich befindet //zuHauseSelector die Struktur des zu durchlaufenden DP function farbe_Rand(raum, zuHauseSelector) { // Alle DP let FensterList = $(zuHauseSelector); //der DP mit der Randfarbe wird mit "grey" vorbelegt = alle Fenster im Raum sind geschlossen setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, 'grey', true); //Das Array mit den DP wird durchlaufen for (var i = 0; i <= FensterList.length - 1; i++) { //Der Name des DP wird gelesen let nameArray = FensterList[i].split(":"); let name = nameArray[0]; //Sollte der Wert eines DP "OPEN" sein wird die Farbe auf "red" gesetzt //ansonsten bleibt sie "grey" if (getState(name).val === 'OPEN') { setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, 'red', true); }; }; };Ablauf:
Habe ich einen Raum mit 2 Fenstern:
Erste Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand bleibt grey wird nicht red
Zweite Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand wird redErste Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_Rand bleibt red
Zweite Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_RAnd bleibt red geht nicht auf greyBei einem Fenster
Fenster wird geöffnet DP wird auf OPEN gesetzt Farbe_Rand bleibt grey wird nicht red
Fenster wird geschlossen DP wird auf CLOSED gesetzt Farbe_Rand wird redWo liegt der Fehler?
Kann mir einer helfen?Ich hoffe das ich mich verständlich ausgedrückt habe!!
Danke im voraus
MfG
Wastl@langer sagte: Kann mir einer helfen?
Du wendest den $Selector falsch an. Das ist kein Array. Für eine Schleife gibt es
$(selector).each(function(id, i) {});Außerdem kann der Wert eines Datenpunktes nicht unmittelbar nach dem Schreiben eingelesen werden, da
setState(id, val, true) asynchron arbeitet, d.h. zum Zeitpunkt des Einlesens noch nicht fertig ist. Der Aufruf der Auswerte-Funktion kann im Callback von setState() erfolgen://Ändert sich der Zustand eines Fensters wird in einem DP der Aktuelle Zustand festgehalten. //Anschließend wird die Funktion "farbe_Rand" aufgerufen. on('bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value', function (dp) { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Haustuere', dp.state.val, true, function() { farbe_Rand('Buero', $('0_userdata.0.vis.Zuhause.Fenster.Buero.*')); }); }); on('bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value', function (dp) { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Strasse', dp.state.val, true, function() { farbe_Rand('Buero', $('0_userdata.0.vis.Zuhause.Fenster.Buero.*')); }); }); //Parameter: //raum der Raum in dem das Fenster sich befindet //zuHauseSelector die Struktur des zu durchlaufenden DP function farbe_Rand(raum, zuHauseSelector) { //der DP mit der Randfarbe wird mit "grey" vorbelegt = alle Fenster im Raum sind geschlossen let farbe = 'grey'; zuHauseSelector.each(function(id, i) { //Sollte der Wert eines DP "OPEN" sein wird die Farbe auf "red" gesetzt //ansonsten bleibt sie "grey" if (getState(id).val === 'OPEN') farbe = 'red'; }); setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, farbe, true); }; -
@langer sagte: Kann mir einer helfen?
Du wendest den $Selector falsch an. Das ist kein Array. Für eine Schleife gibt es
$(selector).each(function(id, i) {});Außerdem kann der Wert eines Datenpunktes nicht unmittelbar nach dem Schreiben eingelesen werden, da
setState(id, val, true) asynchron arbeitet, d.h. zum Zeitpunkt des Einlesens noch nicht fertig ist. Der Aufruf der Auswerte-Funktion kann im Callback von setState() erfolgen://Ändert sich der Zustand eines Fensters wird in einem DP der Aktuelle Zustand festgehalten. //Anschließend wird die Funktion "farbe_Rand" aufgerufen. on('bshb.0.hdm:HomeMaticIP:3014F711A000009A185904C8.ShutterContact.value', function (dp) { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Haustuere', dp.state.val, true, function() { farbe_Rand('Buero', $('0_userdata.0.vis.Zuhause.Fenster.Buero.*')); }); }); on('bshb.0.hdm:HomeMaticIP:3014F711A000009A1859254A.ShutterContact.value', function (dp) { setState('0_userdata.0.vis.Zuhause.Fenster.Buero.Strasse', dp.state.val, true, function() { farbe_Rand('Buero', $('0_userdata.0.vis.Zuhause.Fenster.Buero.*')); }); }); //Parameter: //raum der Raum in dem das Fenster sich befindet //zuHauseSelector die Struktur des zu durchlaufenden DP function farbe_Rand(raum, zuHauseSelector) { //der DP mit der Randfarbe wird mit "grey" vorbelegt = alle Fenster im Raum sind geschlossen let farbe = 'grey'; zuHauseSelector.each(function(id, i) { //Sollte der Wert eines DP "OPEN" sein wird die Farbe auf "red" gesetzt //ansonsten bleibt sie "grey" if (getState(id).val === 'OPEN') farbe = 'red'; }); setState('0_userdata.0.vis.Zuhause.Farbe_Rand.' + raum, farbe, true); };
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