Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. BestPractis für "doppeltes on"?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    BestPractis für "doppeltes on"?

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

      Hi zusammen,

      wie kan ich es am besten Lösen, dass ich wenn ein Schlüssel "Alarm Aus" gesendet hat und dann die Tür (mit Sensor) aufgeht, ich meine Sprachansage starte?

      Im Prinzip benötige ich ein doppeltes on(…).

      Aber das geht ja nicht in Abhängigkeit. Meistens habe ich ein on(..) und dann ein if (...). Hier reicht mir das aber nicht. Hoffe das man mich versteht!

      Danke für einen Tipp.

      So long,

      Fiti

      1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active last edited by

        ehrlich gesagt:

        ich habs nicht verstanden.

        Wenn du 2 x on brauchst, dann schreib 2 x on.

        Wenn du 1 x on brauchst, aber verschiedene Bedingungen dann schreib mehrere if.

        Was brauchst du genau ?

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

          @Fitti:

          Im Prinzip benötige ich ein doppeltes on(…).

          Aber das geht ja nicht in Abhängigkeit. Meistens habe ich ein on(..) und dann ein if (...). `
          Ich hoffe, dass ich es richtig interpretiere ?

          var v1 = getState(id1).val;
          var v2 = getState(id2).val;
          
          function auswertung() {
             if(v1 und v2 auswerten) {
                mache was
             }   
          }
          
          // Script start
          auswertung();
          
          on(id1, function(dp) {
             v1 = dp.state.val;
             auswertung();
          });
          
          on(id2, function(dp) {
             v2 = dp.state.val;
             auswertung();
          });
          
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Fitti:

            wenn ein Schlüssel "Alarm Aus" gesendet hat und dann die Tür (mit Sensor) aufgeht, ich meine Sprachansage starte? `
            Wenn die Reihenfolge entscheidend ist (erst "Alarm aus", dann Tür Auf):

            var v1 = getState(id1).val;  // Schlüssel
            
            on(id1, function(dp) {  // Schlüssel
               v1 = dp.state.val;
            });
            
            on({id: id2, val: true}, function() {  // Tür Auf
               if(v1) {
                  mache was
                  v2 = false;
               }   
            });
            

            Wenn die Ansage nur beim ersten Türöffnen nach "Alarm aus" erfolgen soll:

            var v1 = getState(id1).val;  // Schlüssel
            var v2 = false;  //  Ansagefreigabe
            
            on(id1, function(dp) {  // Schlüssel
               v1 = dp.state.val;
               if(v1) v2 = true;
            });
            
            on({id: id2, val: true}, function() {  // Tür Auf
               if(v1 && v2) {
                  mache was
                  v2 = false;
               }   
            });
            
            1 Reply Last reply Reply Quote 0
            • F
              Fitti last edited by

              @paul53:

              Wenn die Ansage nur beim ersten Türöffnen nach "Alarm aus" erfolgen soll: ` Treffer. Genau so.
              @paul53:

              var v1 = getState(id1).val;  // Schlüssel
              var v2 = false;  //  Ansagefreigabe
              
              on(id1, function(dp) {  // Schlüssel
                 v1 = dp.state.val;
                 if(v1) v2 = true;
              });
              
              ```` `  
              

              Den Teil verstehe ich noch nicht. Ich rede von dem HM 4 Tasten Schlüssel für Alarmanlage o. ä.

              Du holst DIr erst einmal in v1 den aktuellen Wert des Schlüssels - aber nur beim Skriptstart… hmmm, wozu?

              v1 = dp.state.val... was macht "state"?

              Na ich spiele etwas rum und teste mal.- Die Idee der Ansagefreigabe ist sehr gut. Hatte mich zu sehr in den Ablauf

              on (event1 && event2 ) verrant.

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

                @Fitti:

                Du holst DIr erst einmal in v1 den aktuellen Wert des Schlüssels - aber nur beim Skriptstart… hmmm, wozu? `
                Das ist in diesem Fall nicht erforderlich. Allerdings muss die Variable v1 im Skript global deklariert werden, da sie in einer Funktion verändert und in einer anderen Funktion ausgewertet wird.
                @Fitti:

                v1 = dp.state.val… was macht "state"? `
                dp.state.val entspricht getState(id).val; bei on(id, function(dp) {…}) wird das Datenpunktobjekt dp inkl. state (=newState) und oldState an die Callback-Funktion übergeben.

                Das Skript lässt sich verkürzen:

                var v1 = false;  //  Ansagefreigabe
                
                on({id: id1, val: true}, function() {  // Schlüssel
                   v1 = true;
                });
                
                on({id: id2, val: true}, function() {  // Tür Auf
                   if(v1) {
                      mache was
                      v1 = false;
                   }   
                });
                
                
                1 Reply Last reply Reply Quote 0
                • F
                  Fitti last edited by

                  Danke! Schon deutlich klarer.

                  Beim Testen, ob ein Wert wahr ist:

                  on({id: id1, val: true},
                  

                  schreibt man val und true jeweils OHNE ' (einfaches Anführungszeichen) , richtig?

                  Verwirrt mich immer, da in der OnlineDoku es anders steht. Bei einem

                  change: 'lt'
                  ````wäre es so richtig, stimmts?
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    @Fitti:

                    schreibt man val und true jeweils OHNE ' (einfaches Anführungszeichen) , richtig? `
                    Ja, die Bezeichner (z.B. val) werden ohne Anführungszeichen geschrieben (vielleicht funktioniert es auch mit ' ?). true ist ein boolscher Wert, kein String.

                    change: 'lt'
                    

                    'lt' ist ein String; es kann keine boolscher Wert (boolean) und keine Zahl (number) sein.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    526
                    Online

                    31.7k
                    Users

                    79.6k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    902
                    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