Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. IF Schleife vorzeitig abbrechen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    IF Schleife vorzeitig abbrechen

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

      Hallo *,

      ich versuche eine if Schleife vorzeitig abzubrechen (ist in einer Szene hinterlegt). Mein Skript sieht derzeit folgendermaßen aus:

      ` > on({id: "ping.0.Broker.192_168_0_2" ,change:'any'}, function (obj) {

      current_state = getState("ping.0.Broker.192_168_0_2").val;

      if (current_state === false)

      var wol = require('wake_on_lan');

      var HTPC = "MEINEMAC";

      wol.wake(HTPC);

      log("WOL für HTPC ausgefuehrt", "info");

      return false;

      }); `

      Leider funktioniert es mit dem "return false" nicht. Ich habe es ebenfalls mit einem "break;" funktioniert allerdings erkennt der IOBroker das nicht an "unexpected break".

      Hat einer von euch eine Idee wie ich die Schleife unterbrechen kann?

      1 Reply Last reply Reply Quote 0
      • arteck
        arteck Developer Most Active last edited by

        öhm….

        ich kenne ca. 15 Sprachen die ich mal hier und da Programmiert habe aber

        WAS IST EINE IF SCHLEIFE :shock: :shock: :? :?

        wenn du dein "if" meinst dann ist das eine Bedienung

        mach das wenn was anderes zutrifft

        was möchtest du erreichen ..fragen wir mal so ???

        1 Reply Last reply Reply Quote 0
        • S
          samsungfreak last edited by

          @arteck:

          öhm….

          ich kenne ca. 15 Sprachen die ich mal hier und da Programmiert habe aber

          WAS IST EINE IF SCHLEIFE :shock: :shock: :? :?

          wenn du dein "if" meinst dann ist das eine Bedienung

          mach das wenn was anderes zutrifft

          was möchtest du erreichen ..fragen wir mal so ??? `

          Ah mist das war mein altes Skript!

          Hier jetzt mein aktuelles!

          ` > on({id: "ping.0.Broker.192_168_0_2" ,change:'any'}, function (obj) {

          current_state = getState("ping.0.Broker.192_168_0_2").val;

          if (current_state === false)

          var wol = require('wake_on_lan');

          var HTPC = "MEINEMAC";

          wol.wake(HTPC);

          log("WOL für HTPC ausgefuehrt", "info");

          }

          else

          {

          return false;

          }

          }); `

          Allerdings gibt es hier noch einen Fehler:

          expected `)`and saw else missing semicolon
          

          Den Fehler kann ich nicht nachvollziehen.

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

            Für mich sieht das so aus, als ob du etwas ausführen möchtest, wenn der Wert false ist.

            Warum dann nicht einfach so :

            on({id: "ping.0.Broker.192_168_0_2" , val: false}, function () {
            	var wol = require('wake_on_lan');
            	var HTPC = "MEINEMAC";
            	wol.wake(HTPC);
            	log("WOL für HTPC ausgefuehrt", "info");
            });
            
            

            mfg

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

              require() sollte nur einmal bei Skriptstart ausgeführt werden, nicht innerhalb einer Funktion.

              var wol = require('wake_on_lan');
              
              on({id: "ping.0.Broker.192_168_0_2", val: false}, function() {
                 var HTPC = "MEINEMAC";
                 wol.wake(HTPC);
                 log("WOL für HTPC ausgefuehrt", "info");
              });
              
              1 Reply Last reply Reply Quote 0
              • S
                samsungfreak last edited by

                @arteck:

                öhm….

                ich kenne ca. 15 Sprachen die ich mal hier und da Programmiert habe aber

                WAS IST EINE IF SCHLEIFE :shock: :shock: :? :?

                wenn du dein "if" meinst dann ist das eine Bedienung

                mach das wenn was anderes zutrifft

                was möchtest du erreichen ..fragen wir mal so ??? `

                Skripten ist leider nicht meins aber du hast recht. IF Schleife ist/war falsche sorry.

                Ich möchte erreichen, dass ich meinen PC an bzw. ausschalten kann mit einer Szene. Das funktioniert auch, nur wurde mir das Log immer vollgeschrieben weil die Befehl (WOL oder Shutdown) endlos ausgeführt wurde. Das ganze habe ich bisher im folgenden Thread erarbeitet mit hilfreichen Usern. (http://forum.iobroker.net/viewtopic.php?f=21&t=7295).

                Durch eure Vorschläge die "if" Bedingung wegzulassen funktioniert dies nun zu 98%. Allerdings werden die Skripte (WOL oder Shutdown) jetzt so lange ausgeführt bis sich der Werte vom HTPC Ping Status auf "true" bzw. "false" ändert.

                Es ist also nur eine Kleinigkeit:) Kann ich im Skript einen Befehl hinterlegen, dass er nachdem einmaligen ausführen ein weiteres Durchlaufen vom Skript abbricht? Mit "return false;" hat es leider nicht geklappt.

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

                  @samsungfreak:

                  Kann ich im Skript einen Befehl hinterlegen, dass er nachdem einmaligen ausführen ein weiteres Durchlaufen vom Skript abbricht? `
                  Mit change: 'ne' wird es nur einmal (bei Wechsel von true auf false) ausgeführt.

                  var wol = require('wake_on_lan');
                  
                  on({id: "ping.0.Broker.192_168_0_2", change: 'ne', val: false}, function() {
                     var HTPC = "MEINEMAC";
                     wol.wake(HTPC);
                     log("WOL für HTPC ausgefuehrt", "info");
                  });
                  
                  1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active last edited by

                    oder so:

                    var wol = require('wake_on_lan');
                    on({id: "ping.0.Broker.192_168_0_2", change: 'ne'}, function(obj) {
                    	if (obj.state.val === true) {
                    		.....  // Befehle wenn true
                    	} else if (obj.state.val === false) {
                    		.....  // Befehle wenn false	
                    	}
                    });
                    
                    

                    So wird bei Änderung der ping ausgeführt.

                    Also wenn true auf false geht; und umgekehrt.

                    Und dann wird geprüft welcher Zustand es ist, und dann entsprechend ausgeführt.

                    mfg

                    1 Reply Last reply Reply Quote 0
                    • S
                      samsungfreak last edited by

                      @bahnuhr:

                      oder so:

                      var wol = require('wake_on_lan');
                      on({id: "ping.0.Broker.192_168_0_2", change: 'ne'}, function(obj) {
                      	if (obj.state.val === true) {
                      		.....  // Befehle wenn true
                      	} else if (obj.state.val === false) {
                      		.....  // Befehle wenn false	
                      	}
                      });
                      
                      

                      So wird bei Änderung der ping ausgeführt.

                      Also wenn true auf false geht; und umgekehrt.

                      Und dann wird geprüft welcher Zustand es ist, und dann entsprechend ausgeführt.

                      mfg `

                      Das Skript gefällt mir ganz gut da ich nur eins benötige für eine Szene und nicht zwei. Allerdings führt er bei mir nur den Befehl bei "true" aus aber nicht den WOL Befehl bei "false:

                      var wol = require('wake_on_lan');
                      var HTPC = "MEINEMAC";         
                      on({id: "ping.0.Broker.192_168_0_2", change: 'ne'}, function(obj) {
                         if (obj.state.val === false) {
                          wol.wake(HTPC);
                          log("WOL für HTPC ausgefuehrt", "info")
                         } else if (obj.state.val === true) {
                            exec('net rpc shutdown -s -t 0-f -C "Der HTPC wird ausgeschaltet" -I 192.168.0.2 -U USER%PW')
                            log("HTPC wurde ausgeschaltet", "info")   
                         }
                      });
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active last edited by

                        kommen denn die log Befehle richtig an?

                        Also wird bei true als auch bei false der log ausgeführt?

                        Ich vermute mal ja!

                        Dann kann es nur noch an dem Befehl liegen, den du ausführen möchtest.

                        Den musst du überprüfen.

                        mfg

                        P.S.

                        Am besten mal den Befehl in ein leeres Script schreiben und dann starten.

                        Dann siehts du sofort ob dieser ausgeführt wird.

                        1 Reply Last reply Reply Quote 0
                        • S
                          samsungfreak last edited by

                          Beim Shutdown wird es geloggt beim WOL nicht. Die Befehle sind aber korrekt bzw. getestet.

                          1 Reply Last reply Reply Quote 0
                          • S
                            samsungfreak last edited by

                            Hat jemand ggf. noch eine Idee/Tipp?

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

                              du hast teilweise ; vergessen (gabs da keinen Hinweis ?)

                              Hast du die Einzelteile in einem Extra Script getestet ?

                              Also dies

                              	var wol = require('wake_on_lan');
                              	var HTPC = "MEINEMAC";         
                              	wol.wake(HTPC);
                                  	log("WOL für HTPC ausgefuehrt");  // Info brauchst du nicht
                              
                              

                              und dann das

                              
                              	exec('net rpc shutdown -s -t 0-f -C "Der HTPC wird ausgeschaltet" -I 192.168.0.2 -U USER%PW');
                                    	log("HTPC wurde ausgeschaltet");
                              
                              

                              Wenn beides läuft, dann gut!

                              Jetzt das ganze mit dem on Befehl !

                              on({id: 'ping.0.Broker.192_168_0_2', change: 'ne'}, function(obj) {
                              	if (obj.state.val === false) {
                              		var wol = require('wake_on_lan');
                              		var HTPC = "MEINEMAC";         
                              		wol.wake(HTPC);
                              	    	log("WOL für HTPC ausgefuehrt");  // Info brauchst du nicht
                              	} else if (obj.state.val === true) {
                              		exec('net rpc shutdown -s -t 0-f -C "Der HTPC wird ausgeschaltet" -I 192.168.0.2 -U USER%PW');
                              	      	log("HTPC wurde ausgeschaltet");
                              	}
                              });
                              
                              

                              Fazit:

                              Wenn die Einzelteile separat gehen; dann geht es auch bei der on-Anweisung.

                              Semikolon nicht vergessen.

                              mfg

                              1 Reply Last reply Reply Quote 0
                              • S
                                samsungfreak last edited by

                                Danke für deinen Tipp. Die Befehle gehen einzeln aber er führt mit diesem Skript den WOL nicht aus. Was er aber macht ist, wenn ich den HTPC selber anschalte wird dieser automatisch (durch else) wieder heruntergefahren da der Ping Wert auf true geht…und das obwohl ich das Skript nicht ausgeführt habe.

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

                                  Ist eigentlich logisch, dass der PC dann wieder runter fährt, denn der Ping wechselt ja auf true.

                                  Ich glaube ich weiß langsam wo dein Problem liegt.

                                  Du willst doch den HTPC ein- und ausschalten, richtig ?

                                  Und das willst du doch per Script erreichen.

                                  Nun musst du noch einen Auslöser basteln der dann von ein auf aus, etc. wechselt.

                                  Dies kann aber nicht der Ping für den PC sein !!!!!

                                  Denn (wie du oben ja schreibst) läuft das script (true) ja wenn du manuell den pc einschaltest. Ist ja auch richtig denn der ping wechsel ja dann auf true.

                                  Du brauchst eine unabhängige Variable !

                                  Folgende Vorgehensweise:

                                  1. Erstelle bei objekte eine Variable, z.B.

                                  "javascript.0.Status.HTPC"

                                  von Typ boolean (also true und false).

                                  2. In vis legst du dann ein widget z.B. vom Typ "basic-bulb on/off" an.

                                  Dieses widget zeigt dir dann den Zustand true und false an.

                                  Und dieses kannst du dann in vis per Maus umschalten.

                                  3. o.g. Script ändern bei on

                                  Und zwar in Zeile 1 nicht der ping sondern die neue Variable.

                                  on({id: 'javascript.0.Status.HTPC', change: 'ne'}, function(obj) {

                                  …

                                  Dann gehts.

                                  mfg

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  748
                                  Online

                                  31.7k
                                  Users

                                  79.8k
                                  Topics

                                  1.3m
                                  Posts

                                  4
                                  15
                                  2223
                                  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