NEWS
Schedule auf komplettes Skript?
-
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.>
-
wie starte ich per CRON ein Skript komplett neu? `
Rechts oben, Button "Cron"
-
Rechts oben, Button "Cron" `
Der fügt bei mir nur einen Cron-String in ein Skript ein. -
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.*>
-
Danke. Das hat mich von tagelangem Suchen und Grübeln bewahrt
-
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?