Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Verallgemeinerung zur Weiterverwendung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Verallgemeinerung zur Weiterverwendung

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

      Nachdem ich schon einige Anregungen aus dem Board bekommen habe, möchte ich nun ein größeres Projekt starten und bin auf ein Problem gestossen.

      Ich habe folgendes Script für ein Rechnersystem erstellt (Siehe Dateianhang).

      Grundsätzliches:

      Das Rechnersystem heisst Sonne.

      Sobald die Variable Sonne.Sleeptimer auf 1 gesetzt wird, läuft ein Countdown entsprechend der Variablen Sonne.Sleeptimer_Dauer an.

      Wird während des Countdowns die Variable Sleeptimer auf 0 gesetzt, wird der Countdown abgebrochen.

      Soweit läuft das Script auch und tut genau was es soll.

      Frage / Bitte:

      Wie muss das Script abgeändert werden, damit ich es auch für andere Rechnersysteme verwenden kann.

      Beispiel: Das zweite Rechnersystem heißt Mars und besitzt genauso die eigenen Variablen Mars.Sleeptimer und Mars.Sleeptimer_Dauer

      Das ich im on die verschiedenen Variablen angeben muß ist mir klar, aber alle anderen Werte sollten sich daraus ergeben.

      Wie ich das realisiere ist mir nicht klar.

      Ziel ist es eine ganze Reihe von Rechnersystemen mit einem Script zu steuern, z.B. mit verschieden Timern, die ich über Vis einstelle, das Herunterfahren nach Ablauf des Timers zu ermöglichen.
      1055_computersysteme.txt

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        Wenn ich dich richtig verstanden hab möchtest du das script nehmen und der host name ist variabel aber die datenpunkte fix.

        Dann ist die Lösung den host als variable zu setzen.

        Umsetzung dann in etwa so:

        var varHost = Sonne;

        varHost + '.Sleeptimer'

        Gesendet von meinem Jolla mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • K
          Kamikaze last edited by

          Kann ich dann auch bei setState("JavaScript.0."+Host ,-1) verwenden ?

          1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer last edited by

            Kann ich jetzt so nicht sagen weil mir nicht klar ist was damit ersetzt werden soll. Kannst du mal neu und alt gegenüber stellen?

            Gesendet von meinem Jolla mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • K
              Kamikaze last edited by

              Aber gern.

              Alt: setState("javascript.0.Sonne.Sleeptimer", -1);

              Neu: setState("javascript.0."+Host+".Sleeptimer", -1);

              Wenn ich bei den Objekten auch Variablen verwenden kann, dann habe ich ein neues Verständnis erlangt.

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

                @Kamikaze:

                Neu: setState("javascript.0."+Host+".Sleeptimer", -1); `
                Die ID ist lediglich ein String auf den man die String-Verkettung anwenden kann. Es sollte so funktionieren.
                16431_states.jpg
                16431_vis.jpg

                1 Reply Last reply Reply Quote 0
                • K
                  Kamikaze last edited by

                  Also ich bin wirklich begeistert wie schnell das hier geht.

                  Ich werde morgen das Script anpassen und das Ergebnis hier posten, damit evtl. ein Interessierte davon profitieren kann.

                  Schon einmal vielen Dank.

                  1 Reply Last reply Reply Quote 0
                  • K
                    Kamikaze last edited by

                    So langsam bekomme ich es ja hin. Leider habe ich noch ein anderes Problem.

                    Ich habe eine Basis von Bluefox genommen, um einen Countdown zu erstellen, nur dass dabei im Log jeweils 4 Einträge erscheinen. Was mache ich falsch?

                    function CountDown (seconds) {

                    var sekunden = seconds;

                    function count() {

                    setTimeout(function () {

                    var timer = sekunden || 10 ;

                    if (timer > 1) {

                    sekunden=timer-1;

                    log ("Im Count " + sekunden,"info")

                    count();

                    } else {

                    sekunden=0;

                    }

                    }, 1000);

                    }

                    count();

                    }

                    CountDown(10);

                    2016-02-10 19:37:58.954 - info: javascript.0 script.js.Countdown: Im Count 9

                    2016-02-10 19:37:58.965 - info: javascript.0 script.js.Countdown: Im Count 9

                    2016-02-10 19:37:58.971 - info: javascript.0 script.js.Countdown: Im Count 9

                    2016-02-10 19:37:58.994 - info: javascript.0 script.js.Countdown: Im Count 9

                    2016-02-10 19:37:59.958 - info: javascript.0 script.js.Countdown: Im Count 8

                    2016-02-10 19:37:59.969 - info: javascript.0 script.js.Countdown: Im Count 8

                    2016-02-10 19:37:59.979 - info: javascript.0 script.js.Countdown: Im Count 8

                    2016-02-10 19:38:00.000 - info: javascript.0 script.js.Countdown: Im Count 8

                    2016-02-10 19:38:00.962 - info: javascript.0 script.js.Countdown: Im Count 7

                    2016-02-10 19:38:00.972 - info: javascript.0 script.js.Countdown: Im Count 7

                    2016-02-10 19:38:00.985 - info: javascript.0 script.js.Countdown: Im Count 7

                    2016-02-10 19:38:01.005 - info: javascript.0 script.js.Countdown: Im Count 7

                    2016-02-10 19:38:01.968 - info: javascript.0 script.js.Countdown: Im Count 6

                    2016-02-10 19:38:01.980 - info: javascript.0 script.js.Countdown: Im Count 6

                    2016-02-10 19:38:01.990 - info: javascript.0 script.js.Countdown: Im Count 6

                    2016-02-10 19:38:02.008 - info: javascript.0 script.js.Countdown: Im Count 6

                    2016-02-10 19:38:02.972 - info: javascript.0 script.js.Countdown: Im Count 5

                    2016-02-10 19:38:02.984 - info: javascript.0 script.js.Countdown: Im Count 5

                    2016-02-10 19:38:02.994 - info: javascript.0 script.js.Countdown: Im Count 5

                    2016-02-10 19:38:03.011 - info: javascript.0 script.js.Countdown: Im Count 5

                    2016-02-10 19:38:03.977 - info: javascript.0 script.js.Countdown: Im Count 4

                    2016-02-10 19:38:03.988 - info: javascript.0 script.js.Countdown: Im Count 4

                    2016-02-10 19:38:03.998 - info: javascript.0 script.js.Countdown: Im Count 4

                    2016-02-10 19:38:04.014 - info: javascript.0 script.js.Countdown: Im Count 4

                    2016-02-10 19:38:04.983 - info: javascript.0 script.js.Countdown: Im Count 3

                    2016-02-10 19:38:04.991 - info: javascript.0 script.js.Countdown: Im Count 3

                    2016-02-10 19:38:05.001 - info: javascript.0 script.js.Countdown: Im Count 3

                    2016-02-10 19:38:05.017 - info: javascript.0 script.js.Countdown: Im Count 3

                    2016-02-10 19:38:05.988 - info: javascript.0 script.js.Countdown: Im Count 2

                    2016-02-10 19:38:05.994 - info: javascript.0 script.js.Countdown: Im Count 2

                    2016-02-10 19:38:06.006 - info: javascript.0 script.js.Countdown: Im Count 2

                    2016-02-10 19:38:06.023 - info: javascript.0 script.js.Countdown: Im Count 2

                    2016-02-10 19:38:06.992 - info: javascript.0 script.js.Countdown: Im Count 1

                    2016-02-10 19:38:07.000 - info: javascript.0 script.js.Countdown: Im Count 1

                    2016-02-10 19:38:07.010 - info: javascript.0 script.js.Countdown: Im Count 1

                    2016-02-10 19:38:07.027 - info: javascript.0 script.js.Countdown: Im Count 1

                    1 Reply Last reply Reply Quote 0
                    • blauholsten
                      blauholsten Developer last edited by

                      Was mir auffällt ist das du setTimeout nicht an eine var über geben hast, das musst du aber tun …..

                      Var x = setTimeout (function ......

                      Findest du in der JavaScript doku bzw einige Beispiele hier im forum.

                      Gesendet vom Handy

                      1 Reply Last reply Reply Quote 0
                      • K
                        Kamikaze last edited by

                        Da hast du recht, nur dass die Variable nur benötigt wird, wenn ich den Timeout wieder abbrechen will.

                        In meinem Fall kann dieser ruhig zu Ende laufen

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

                          count() wird innerhalb der Funktion count() aufgerufen !

                          function CountDown (seconds) {
                          	var sekunden = seconds;
                          	function count() {
                          		setTimeout(function () {
                          			var timer = sekunden || 10 ;
                          			if (timer > 1) {
                          				sekunden=timer-1;
                          				log ("Im Count " + sekunden,"info")
                          				count();      // Aufruf innerhalb von count() !
                          			} else {
                          				sekunden=0;
                          			}
                          		}, 1000);
                          	}
                          	count();
                          }
                          
                          CountDown(10);
                          
                          

                          Weshalb verwendest Du nicht setInterval() ?

                          1 Reply Last reply Reply Quote 0
                          • K
                            Kamikaze last edited by

                            Das Count ist auch notwendig, da er sonst nur einmal durchläuft.

                            Mit setIntervall habe ich noch nicht gearbeitet. Daher habe ich noch nicht den Ansatz.

                            Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar.

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

                              @Kamikaze:

                              Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar. `

                              var counter;
                              
                              function CountDown (seconds) {
                                 counter = seconds;
                                 var timer = setInterval(function () {
                                       if (counter > 0) {
                                          counter = counter - 1;
                                          log ("Im Count " + counter,"info")
                                       } else {
                                          clearInterval(timer);
                                          timer = null;
                                       }
                                    }, 1000);
                              }
                              
                              CountDown(10);
                              
                              1 Reply Last reply Reply Quote 0
                              • K
                                Kamikaze last edited by

                                Hier habe ich aber genau das gleiche Ergebnis.

                                2016-02-10 21:39:02.290 - info: javascript.0 script.js.Countdown1: Im Count 9

                                2016-02-10 21:39:02.330 - info: javascript.0 script.js.Countdown1: Im Count 9

                                2016-02-10 21:39:02.340 - info: javascript.0 script.js.Countdown1: Im Count 9

                                2016-02-10 21:39:02.349 - info: javascript.0 script.js.Countdown1: Im Count 9

                                2016-02-10 21:39:03.294 - info: javascript.0 script.js.Countdown1: Im Count 8

                                2016-02-10 21:39:03.333 - info: javascript.0 script.js.Countdown1: Im Count 8

                                2016-02-10 21:39:03.345 - info: javascript.0 script.js.Countdown1: Im Count 8

                                2016-02-10 21:39:03.354 - info: javascript.0 script.js.Countdown1: Im Count 8

                                2016-02-10 21:39:04.298 - info: javascript.0 script.js.Countdown1: Im Count 7

                                2016-02-10 21:39:04.335 - info: javascript.0 script.js.Countdown1: Im Count 7

                                2016-02-10 21:39:04.349 - info: javascript.0 script.js.Countdown1: Im Count 7

                                2016-02-10 21:39:04.357 - info: javascript.0 script.js.Countdown1: Im Count 7

                                2016-02-10 21:39:05.304 - info: javascript.0 script.js.Countdown1: Im Count 6

                                2016-02-10 21:39:05.338 - info: javascript.0 script.js.Countdown1: Im Count 6

                                2016-02-10 21:39:05.352 - info: javascript.0 script.js.Countdown1: Im Count 6

                                2016-02-10 21:39:05.362 - info: javascript.0 script.js.Countdown1: Im Count 6

                                2016-02-10 21:39:06.309 - info: javascript.0 script.js.Countdown1: Im Count 5

                                2016-02-10 21:39:06.344 - info: javascript.0 script.js.Countdown1: Im Count 5

                                2016-02-10 21:39:06.358 - info: javascript.0 script.js.Countdown1: Im Count 5

                                2016-02-10 21:39:06.365 - info: javascript.0 script.js.Countdown1: Im Count 5

                                2016-02-10 21:39:07.315 - info: javascript.0 script.js.Countdown1: Im Count 4

                                2016-02-10 21:39:07.358 - info: javascript.0 script.js.Countdown1: Im Count 4

                                2016-02-10 21:39:07.365 - info: javascript.0 script.js.Countdown1: Im Count 4

                                2016-02-10 21:39:07.369 - info: javascript.0 script.js.Countdown1: Im Count 4

                                2016-02-10 21:39:08.320 - info: javascript.0 script.js.Countdown1: Im Count 3

                                2016-02-10 21:39:08.364 - info: javascript.0 script.js.Countdown1: Im Count 3

                                2016-02-10 21:39:08.371 - info: javascript.0 script.js.Countdown1: Im Count 3

                                2016-02-10 21:39:08.374 - info: javascript.0 script.js.Countdown1: Im Count 3

                                2016-02-10 21:39:09.324 - info: javascript.0 script.js.Countdown1: Im Count 2

                                2016-02-10 21:39:09.367 - info: javascript.0 script.js.Countdown1: Im Count 2

                                2016-02-10 21:39:09.376 - info: javascript.0 script.js.Countdown1: Im Count 2

                                2016-02-10 21:39:09.377 - info: javascript.0 script.js.Countdown1: Im Count 2

                                2016-02-10 21:39:10.328 - info: javascript.0 script.js.Countdown1: Im Count 1

                                2016-02-10 21:39:10.372 - info: javascript.0 script.js.Countdown1: Im Count 1

                                2016-02-10 21:39:10.382 - info: javascript.0 script.js.Countdown1: Im Count 1

                                2016-02-10 21:39:10.382 - info: javascript.0 script.js.Countdown1: Im Count 1

                                2016-02-10 21:39:11.330 - info: javascript.0 script.js.Countdown1: Im Count 0

                                2016-02-10 21:39:11.378 - info: javascript.0 script.js.Countdown1: Im Count 0

                                2016-02-10 21:39:11.385 - info: javascript.0 script.js.Countdown1: Im Count 0

                                2016-02-10 21:39:11.384 - info: javascript.0 script.js.Countdown1: Im Count 0

                                1 Reply Last reply Reply Quote 0
                                • blauholsten
                                  blauholsten Developer last edited by

                                  @Kamikaze:

                                  Das Count ist auch notwendig, da er sonst nur einmal durchläuft.

                                  Mit setIntervall habe ich noch nicht gearbeitet. Daher habe ich noch nicht den Ansatz.

                                  Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar. `

                                  Hi,

                                  ich habe wirklich keinen Schimmer vom programmieren, aber was Paul meint ist denke ich richtig. (Wenn man seinen Beiträgen so folgt, hat er ziemlich viel Ahnung davon… :roll: )

                                  Ich habe mal versucht dein Programm zu verstehen, und natürlich hast du recht das count() nochmals aufgerufen werden muss! Aber nur innerhalb der Methode/function setTimeout, und nicht direkt innerhalb der count function :?: :oops: :oops:

                                  PS. hab mich mit der Variable belesen, hast recht das man sie nur zum clear.. braucht! Danke für den Tip

                                  1 Reply Last reply Reply Quote 0
                                  • K
                                    Kamikaze last edited by

                                    Problem gelöst. Es lag an der javascript-Version. Nachdem ich auf 1.1.12 (vorher war 1.1.11 installiert) aktualisiert habe, laufen beide Lösungen.

                                    Trotzdem Danke für Eure Hilfe.
                                    1043_bildschirmfoto_2019-01-20_um_10.16.32.png
                                    1043_bildschirmfoto_2019-01-20_um_10.16.03.png
                                    1043_bildschirmfoto_2019-01-20_um_10.15.33.png

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      Kamikaze last edited by

                                      Ich habe ja versprochen mein Ergebnis hier bereitzustellen.

                                      Den Countdown habe ich von Bluefox übernommen und an meine Bedürfnisse angepasst. Vielen Dank an Bluefox.

                                      /* Enthaltene Funktionen:                                                                              */
                                      /* CountDown(objekt)  Stellt einen CountDown zur Verfügung und schreibt die Werte nach objekt          */
                                      /* CountDown1(sekunden,objekt)  Wie CountDown als Alternativlösung                                     */
                                      /* Rechnersysteme direkt hoch und herunterfahren                                                       */
                                      /* --------------------------------------------------------------------------------------------------  */
                                      function CountDown (objekt) {
                                      
                                         function count() {
                                            setTimeout(function () {
                                               var timer = getState(objekt).val;
                                               if (timer > 1) {
                                                  timer=timer-1;
                                                  if (getState(objekt).val != 0) {setState(objekt, timer)}; 
                                                  count();      
                                               } else {
                                                  setState(objekt, 0); 
                                               }
                                            }, 1000);
                                         }
                                         count();
                                      }
                                      /* --------------------------------------------------------------------------------------------------  */
                                      

                                      Im zweiten Teil steuere ich drei Rechnersysteme. Dies kann um weitere Systeme erweitert werden, indem in der Markierung 1 weitere Rechnernamen eingetragen werden und die on-Statements jweils kopiert und hinten angehängt werden. Die Variable i muss jeweils zweimal um eins erhöht werden. Bei Markierung 3 können die eigenen Befehle eingetragen werden, die nach Ablauf des Sleeptimers ausgeführt werden sollen.

                                      Wenn jemanden noch Verbesserungen oder Optimierungen auffallen, dann gerne kommentieren.

                                      /* –------------------------------------------------------------------------------------------------ */

                                      `var idSayIt = "sayit.0.tts.text";
                                      
                                      var hosts = [ "Sonne", "Nuc","Galaxy"];  //MARKIERUNG 1
                                      var anzahl_hosts = hosts.length;
                                      var timeout = new Array(anzahl_hosts);
                                      
                                      for (i=1;i<anzahl_hosts;i++) 0/1/3/60/{/createstate/(hosts[i]+'.sleeptimer',-1);/(hosts[i]+'.sleeptimer_dauer',15);/(hosts[i]+'.countdown',900);/(hosts[i]+'.shutdown_befehl','wget/-o/dev/null/http:/192.168.2.25/remote_'+hosts[i]/+/'_shutdown.php');/(hosts[i]+'.wol_befehl','wget/'_wol.php');/(hosts[i]+'.aktivieren',0);/}/function/start_sleeptimer(host)/setstate/(idsayit,/"sleeptimer/"/host/aktiviert/getstate("javascript.0."+host/".sleeptimer_dauer").val/minuten")/;/setstate("javascript.0."/".countdown",/*/);/countdown("javascript.0."+host/".countdown");/mytimeout="setTimeout(function" ()/timer/ist/abgelaufen")/markierung/".sleeptimer",/-1);/wert/wieder/zurücksetzen/},/getstate("javascript.0."+host+".sleeptimer_dauer").val/1000*60);/return(mytimeout)/stop_sleeptimer/(host,mytimeout)/"+host+"/gestoppt")/cleartimeout(mytimeout);/setstate("javascript.0."+host+".sleeptimer",/setstate("javascript.0."+host+".countdown",/0);/------------------------------------------------------------------------------------------------------/dies/der/auslöser/für/die/aktivierung/des/sleeptimers/wenn/sleeptimer/auf/gesetzt/wird,/wird/ein/countdown/ausgelöst/und/nach/ablauf/aktion/ausgeführt/während/aktiven/countdowns/agbebrochen/beiden/aktinen/sleelptimer/selbst/-1/gesetzt./i="0;" on("javascript.0."+hosts[i]+".sleeptimer",/function(obj)/if/(obj.newstate.val="==" 1)/timeout[i]="start_Sleeptimer(hosts[i]);" else/0)/stop_sleeptimer(hosts[i],timeout[i]);/nichts/tun/});/<e=""></anzahl_hosts;i++)>`[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      995
                                      Online

                                      31.7k
                                      Users

                                      79.7k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      1580
                                      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