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 -
@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); };
-