Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Probleme beim Auswerten von DP mit Javascript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Probleme beim Auswerten von DP mit Javascript

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Langer last edited by

      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 red

      Erste 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 grey

      Bei 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 red

      Wo liegt der Fehler?
      Kann mir einer helfen?

      Ich hoffe das ich mich verständlich ausgedrückt habe!!

      Danke im voraus

      MfG
      Wastl

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Langer last edited by paul53

        @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);
        };
        
        L 1 Reply Last reply Reply Quote 0
        • L
          Langer @paul53 last edited by

          @paul53

          Vielen Dank für Deine Hilfe!!!!

          MfG
          Wastl

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          920
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          javascript
          2
          3
          113
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo