Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Probleme beim Auswerten von DP mit Javascript

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    280

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Probleme beim Auswerten von DP mit Javascript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
3 Beiträge 2 Kommentatoren 122 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    Langer
    schrieb am zuletzt editiert von
    #1

    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

    paul53P 1 Antwort Letzte Antwort
    0
    • L Langer

      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

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

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

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      L 1 Antwort Letzte Antwort
      0
      • paul53P 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 Offline
        L Offline
        Langer
        schrieb am zuletzt editiert von
        #3

        @paul53

        Vielen Dank für Deine Hilfe!!!!

        MfG
        Wastl

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        523

        Online

        32.7k

        Benutzer

        82.5k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe