Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Frage zu Verknüpfung bei Auslösung eines Scripts

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Frage zu Verknüpfung bei Auslösung eines Scripts

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Ich habe immer neue If nacheinander angelegt. Führt er die alle aus wenn Sie alle zutreffen oder nur bis zum ersten Treffer??. Wenn er alle ausführt die zutreffen, wie kann ich das verhindern, das sobald die erste gegriffen hat, der Rest nicht mehr abgearbeitet wird??
      

      Beispiel 1:

      if (….) {

      ...

      }

      if (....) {

      ...

      }

      Fazit: Es werden alle if ausgeführt.

      Beispiel 2:

      if (....) {

      ...

      } else if (....) {

      ...

      }

      Fazit: Wenn die 1. if erfüllt ist, wird die 2. else if nicht mehr ausgeführt.

      Probier es mal aus, indem du log einfügst und dann schaust was im log ankommt.

      mfg

      Dieter

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

        @Zippolighter:

        Wie ist das in einem Script?? `
        Ein JS-Skript wird auch vom oben nach unten abgearbeitet, wobei bei bestimmten Funktionen (mit einer Callback-Funktion) wie setState(), createState(), sendTo() … nicht gewartet wird, bis sie fertig abgearbeitet sind, sondern diese werden nur "angeschubst" und es geht im Skript weiter.

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

          Das Problem ist dann natürlich wie im Bild wenn ich dann auf einmal nicht nur auf Änderung in SV Astro prüfe, sondern auf eine ganz anderen SV bei Änderung prüfe. Ich habe keine Idee wie ich das in einem Script mache.
          

          Das hab ich nicht verstanden.

          Du hasst doch in deinem Beispiel 2 SV die du überprüfst. Soll das nun nicht so sein ?

          Wenn du in einem Script 2 SV bei Änderung prüfen willst, dann nimmst du einfach 2x On(…).

          Wie in unserem anderen Beispiel:

          ! ````
          on({id: "hm-rpc.0.LEQ0029078.1.PRESS_SHORT", val: true, ack: true}, function() { // Klingel HM Taster
          log("Auslöser Klingel-PS");
          weiter ();
          });
          ! on({id: "hm-rpc.0.LEQ0029078.1.PRESS_LONG", val: true, ack: true}, function() { // Klingel HM Taster
          log("Auslöser Klingel-PL");
          weiter ();
          });

          
          Da werden ja auch 2 x on genommen und auf Veränderungen der Variablen geprüft.
          
          mfg
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Zippolighter:

            wenn ich dann auf einmal nicht nur auf Änderung in SV Astro prüfe, sondern auf eine ganz anderen SV bei Änderung prüfe. Ich habe keine Idee wie ich das in einem Script mache. `

            var idSV1 = '...';
            var idSV2 = '...';
            ...
            
            var sv1 = getState(idSV1).val;  // Initialisierung bei Script start
            var sv2 = getState(idSV2).val;  // Initialisierung bei Script start
            ...
            
            function auswertung() {
               // hier werden alle sv1..svN ausgewertet
            }
            
            // auswertung();  // nur, wenn bei Script start gewünscht
            
            on(idSV1, function(dp) {
               sv1 = dp.state.val;
               auswertung();
            });
            on(idSV2, function(dp) {
               sv2 = dp.state.val;
               auswertung();
            });
            ...
            
            
            1 Reply Last reply Reply Quote 0
            • Z
              Zippolighter last edited by

              Erstmal danke an alle. Mich verwirrt das ganze ja auch selbst. Lach. Sind alte funktionierende Programme aus der CCU2 die ich versuche erstmal 1:1 als Script abzubilden, bevor ich die dann hoffentlich irgendwann alle löschen kann.

              Es ist in dem CCU2 Programm ja so, das von oben nach unten immer "Änderung Astro" der Trigger ist, es wird dann überprüft ob etliche andere Werte da sind und dann was ausgeführt oder zur nächsten "Sonst wenn" Anweisung gesprungen.

              Nur zum Schluss wie auf dem Bild wird auf Änderung Astro (wie schon die ganze Zeit) oder auf Astro_Offset_Wert 0 geprüft. Dies soll aber nur stattfinden wenn alles andere nicht getroffen hat (so eine Art Rettungsanker). Das Problem ist jetzt für mich das zusätzliche prüfen auf <u>oder</u> wenn alles andere nicht funktioniert hat.

              Wenn ich das richtig verstehe sind ja zwei "on" Funktionen mit abgeschlossenen Semikolon, zwei eigene Funktionen. So kann ich das nicht als letzte Aktion wenn alles andere nicht funktioniert verwenden.

              Habe mal im Script versucht, Funktion in Funktion zu packen. Keine Ahnung ob das geht. Kann wegen WAF momentan nicht testen.

              Hier das Script. Mache dann nochmal Screenshots vom CCU2 Programm

              ! ````
              /* (Gruppe) Deko Licht Aus (Astro Aus Verzögert Offset)
              ! */
              ! var idAstro = "hm-rega.0.7961"; //Astro
              ! on({
              id: idAstro,
              change: "ne"
              }, function (obj1) {
              var gidAnwesenheit = getState('hm-rega.0.950').val;
              var gidAbwesendKurz = getState('hm-rega.0.2330').val;
              var gidAbwesendLang = getState('hm-rega.0.65253').val;
              var gidAbwesendFeiern = getState('hm-rega.0.4797').val;
              var gidRedBullLicht = getState('hm-rpc.0.KEQ0025668.1.STATE').val;
              var gidAstroOffsetWert = getState('hm-rega.0.13987').val;
              var gidAstroAuto = getState('hm-rega.0.14811').val;
              var gidLichthelligkeit = getState('hm-rega.0.19606').val;
              var gidAbwesend_ioBroker = getState("javascript.0.Manuell.Systemvariable.Allgemein.Abwesenheit_ioBroker").val; //Abwesenheit_ioBroker

                  if ((obj1.state.val === true) && (gidAstroOffsetWert > 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)){
                      setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG
                      setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus
                      setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                      setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                      setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                      setState("hm-rega.0.12875", false); //Cameras Rolieren
              
                      setStateDelayed("hm-rega.0.56542", true, 2000); //Lichthelligkeit Anzeige Aus Trigger
                  }
                  else if ((obj1.state.val === true) && (gidAstroOffsetWert = 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)){
                      setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG
                      setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus
                      setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                      setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                      setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                      setState("hm-rega.0.12875", false); //Cameras Rolieren
                  }
                  else if (obj1.state.val === true){
                      setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                      setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                      setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                      setState("hm-rega.0.12875", false); //Cameras Rolieren
                  }
                  else if (on({id: 'hm-rega.0.13987', change: 'ne'}, function() {
                      setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                      setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                      setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                      setState("hm-rega.0.12875", false); //Cameras Rolieren
                      })){
                  }
              

              });

              ! ````

              CCU2 Programm:
              1304_screenshot_162.jpg
              1304_screenshot_163.jpg
              1304_screenshot_164.jpg

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

                Vielleicht machst Du ein Beispiel, was genau machen möchtest.

                1 Reply Last reply Reply Quote 0
                • Z
                  Zippolighter last edited by

                  @ykuendig:

                  Vielleicht machst Du ein Beispiel, was genau machen möchtest. `
                  Ziel ist es das abgebildete CCU2 Programm als Script abzubilden.

                  Denke habe es auch soweit hinbekommen, bis auf die letzte "Sonst wenn". Hier habe ich keine Ahnung ob das funktioniert und ein Abbild des CCU2 Programms an der Stelle ist.

                  Danke

                  Gruß Zippolighter

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

                    Das hat sich überschnitten. Das Beispiel ist ja nun da 🙂

                    Aber das mit der letzten eingeschachtelten on-subscription wird kaum funktionieren.

                    Hab Dein Script mal zerpflückt und neu zusammengebaut.

                    Die Idee war, die on-subscriptions von den Funktionen zu trennen; So haben wir Anfänger mehr Übersicht.

                    Das Script regisitriert mit den 0n einen Trigger, welcher die gewünschte Funktion zur Zeit auslöst.

                    /* (Gruppe) Deko Licht Aus (Astro Aus Verzögert Offset)
                    
                     */
                    
                    var idAstro = "hm-rega.0.7961"; //Astro
                    var irgendwas = "hm-rega.0.13987"
                    
                    on({id: idAstro,change: "ne"}, AstroDingens(obj1));
                    on({id: irgendwas, change: "ne"}, AstroSowieso())
                    
                    function AstroDingens(obj1) {
                    	var gidAnwesenheit = getState('hm-rega.0.950').val;
                    	var gidAbwesendKurz = getState('hm-rega.0.2330').val;
                    	var gidAbwesendLang = getState('hm-rega.0.65253').val;
                    	var gidAbwesendFeiern = getState('hm-rega.0.4797').val;
                    	var gidRedBullLicht = getState('hm-rpc.0.KEQ0025668.1.STATE').val;
                    	var gidAstroOffsetWert = getState('hm-rega.0.13987').val;
                    	var gidAstroAuto = getState('hm-rega.0.14811').val;
                    	var gidLichthelligkeit = getState('hm-rega.0.19606').val;
                    	var gidAbwesend_ioBroker = getState("javascript.0.Manuell.Systemvariable.Allgemein.Abwesenheit_ioBroker").val; //Abwesenheit_ioBroker
                    
                    	if (obj1.state.val === true) { // Wird immer ausführt sobald 'state.val' TRUE ist
                    		setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                    		setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                    		setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                    		setState("hm-rega.0.12875", false); //Cameras Rolieren	
                    	}	// Theoretisch könntest Du auch hier statt dem if Block direkt die Funktion AstroSowieso() aufrufen
                    
                    	if ((obj1.state.val === true) && (gidAstroOffsetWert > 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)) {
                    		setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG
                    		setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus
                    		setStateDelayed("hm-rega.0.56542", true, 2000); //Lichthelligkeit Anzeige Aus Trigger
                    
                    	} else if ((obj1.state.val === true) && (gidAstroOffsetWert = 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)) {
                    		setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG
                    		setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus
                    
                    	} else {
                    	// Sonst, wenn sonst nichts zutrifft
                    	}
                    }
                    
                    function AstroSowieso() {
                    			setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE
                    			setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE
                    			setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE
                    			setState("hm-rega.0.12875", false); //Cameras Rolieren
                    
                    1 Reply Last reply Reply Quote 0
                    • Z
                      Zippolighter last edited by

                      Danke, das muss ich mir jetzt mal in Ruhe anschauen und dann sobald es geht testen.

                      Perfekt. Daumen hoch

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

                        Hab auch nur im Editor etwas dran rumkopiert. Das kann immer noch viele Fehler haben. Also lass den Daumen mal auf Halbmast! Aber danke für die Blumen :lol:

                        1 Reply Last reply Reply Quote 0
                        • Z
                          Zippolighter last edited by

                          Brauche doch nochmal Hilfe. Kriege immer nen Referenz Error

                          > javascript.0 script.js.Allgemein.(Gruppe)_Deko_Licht_Aus_(Astro_Aus_Verzögert_Offset: TypeError: Cannot read property 'state' of undefined at AstroDingens (script.js.Allgemein.(Gruppe)_Deko_Licht_Aus_(Astro_Aus_Verzögert_Offset:28:12) at script.js.Allgemein.(Gruppe)_Deko_Licht_Aus_(Astro_Aus_Verzögert_Offset:13:33

                          Zeile 13 ist

                          on({id: idAstro, change: "ne"}, AstroDingens(obj1));
                          

                          ! ` > /* (Gruppe) Deko Licht Aus (Astro Aus Verzögert Offset)

                          */

                          /* (Gruppe) Deko Licht Aus (Astro Aus Verzögert Offset)

                          */

                          var idAstro = "hm-rega.0.7961"; //Astro

                          var irgendwas = "hm-rega.0.13987";

                          on({id: idAstro, change: "ne"}, AstroDingens(obj1));

                          on({id: irgendwas, change: "ne"}, AstroSowieso());

                          function AstroDingens(obj1) {

                          var gidAnwesenheit = getState('hm-rega.0.950').val;

                          var gidAbwesendKurz = getState('hm-rega.0.2330').val;

                          var gidAbwesendLang = getState('hm-rega.0.65253').val;

                          var gidAbwesendFeiern = getState('hm-rega.0.4797').val;

                          var gidRedBullLicht = getState('hm-rpc.0.KEQ0025668.1.STATE').val;

                          var gidAstroOffsetWert = getState('hm-rega.0.13987').val;

                          var gidAstroAuto = getState('hm-rega.0.14811').val;

                          var gidLichthelligkeit = getState('hm-rega.0.19606').val;

                          var gidAbwesend_ioBroker = getState("javascript.0.Manuell.Systemvariable.Allgemein.Abwesenheit_ioBroker").val; //Abwesenheit_ioBroker

                          if (obj1.state.val === true) { // Wird immer ausführt sobald 'state.val' TRUE ist

                          setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE

                          setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE

                          setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE

                          setState("hm-rega.0.12875", false); //Cameras Rolieren

                          } // Theoretisch könntest Du auch hier statt dem if Block direkt die Funktion AstroSowieso() aufrufen

                          if ((obj1.state.val === true) && (gidAstroOffsetWert > 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)) {

                          setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG

                          setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus

                          setStateDelayed("hm-rega.0.56542", true, 2000); //Lichthelligkeit Anzeige Aus Trigger

                          } else if ((obj1.state.val === true) && (gidAstroOffsetWert = 0) && (gidAbwesend_ioBroker === false) && (gidRedBullLicht === true) && (gidAstroAuto === true) && (gidLichthelligkeit === true)) {

                          setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); //(Gruppe) Deko Licht An/Aus.PRESS_LONG

                          setState("javascript.0.Manuell.Systemvariable.Allgemein.(Gruppe)_Deko_Licht_An/Aus", false); //(Gruppe) Deko Licht An/Aus

                          } else {

                          // Sonst, wenn sonst nichts zutrifft

                          }

                          }

                          function AstroSowieso() {

                          setState("hm-rpc.0.KEQ0926589.2.STATE", false); //Teichlicht.STATE

                          setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe).STATE

                          setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE

                          setState("hm-rega.0.12875", false); //Cameras Rolieren

                          } `

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

                            Ev. brauchts AstroDingens und (obj) ein Leerzeichen

                            Dann würde ich die id überprüfen.

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

                              @Zippolighter:

                              on({id: idAstro, change: "ne"}, AstroDingens(obj1));
                              on({id: irgendwas, change: "ne"}, AstroSowieso());
                              
                              ```` `  
                              

                              –->

                              on({id: idAstro, change: "ne"}, AstroDingens);
                              on({id: irgendwas, change: "ne"}, AstroSowieso);
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              494
                              Online

                              31.7k
                              Users

                              79.8k
                              Topics

                              1.3m
                              Posts

                              4
                              16
                              1262
                              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