NEWS
Script geht zeitweise auf Pause
-
Hallo
Ich habe dieses Script in Verwendung und musste feststellen, dass es sich in unregelmäßigen Abständen immer wieder auf Pause stellt.
Kann mann irgendwie herausfinden, warum dies geschieht, bzw. dieses Script soweit überwachen, dass es sich gleich wieder neu startet?'*/5 * * * *' ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // "Spritpreise_AT v.0.5" // // e-control Spritpreise // // ursprüngl. Script von steinejo_io vom // // // // Zwingend erforderlich sind der Parser Adapter und die URL aus der API. Links und Hilfe zum Erstellemn findet ihr im Folgenden Lnk: // // https://forum.iobroker.net/topic/20314/skripten-des-e-control-spritpreisrechners // // Das manuelle Anlegen von Daenpunkten ist nicht mehr notwendig. erledigt das Script beim ersten Aufruf. // // Auf das "E" Zeichen habe ich verzichtet, da es in VIS genz einfach an der jeweils gewünschten Stelle produzierbar ist. // // // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// on({id: "parser.0.Spritpreisrechner"/*Spritpreisrechner*/, change: 'any'}, function(obj) { log("Start Spritvergleich"); var gasStation = JSON.parse(obj.state.val); if (gasStation.length === 0) return; //Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Lagerhaus=9, AVIA=10, A1=11, Diskont=12, IQ=13 var arrMarke = ['Aral', 'eni', 'Shell', 'OMV', 'avanti', 'BP', 'JET', 'Turmöl', 'Lagerhaus', 'AVIA', 'A1', 'Diskont', 'DISKONT', 'IQ', 'SB-Tankstelle', 'bp', 'Land', 'Bp']; var i = 0; for (var i = 1; i <= 5; i++) { // console.log(i); // console.log("javascript.0.Sprit_AT.name_"+i); createState("javascript.0.Sprit_AT.Treffer_"+i+".Name_"+i, {type: "string", name: "Platz "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".Preis_"+i, {type: "string", name: "Platz "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".PreisP_"+i, {type: "string", name: "Platz "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".Strasse_"+i, {type: "string", name: "Platz "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".PLZ_Ort_"+i, {type: "string", name: "Platz "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".Logo_"+i, {type: "number", name: "Logo "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".Latitude_"+i, {type: "number", name: "Latitude "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".Longitude_"+i, {type: "number", name: "Longitude "+i, read: true, write: true}); createState("javascript.0.Sprit_AT.Treffer_"+i+".offen_"+i, {type: "boolean", name: "offen "+i, read: true, write: true}); } var index = 0; //for (index = 0; index < gasStation.length; ++index) { for (index = 0; index <= 4; ++index) { var arrname = gasStation[index].name.split(' '); if (arrname.length > 0) { var markenname = arrname[0]; } else { var markenname = gasStation[index].name; } var station = gasStation[index].name; setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Name_"+(index+1), gasStation[index].name); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Preis_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".",",")); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".PreisP_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".",".")); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Strasse_"+(index+1), (gasStation[index].location.address)); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".PLZ_Ort_"+(index+1), (gasStation[index].location.postalCode) + " " + (gasStation[index].location.city)); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Latitude_"+(index+1), (gasStation[index].location.latitude)); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Longitude_"+(index+1), (gasStation[index].location.longitude)); setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".offen_"+(index+1), (gasStation[index].open)); //Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Lagerhaus=9, AVIA=10, A1=11, Diskont=12, IQ=13 var markennameklein=markenname.toLowerCase(); var x= 0; for (x=0; x < arrMarke.length; x++) { var arrMklein=arrMarke[x].toLowerCase(); //console.log("x=" + x + "/ Markennameklein =" + markennameklein + "/ Array =" + arrMklein); if (arrMklein == markennameklein) { setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Logo_"+(index+1), (x+1)); } } } log("Ende Spritvergleich"); });
-
Hi @Negalein
Was bedeutet denn die aller erste Script-Zeile? Sieht für mich nach einer Variable aus, die nicht zugeordnet wird und damit ungültig ist. Aber das nur nebenbei.
@Negalein sagte in Script geht zeitweise auf Pause:
Ich habe dieses Script in Verwendung und musste feststellen, dass es sich in unregelmäßigen Abständen immer wieder auf Pause stellt.
Meinst du damit ein "auf Pause stellen" im JavaScript-Adapter?
Ich würde mal testen was passiert, wenn du das Script auf "Stop" stellst, kopierst, und in ein neues Script einfügst. -
@Mic sagte in Script geht zeitweise auf Pause:
Was bedeutet denn die aller erste Script-Zeile?
Hi Mic!
Diesen Cron '*/5 * * * *' hab ich mit dem Cronbutton hinzugefügt, damit das Script alle 5 Minuten neu startet.
Meinst du damit ein "auf Pause stellen" im JavaScript-Adapter?
Ja, wenn das gelbe Pausesymbol aufscheint.
Ich würde mal testen was passiert, wenn du das Script auf "Stop" stellst, kopierst, und in ein neues Script einfügst.
Werd ich machen und beobachten.
-
Das mit dem Cron war wohl falsch.
Reicht es, wenn ich am Anfang schedule("*/5 * * * *") im Script einfüge?Ich würde mal testen was passiert, wenn du das Script auf "Stop" stellst, kopierst, und in ein neues Script einfügst.
hat leider nichts gebracht.
-
Was genau soll denn der "cron" am Anfang des Scriptes tun?
Derzeit ist es bei dem Script so, das der "Hauptcode" immer dann ausgeführt wird wenn sich der Datenpunkt
parser.0.Spritpreisrechner
ändert.
Ich vermute, Du möchtest erreichen, das das Script selber gestartet wird weil es auf Pause steht (warum auch immer)
Aber das das Script ja auf "Pause" steht nützt dir der "cron-Job" oder "Schedule" nichts. Das Script steht ja auf Pause, da wird nichts ausgeführt.Du brauchst also ein Ereignis/Script von außerhalb was wiederum dieses Script neu Startet.
Viel interessanter wäre aber warum das Script pausiert. Ich habe das Script nur überflogen, aber irgendetwas wird da nicht so ganz richtig sein.
Zu einen versucht es jedes Mal Datenpunkte anzulegen. Das ist zwar vielleicht nicht direkt schädlich, aber komplett unnötig.
Zum anderen ist die "Einrückung etwas sehr durcheinander. Damit ist das Script schwer zu lesen und zu analysieren -
@Negalein sagte in Script geht zeitweise auf Pause:
dass es sich in unregelmäßigen Abständen immer wieder auf Pause stellt.
Entsprechenden Code sehe ich hier nicht. Setzt du ggf. in einem anderen Skript
scriptEnabled
für dieses Skript? Sollte man übrigens nicht tun.@Negalein sagte in Script geht zeitweise auf Pause:
Diesen Cron '*/5 * * * *' hab ich mit dem Cronbutton hinzugefügt, damit das Script alle 5 Minuten neu startet.
So geht das nicht. Den String kannst du in einem
schedule(...)
verwenden, um die dazugehörige Funktion alle 5 Minuten auszuführen. Da du aber peron(...)
einen Datenpunkt überwachst, wäre es sowieso unsinnig das Skript ständig neu zu starten. -
@AlCalzone sagte in Script geht zeitweise auf Pause:
Setzt du ggf. in einem anderen Skript scriptEnabled für dieses Skript?
Nein
Da du aber per on(...) einen Datenpunkt überwachst, wäre es sowieso unsinnig das Skript ständig neu zu starten.
Ich wollte das machen, da das Script zeitweise auf Pause geht.
-
@htrecksler sagte in Script geht zeitweise auf Pause:
Ich vermute, Du möchtest erreichen, das das Script selber gestartet wird weil es auf Pause steht
Genau
Aber das das Script ja auf "Pause" steht nützt dir der "cron-Job" oder "Schedule" nichts. Das Script steht ja auf Pause, da wird nichts ausgeführt.
Ok, ist dann natürlich doof
Du brauchst also ein Ereignis/Script von außerhalb was wiederum dieses Script neu Startet.
wie könnte das aussehen? Bin ein JS-DAU
Viel interessanter wäre aber warum das Script pausiert. Ich habe das Script nur überflogen, aber irgendetwas wird da nicht so ganz richtig sein.
Ich kann dazu leider nichts sagen. Hab es nur kopiert.
-
gerade diesen Error im Log gefunden.
Ist eventuell hilfreich.2020-01-07 12:00:09.310 - [32minfo[39m: javascript.0 (593) script.js.common.Spritpreisrechner: Start Spritvergleich 2020-01-07 12:00:09.317 - [31merror[39m: javascript.0 (593) Error in callback: TypeError: Cannot read property 'amount' of undefined 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at Object.<anonymous> (script.js.common.Spritpreisrechner:52:107) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at runCallback (timers.js:705:18) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at tryOnImmediate (timers.js:676:5) 2020-01-07 12:00:09.318 - [31merror[39m: javascript.0 (593) at processImmediate (timers.js:658:5)
2020-01-06 12:00:07.441 - [32minfo[39m: javascript.0 (593) script.js.common.Spritpreisrechner: Start Spritvergleich 2020-01-06 12:00:07.456 - [31merror[39m: javascript.0 (593) Error in callback: TypeError: Cannot read property 'amount' of undefined 2020-01-06 12:00:07.457 - [31merror[39m: javascript.0 (593) at Object.<anonymous> (script.js.common.Spritpreisrechner:52:107) 2020-01-06 12:00:07.458 - [31merror[39m: javascript.0 (593) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38) 2020-01-06 12:00:07.459 - [31merror[39m: javascript.0 (593) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25) 2020-01-06 12:00:07.459 - [31merror[39m: javascript.0 (593) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37) 2020-01-06 12:00:07.459 - [31merror[39m: javascript.0 (593) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41) 2020-01-06 12:00:07.460 - [31merror[39m: javascript.0 (593) at runCallback (timers.js:705:18) 2020-01-06 12:00:07.460 - [31merror[39m: javascript.0 (593) at tryOnImmediate (timers.js:676:5) 2020-01-06 12:00:07.460 - [31merror[39m: javascript.0 (593) at processImmediate (timers.js:658:5)
2020-01-05 12:00:08.658 - [32minfo[39m: javascript.0 (7579) script.js.common.Spritpreisrechner: Start Spritvergleich 2020-01-05 12:00:08.669 - [31merror[39m: javascript.0 (7579) Error in callback: TypeError: Cannot read property 'amount' of undefined 2020-01-05 12:00:08.669 - [31merror[39m: javascript.0 (7579) at Object.<anonymous> (script.js.common.Spritpreisrechner:52:107) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at runCallback (timers.js:705:18) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at tryOnImmediate (timers.js:676:5) 2020-01-05 12:00:08.670 - [31merror[39m: javascript.0 (7579) at processImmediate (timers.js:658:5)
Dieser Fehler tritt täglich zur Mittagszeit auf.
-
@Negalein Dann hat eine der Stationen gerade keine Preisinformation (Zeile 52/53). Die sollte das Skript dann bestenfalls ignorieren.
Dazu nach Zeile 18 folgendes einfügen:gasStation = gasStation.filter(g => g.prices.length > 0);
-
@AlCalzone sagte in Script geht zeitweise auf Pause:
Dann hat eine der Stationen gerade keine Preisinformation (Zeile 52/53)
Füge in Zeile 41 folgendes ein:Danke
Werde es beobachten.
-
@Negalein Hab nochmal bearbeitet, bitte beachten
-
@AlCalzone sagte in Script geht zeitweise auf Pause:
Hab nochmal bearbeitet, bitte beachten
Danke
Also
if (gasStation[index].prices.length < 1) continue;
wieder raus
und nach Zeile 18gasStation = gasStation.filter(g => g.prices.length > 0);
rein.
Sieht dann so aus?
var gasStation = JSON.parse(obj.state.val); gasStation = gasStation.filter(g => g.prices.length > 0); if (gasStation.length === 0) return;
-
@Negalein Jup! Allerdings bitte selbst testen, hab ich von unterwegs getippselt.
-
@AlCalzone sagte in Script geht zeitweise auf Pause:
Allerdings bitte selbst testen, hab ich von unterwegs getippselt.
werd es mal ein paar Tage beobachten und mich wieder melden.
Danke erstmal!
-
@AlCalzone sagte in Script geht zeitweise auf Pause:
Allerdings bitte selbst testen, hab ich von unterwegs getippselt.
kurze Rückmeldung!
Bis jetzt ist das Script einwandfrei durchgelaufen!
Danke nochmals
-
gestern ist das Script wieder in Pause gegangen.
Diesmal mit einem anderen Fehler (filter is not a function).
Das ganze ist von 03:26 bis 06:54 (hab nicht alles angehänt, da immer die gleiche Meldung) aufgetreten.Kann man das irgendwie beheben? Oder liegt es an der zu parsenden Seite?
Falls es nicht zu beheben/umgehen ist, gibt es eine Möglichkeit ein Script zu überwachen, damit ich zumindest eine Benachrichtigung auf Telegram/Alexa bekomme?
Danke dir
-
@Negalein sagte in Script geht zeitweise auf Pause:
gestern ist das Script wieder in Pause gegangen.
Jupp, hatte ich Heute auch.
-
-
@ticaki sagte in Script geht zeitweise auf Pause:
Hoffe das hilft.
Danke
Das wird als eigenes Script angelegt?