Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. If-Bedienungen…

    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

    If-Bedienungen…

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

      Hallo Community,

      ich möchte gerne mehrere Schließkontakte auf einer Ebene zusammenfassen um zu prüfen ob die Etage in meinem Haus abgeschlossen sind. Die Variablen habe ich zwar erzeugt, leider setzt der Iobroker sie nicht bei jeder Veränderung des Türzustandes und schon gar nicht so wie ich es will…

      Ich hoffe einer von euch kann mir helfen. Meine Unfähigkeit hat mich diesen Abend schon wahnsinng gemacht 😞

      PS: ich habe die ID meiner geräte etwas unkenntlich gemacht, man weiß ja nie wer mitliest :P.

      on({id: 'hm-rpc.0.OEQ143xxxx.1.STATE' || 'hm-rpc.0.NEQ088xxxx.1.STATE', change: "ne"}, function (obj) {
      
        if ('hm-rpc.0.OEQ143xxxx.1.STATE'== false && 'hm-rpc.0.NEQ088xxxx.1.STATE'== false) {
            setState('g_Verschluss_Keller', false);
        }
        else{
            setState('g_Verschluss_Keller', true);
        }
      }); 
      
      on({id: 'hm-rpc.0.OEQ143xxxy.1.STATE' || 'hm-rpc.0.OEQ143xxxz.1.STATE' ,  change: "any"}, function (obj) {
      
        if ('hm-rpc.0.OEQ143xxxy.1.STATE' == false && 'hm-rpc.0.OEQ143xxxz.1.STATE'== false) {
            setState('g_Verschluss_Dach', false);
        }
        else{
            setState('g_Verschluss_Dach', true);
        }
      })
      
      
      1 Reply Last reply Reply Quote 0
      • Mic
        Mic Developer last edited by

        Kurzer Blick auf Deinen Code: Was auffällt - ich würde immer jede Abfrage in if… separat in Klammern setzen.

        also das hier

        if ('hm-rpc.0.OEQ143xxxx.1.STATE' == false && 'hm-rpc.0.OEQ143xxxx.1.STATE'== false) {
        

        besser so

        if ( ('hm-rpc.0.OEQ143xxxx.1.STATE' === false) && ('hm-rpc.0.OEQ143xxxx.1.STATE'=== false) )
        

        Schafft Klarheit zur Isolation und vermeidet, dass hier Bedingungen falsch verbunden werden… Und gerne 3 "=" nehmen, also "===" statt "==".

        Nun zum Inhalt des Scripts:

        "hm-rpc.0.OEQ143xxxx.1.STATE" über obj.state.val abfragen. Denn sonst vergleichst Du nur den String-Inhalt.

        Also z.B.

           if(obj.state.val === true){
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          @yron25:

          on({id: 'hm-rpc.0.OEQ143xxxx.1.STATE' || 'hm-rpc.0.NEQ088xxxx.1.STATE', `
          Das funktioniert nicht. Mehrere Datenpunkte als Trigger mit Array[id1,id2] oder RegExp. Da aber auch die Zustände verknüpft werden sollen, macht man das besser mit globalen Skriptvariablen und einer Funktion.
          @yron25:

          if ('hm-rpc.0.OEQ143xxxx.1.STATE'== false && 'hm-rpc.0.NEQ088xxxx.1.STATE'== false) { `
          Was soll der Vergleich eines Strings mit false ergeben ? (immer false)

          Vorschlag:

          const id1 = 'hm-rpc.0.OEQ143xxxx.1.STATE';
          const id2 = 'hm-rpc.0.NEQ088xxxx.1.STATE';
          const idAlle = 'g_Verschluss_Keller';
          
          var kontakt1 = getState(id1).val;
          var kontakt2 = getState(id2).val;
          
          function alleKontakte() { 
             if(kontakt1 || kontakt2) setState(idAlle, true, true);
             else setState(idAlle, false, true);
          }
          
          alleKontakte(); // Skriptstart
          
          on(id1, function(dp) {
             kontakt1 = dp.state.val;
             alleKontakte();
          });      
          on(id2, function(dp) {
             kontakt2 = dp.state.val;
             alleKontakte();
          });      
          
          
          1 Reply Last reply Reply Quote 0
          • Y
            yron25 last edited by

            Danke für die schnelle Hilfe, ihr rettet meinen Abend. Ich habe nicht gemerkt, dass 3 Kontakte den selben Namen haben, und ich hätte dazuschreiben können dass es sich um 2 Ebenen handelt. Wurde jetzt geändert.

            @ Paul53:

            Danke für das Skript. So sehen die also Professionell aus, mit den richtigen Konstanten geladen. Richtig gut.

            Nur wegen des Verständnisses:

            • dp ist die Variable die er als true oder false deklariert

            • Mit id1 und id 2 trennst du bei meiner "oder" on-function in 2 auf

            • Was ist in deinem Skript das 2te true bei setState?

            • Wo änderst du im Skript die Variable g_Verschluss_Keller global. Mit idAlle gibst du es es ja nur im Skript zurück oder?

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

              @yron25:

              • dp ist die Variable die er als true oder false deklariert `
                dp ist das Datenpunktobjekt, das ausgelöst(getriggert) hat. dp.state.val ist der Wert des auslösenden Datenpunktes
                @yron25:
              • Mit id1 und id 2 trennst du bei meiner "oder" on-function in 2 auf `
                Durch getrennte Trigger ist klar, welcher Wert mit dp.state.val übergeben wird, so dass die richtige Variable (kontakt1 / kontakt2) diesen Wert erhält.
                @yron25:
              • Was ist in deinem Skript das 2te true bei setState? `
                Das setzt ack = true (bestätigt), da ich davon ausgehe, dass der Wert nicht witer gesendet wird, sondern in ioBroker verwendet wird (VIS).
                @yron25:
              • Wo änderst du im Skript die Variable g_Verschluss_Keller global. Mit idAlle gibst du es es ja nur im Skript zurück oder? `
                Der Wert des Datenpunktes mit der ID "g_Verschluss_Keller" wird in der Funktion alleKontakte() mit setState(idAlle, Wert, ack) gesetzt.

              Die https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md kennst Du ?

              1 Reply Last reply Reply Quote 0
              • Y
                yron25 last edited by

                Hey, danke nein kannte ich nicht.

                Ich muss nochmal nachschauen. Dein Skript funktioniert leider auch nicht, er gibt den bei den Werte Kontakt1, Kontakt2= false den Wert für g_Verschluss_Keller true zurück.

                Danke für die Hilfe, die Tipps haben mich auf jeden Fall weiter gebracht

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

                Support us

                ioBroker
                Community Adapters
                Donate

                581
                Online

                31.8k
                Users

                79.9k
                Topics

                1.3m
                Posts

                3
                6
                1194
                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