@tempestas Hi, ich nutze dein Script schon seit einige Jahren. Erstmal Danke dafür!
Nun habe ich seit einigen Tagen eine Fehlermeldung. Vielleicht hat sich etwas am JavaScript-Adapter geändert? Am Script selbst habe ich nichts geändert. Kannst du etwas mit dem Fehler anfangen?
Fehler:
2023-11-19 18:00:00.096 - error: javascript.0 (3058) Error in callback: ReferenceError: i_search is not defined
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at nthIndex (script.js.common.Telegram.Morgige_Termine:19:18)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at Warnung (script.js.common.Telegram.Morgige_Termine:42:5)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at Object. (script.js.common.Telegram.Morgige_Termine:82:4)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at listOnTimeout (node:internal/timers:569:17)
2023-11-19 18:00:00.097 - error: javascript.0 (3058) at processTimers (node:internal/timers:512:7)
Script:
Spoiler
// Skript schaut täglich um 18h, ob im Kalender das Wort "Morgen" vorkommt. Wenn ja, wird ein Telegram geschickt mit dem betreffenden Termin bzw Terminen
// tempestas 13.2.2018
// Skripteinstellungen
var debug = false;
// Suchfunktion für Termin-Cutoff
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
function Warnung() {
var inhalt = getState("ical.0.data.html").val.toString(); // hier deine Müll-Kalender Instanz eingeben
var count = inhalt.split("Morgen").length -1; // wie häufig wird "Morgen" gefunden?
var posStart = inhalt.indexOf( 'Morgen', 0); // sucht das erste mal "Morgen"
if(debug) log("posStart "+posStart);
if(posStart != -1){ // falls "Morgen" gefunden wurde gehts hier weiter
var stringShort = inhalt.substring(posStart, inhalt.length); // Abschneiden von allem, was links vom ersten "Morgen" Treffer steht
if(debug) log("Gekürzt :" +stringShort);
nthIndex(stringShort, '</span></span><br/>', count); // hier wird nun geschaut, wo es rechts abgeschnitten werden muss
stringCut = stringShort.slice(0,i_search); // hier wird alles rechts abgeschnitten und so der finale String extrahiert
if(debug) log("Fast Final: "+stringCut);
// aufbereiten für telegram, entfernen von HTML Tags
stringCut = stringCut.replace('</br>',"\n"); // Zeilenumbruch html durch telegram umbruch ersetzen
// remove all inside SCRIPT and STYLE tags
stringCut=stringCut.replace(/<script.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
stringCut=stringCut.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
// remove BR tags.
stringCut=stringCut.replace(/<br>/gi, "");
stringCut=stringCut.replace(/<br\s\/>/gi, "");
stringCut=stringCut.replace(/<br\/>/gi, "");
// remove all else
stringCut=stringCut.replace(/<(?:.|\s)*?>/g, "");
// get rid of html-encoded characters:
stringCut=stringCut.replace(/ /gi," ");
stringCut=stringCut.replace(/&/gi,"&");
stringCut=stringCut.replace(/"/gi,'"');
stringCut=stringCut.replace(/</gi,'<');
stringCut=stringCut.replace(/>/gi,'>');
sendTo('telegram.0', stringCut);
}
}
// Trigger Schedule
schedule('0 18 * * *', function(){ // Täglich um 18h
Warnung();
});
// Bei Start
Warnung();
JavaScript: 7.1.4.
Node.js: v18.17.1
NPM: 9.6.7
JS-controller: 5.0.16