Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Schedule auf komplettes Skript?

    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

    Schedule auf komplettes Skript?

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

      Hallo

      wie starte ich per CRON ein Skript komplett neu?

      Kenne wohl schedule ("* * * * *", function(), also eine

      Funktion im Skript starten. Geht das auch mit dem ganzen Skript?

      ! ````
      "* * * * *";
      ! debug = true;
      ! // Anlegen JS State für VIS
      ! createState('javascript.0.muell.blau', 0); //. gelb, blau usw entsprechend erstellen
      ! // Suchvariablen
      // ['Reststoff', 'Blaue Tonne', 'Biotonne', 'Gelbe Tonne']
      var such1= "Blaue Tonne"; // weitere Varialben für die anderen Müllsorten eintragen
      ! // Kalender auslesen (HTML Format)
      ! // **************************************************************************************
      // Termine auswerten aus html. Bereinigung der HTML Tags und Konvertierung in Plain Text
      // **************************************************************************************

          var inhalt = getState("ical.0.data.html"/*HTML iCal table*/);           // an deinen eigenen Kalender anpassen
          var inhaltString = inhalt.val.toString();
          var inhaltStringReplace = inhaltString;
          var inhaltStringText;
          var i_search;
      
          // remove all inside SCRIPT and STYLE tags
          inhaltStringReplace=inhaltStringReplace.replace(/<script.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
          inhaltStringReplace=inhaltStringReplace.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
      
          // remove BR tags
          inhaltStringReplace=inhaltStringReplace.replace(/
      

      /gi, "");
      inhaltStringReplace=inhaltStringReplace.replace(/<br\s>/gi, "");
      inhaltStringReplace=inhaltStringReplace.replace(/<br>/gi, "");

          // remove all else
          inhaltStringReplace=inhaltStringReplace.replace(/<(?:.|\s)*?>/g, "");
      
          // get rid of html-encoded characters:
          inhaltStringReplace=inhaltStringReplace.replace(/ /gi," ");
          inhaltStringReplace=inhaltStringReplace.replace(/&/gi,"&");
          inhaltStringReplace=inhaltStringReplace.replace(/"/gi,'"');
          inhaltStringReplace=inhaltStringReplace.replace(//gi,'>');    
      
          if(debug) log(inhaltStringReplace);
      

      ! // n-ten Treffer finden
      ! function nthIndex(str, pat, n){
      var L= str.length, i= -1;
      while(n-- && i++ <l){ i="str.indexOf(pat," i);/if/(i/</0)/break;/}/i_search="i;" funktion/zum/tage/im/monat/zählen/function/daysinmonth(month,/year)/{/return/new/date(year,/month,/0).getdate();/position/bestimmen/var/pos="inhaltStringReplace.indexOf(" such1,/1);/if(debug)/log("pos/ist:/"+pos);/inhaltstringtext="inhaltStringReplace.substring((pos-21),pos-9);" log("datum/"+inhaltstringtext);/nthindex(inhaltstringtext,/".",/t_m="inhaltStringText.slice(0," i_search);/pos1="i_search+1;" log("pos1:/"/+pos1/);/2);/m_m="inhaltStringText.slice(pos1," pos2="i_search+1;" log("pos2:/+pos2/j_m="inhaltStringText.slice(pos2," inhaltstringtext.len/log(t_m/+"/,/+m_m/+j_m);/datum/heute/ermitteln/today="new" date();/log(today);/tag/t="today.getDate();" m="today.getMonth()+1;" jahr/j="today.getFullYear();" "+t+m+j);/berechnung/tagesdifferenzen/diff="0;" dim="DaysInMonth(m," j);/des/aktuellen/monats/log("tage/aktueller/monat:/"+dim);/if(j_m="">j || m_m > m) { // Prüfung: Jahr_Müll größer als aktuelles Jahr? Relevant bei Jahreswechsel ODEr Monat Müll größer aktueller Monat?

              diff = parseInt(dim) - parseInt(t) + parseInt(t_m);
      
          }
          else diff = parseInt(t_m) - parseInt(t);
      
            if(debug) log("Tage bis zum nächsten Müll: "+diff);
      

      setState('javascript.0.muell.blau', diff);</l){></br></br\s></style.></script.>

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

        @noxx:

        wie starte ich per CRON ein Skript komplett neu? `
        Rechts oben, Button "Cron"
        493_js_cron.jpg

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

          @paul53:

          Rechts oben, Button "Cron" `
          Der fügt bei mir nur einen Cron-String in ein Skript ein.

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

            @AlCalzone:

            Der fügt bei mir nur einen Cron-String in ein Skript ein. `
            Stimmt, habe ich nie verwendet. Es ist offenbar nur ein Hilfsmittel, um einen Cron-String für die schedule-Funktion zu erzeugen.
            @noxx:

            wie starte ich per CRON ein Skript komplett neu? `
            Dann muss man das komplette Skript in eine Funktion packen und per schedule auslösen.

            function myScript() {  // zusätzliche Zeile am Anfang
            
            Hier wir das komplette Skript plaziert
            
            }  // zusätzliches Funktionsende
            
            schedule('* * * * *', myScript);  // zusätzliches CRON
            
            

            Funktionen, die nur einmal benötigt werden - wie z.B. createState() - sollte man vor die Funktion oder in ein separates Skript plazieren.

            Mit dem Skript von @noxx

            ! ````
            var debug = true;
            ! // Anlegen JS State für VIS
            ! createState('javascript.0.muell.blau', 0); //. gelb, blau usw entsprechend erstellen
            ! function myScript() {
            // Suchvariablen
            // ['Reststoff', 'Blaue Tonne', 'Biotonne', 'Gelbe Tonne']
            var such1= "Blaue Tonne"; // weitere Varialben für die anderen Müllsorten eintragen
            ! // Kalender auslesen (HTML Format)
            ! // **************************************************************************************
            // Termine auswerten aus html. Bereinigung der HTML Tags und Konvertierung in Plain Text
            // **************************************************************************************

                var inhalt = getState("ical.0.data.html"/*HTML iCal table*/);           // an deinen eigenen Kalender anpassen
                var inhaltString = inhalt.val.toString();
                var inhaltStringReplace = inhaltString;
                var inhaltStringText;
                var i_search;
            
                // remove all inside SCRIPT and STYLE tags
                inhaltStringReplace=inhaltStringReplace.replace(/<script.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
                inhaltStringReplace=inhaltStringReplace.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
            
                // remove BR tags
                inhaltStringReplace=inhaltStringReplace.replace(/
            

            /gi, "");
            inhaltStringReplace=inhaltStringReplace.replace(/<br\s>/gi, "");
            inhaltStringReplace=inhaltStringReplace.replace(/<br>/gi, "");

                // remove all else
                inhaltStringReplace=inhaltStringReplace.replace(/<(?:.|\s)*?>/g, "");
            
                // get rid of html-encoded characters:
                inhaltStringReplace=inhaltStringReplace.replace(/ /gi," ");
                inhaltStringReplace=inhaltStringReplace.replace(/&/gi,"&");
                inhaltStringReplace=inhaltStringReplace.replace(/"/gi,'"');
                inhaltStringReplace=inhaltStringReplace.replace(//gi,'>');    
            
                if(debug) log(inhaltStringReplace);
            

            ! // n-ten Treffer finden
            ! function nthIndex(str, pat, n){
            var L= str.length, i= -1;
            while(n-- && i++ <l){ i="str.indexOf(pat," i);/if/(i/</0)/break;/}/i_search="i;" funktion/zum/tage/im/monat/zählen/function/daysinmonth(month,/year)/{/return/new/date(year,/month,/0).getdate();/position/bestimmen/var/pos="inhaltStringReplace.indexOf(" such1,/1);/if(debug)/log("pos/ist:/"+pos);/inhaltstringtext="inhaltStringReplace.substring((pos-21),pos-9);" log("datum/"+inhaltstringtext);/nthindex(inhaltstringtext,/".",/t_m="inhaltStringText.slice(0," i_search);/pos1="i_search+1;" log("pos1:/"/+pos1/);/2);/m_m="inhaltStringText.slice(pos1," pos2="i_search+1;" log("pos2:/+pos2/j_m="inhaltStringText.slice(pos2," inhaltstringtext.len/log(t_m/+"/,/+m_m/+j_m);/datum/heute/ermitteln/today="new" date();/log(today);/tag/t="today.getDate();" m="today.getMonth()+1;" jahr/j="today.getFullYear();" "+t+m+j);/berechnung/tagesdifferenzen/diff="0;" dim="DaysInMonth(m," j);/des/aktuellen/monats/log("tage/aktueller/monat:/"+dim);/if(j_m="">j || m_m > m) { // Prüfung: Jahr_Müll größer als aktuelles Jahr? Relevant bei Jahreswechsel ODEr Monat Müll größer aktueller Monat?

                    diff = parseInt(dim) - parseInt(t) + parseInt(t_m);
            
                }
                else diff = parseInt(t_m) - parseInt(t);
            
                  if(debug) log("Tage bis zum nächsten Müll: "+diff);
            

            setState('javascript.0.muell.blau', diff);
            } // Ende myScript()

            ! schedule('* * * * ', myScript);</l){></br></br\s></style.></script.*>

            1 Reply Last reply Reply Quote 0
            • B
              Berchemer last edited by

              @paul53

              Danke. Das hat mich von tagelangem Suchen und Grübeln bewahrt 😄

              1 Reply Last reply Reply Quote 0
              • A
                AingTii last edited by

                Hallo,

                irgendwie hakt es bei mir…

                Warum funktioniert das so nicht, das script startet aber bei erreichen der Zeiten geht passiert nichts.

                function myTest () {
                if ((getState("daswetter.0.NextDaysDetailed.0d.0h.Clouds"/*Clouds*/).val<'70%')) {
                    console.log("Hallo Welt!");
                    log("Hallo Welt!");
                    }
                    var wolken = (getState("daswetter.0.NextDaysDetailed.0d.0h.Clouds"/*Clouds*/).val);
                    log(wolken);
                }  
                
                schedule("43 10 * 4-9 *", myTest);  // zusätzliches CRON
                schedule("44 10 * 4-9 *", myTest);  // zusätzliches CRON
                schedule("45 10 * 4-9 *", myTest);  // zusätzliches CRON
                schedule("46 10 * 4-9 *", myTest);  // zusätzliches CRON
                
                

                das log endet nach dem start:

                10:38:35.749	[info]	javascript.0 Start javascript script.js.LogEintragTest
                10:38:35.751	[info]	javascript.0 script.js.LogEintragTest: registered 0 subscriptions and 1 schedule
                10:41:58.082	[info]	javascript.0 Stop script script.js.LogEintragTest
                10:41:58.104	[info]	javascript.0 Start javascript script.js.LogEintragTest
                10:41:58.106	[info]	javascript.0 script.js.LogEintragTest: registered 0 subscriptions and 1 schedule
                10:42:07.168	[info]	javascript.0 Stop script script.js.LogEintragTest
                10:42:07.191	[info]	javascript.0 Start javascript script.js.LogEintragTest
                10:42:07.193	[info]	javascript.0 script.js.LogEintragTest: registered 0 subscriptions and 1 schedule
                10:42:22.904	[info]	javascript.0 Stop script script.js.LogEintragTest
                10:42:22.939	[info]	javascript.0 Start javascript script.js.LogEintragTest
                10:42:22.942	[info]	javascript.0 script.js.LogEintragTest: registered 0 subscriptions and 4 schedules
                
                

                ich habe schon hin und her getestet, ob mit ' oder "

                "* * * * *" funktioniert

                "* * * 4-9 *" nicht

                "57 * * * *" funktioniert

                "* * * 5 *" funktioniert

                "22 11 * 4,5,6,7,8,9 *" nicht

                "24 11 * 5,6,7,8,9 *" funktioniert

                hat jemand einen Idee?

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

                Support us

                ioBroker
                Community Adapters
                Donate

                749
                Online

                31.7k
                Users

                79.9k
                Topics

                1.3m
                Posts

                5
                6
                2631
                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