NEWS
Javascript startet nicht (unsinnige Fehlermeldung)
-
@sigi234 sagte in Javascript startet nicht (unsinnige Fehlermeldung):
@wolfgangfb sagte in Javascript startet nicht (unsinnige Fehlermeldung):
Das Skript habe ich mehrmals gestoppt und wieder gestartet, das Ergebnis bleibt gleich. Was meinst Du mit "stell das ganze mal ein"?
Das komplette Skript
Gerne, aber da die sinnlose Zeile "bla" überhaupt nicht beachtet wird gehe ich davon aus, dass irgendwas nicht aktualisiert wird. "Natürlich" startet das Skript auch dann nicht, wenn ich die Zeile "bla" auskommentiere.
console.log('Skript start'); bla var fs = require('fs'); var VerzeichnisDaten = '/opt/iobroker/Wolfgang/Verbrauch/Heizung/'; const LastValFn = VerzeichnisDaten + 'lastval.txt'; const DatenpunktEnergie = 'alias.0.Raum.Technik.Energy.0.state'; const DatenpunktVerbrauchHeute = 'javascript.0.Verbrauch.Heizung.Heute'; const DatenpunktVerbrauchGestern = 'javascript.0.Verbrauch.Heizung.Gestern'; const DatenpunktZaehlerstandOffiziell = 'javascript.0.Verbrauch.Heizung.ZaehlerstandOffiziell'; const DatenpunktZaehlerstandZwischenzaehler = 'javascript.0.Verbrauch.Heizung.ZaehlerstandZwischenzaehler'; const CrLf = String.fromCharCode(13) + String.fromCharCode(10); const ZaehlerDifferenz = 23976.15 - 89.24; //fs.writeFileSync(LastValFn, '0'); var ZaehlerstandOffiziellkWh; var FileInhalt = fs.readFileSync(LastValFn); //var gg = toString(5); ZaehlerstandOffiziellkWh = toFloat(FileInhalt); var test = ZaehlerstandOffiziellkWh + 5; console.log('test: ' + test); console.log('***' + ZaehlerstandOffiziellkWh); fs.exists(LastValFn, function(exists){ console.log('Datei existiert'); console.log(LastValFn); if (fs.existsSync(LastValFn)){console.log('not exist')} else {console.log('exist')}; //fs.appendFileSync(Fn, 'Waermepumpe' + CrLf); console.log('fff'); function precisionRound(number, precision) { var factor = Math.pow(10, precision); return Math.round(number * factor) / factor; } var TagesverbrauchkWh = getState(DatenpunktVerbrauchHeute).val; // kWh var AnfangswertESPVerbrauchWh = getState(DatenpunktEnergie).val; // Wh var AktuelleZeit = (new Date().getTime()); var SkriptStartTagText = formatDate(AktuelleZeit, 'DD'); var SkriptStartStundeText = formatDate(AktuelleZeit, 'hh'); on({id: DatenpunktEnergie, change: 'any'}, function (obj) { var AktuelleZeit = (new Date().getTime()); var AktuelleZeitText = formatDate(AktuelleZeit, 'DD.MM hh.mm.ss'); var AktuellerTagText = formatDate(AktuelleZeit, 'DD'); var AktuelleStundeText = formatDate(AktuelleZeit, 'hh'); var AktuellesDatum = formatDate(AktuelleZeit, 'DD.MM.YYYY'); var VerbrauchWH = obj.state.val; var ZuwachsWh = VerbrauchWH - AnfangswertESPVerbrauchWh; var ZuwachskWh = ZuwachsWh / 1000; AnfangswertESPVerbrauchWh = VerbrauchWH; TagesverbrauchkWh = TagesverbrauchkWh + ZuwachskWh; ZaehlerstandOffiziellkWh = ZaehlerstandOffiziellkWh + ZuwachskWh; var ZaehlerstandZwischenzaehlerkWh = ZaehlerstandOffiziellkWh - + ZaehlerDifferenz; console.log('ZS ' + ZaehlerstandOffiziellkWh); fs.writeFileSync(LastValFn, ZaehlerstandOffiziellkWh); setState(DatenpunktVerbrauchHeute, TagesverbrauchkWh); setState(DatenpunktZaehlerstandOffiziell, ZaehlerstandOffiziellkWh); setState(DatenpunktZaehlerstandZwischenzaehler, ZaehlerstandZwischenzaehlerkWh); if (AktuellerTagText != SkriptStartTagText){ // neuer Tag beginnt var TagesDatei = VerzeichnisDaten + AktuellesDatum + '.txt'; fs.writeFileSync(TagesDatei, ZaehlerstandOffiziellkWh); setState(DatenpunktVerbrauchGestern, TagesverbrauchkWh); TagesverbrauchkWh = 0; setState(DatenpunktVerbrauchHeute, TagesverbrauchkWh); SkriptStartTagText = AktuellerTagText; } });
Fehler bleibt bei:
13:04:00.541 error javascript.0 (17388) script.js.Verbrauch.Heizung compile failed: at script.js.Verbrauch.Heizung:77
-
Vielleicht kann sich das mal @paul53 ansehen, er ist der Profi.
Verate uns noch mehr von deinen System! JS Version usw...
-
@wolfgangfb sagte: Fehler bleibt bei:
Welche Version des JS-Adapters? Sind globale Skripte aktiv?
Außer der falschen Zeile 2 kann ich nichts entdecken. Sind im Tab "Protokolle" weitere Informationen vorhanden? -
hier gibt es sowas Ähnliches und eine Vermutung ...(hast Du auch diese JS-Adapter Version ?)
https://forum.iobroker.net/topic/53655/warn-mit-javascript-5-5-0
-
in der letzten Zeile(74) fehlt
})
-
Ich habe mal alles bis auf die erste Zeile gelöscht und siehe da, das Skript läuft. Dann Zeile für Zeile das Skript wieder gefüllt und siehe da, an dieser Stelle scheint es zu hängen:
fs.exists(LastValFn, function(exists){ console.log('Datei existiert');
Es kommt wieder die Fehlermeldung, dass in 4 Zeilen hinter dem Ende etwas nicht stimmt und das Wort "exists" ist im Editor durchgestrichen (was auch immer das bedeuten mag).
-
Also wenn ich obiges Skript ausführe steht im ioBroker Log (nicht dem unter dem Skript-Editor) folgendes:
2022-03-23 14:04:23.754 - error: javascript.0 (2080) script.js.Skript_1 compile failed: at script.js.Skript_1:152 2022-03-23 14:04:23.754 - error: javascript.0 (2080) SyntaxError: Unexpected end of input 2022-03-23 14:04:23.754 - error: javascript.0 (2080) at new Script (node:vm:100:7) 2022-03-23 14:04:23.754 - error: javascript.0 (2080) at Object.createScript (node:vm:257:10) 2022-03-23 14:04:23.754 - error: javascript.0 (2080) at createVM (C:\iobroker\node_modules\iobroker.javascript\main.js:1598:28) 2022-03-23 14:04:23.754 - error: javascript.0 (2080) at prepareScript (C:\iobroker\node_modules\iobroker.javascript\main.js:1849:37) 2022-03-23 14:04:23.754 - error: javascript.0 (2080) at C:\iobroker\node_modules\iobroker.javascript\main.js:1950:17 2022-03-23 14:04:23.755 - error: javascript.0 (2080) at Immediate._onImmediate (C:\iobroker\node_modules\iobroker.javascript\main.js:1423:17) 2022-03-23 14:04:23.755 - error: javascript.0 (2080) at processImmediate (node:internal/timers:466:21)
Unexpected end of input
Klingt für mich als wäre fastfoot auf dem richtigen Weg. Das sieht man auch schön wenn man mal ordentlich formatiert, dass das Skript "eingezogen" endet:
Füge ich am Ende
});
ein, kommt eine andere (erwartete) Fehlermeldung:script.js.Skript_1: ReferenceError: bla is not defined
-
@wolfgangfb hast du globale Scripte.. dann ist da dein Fehler.. deshalb der Fehler in zeile 77... die glbalen scripte werden zuerst in jedes Script gehangen.. und deshalb kommt der nicht zu deinem bla hin
-
Nein, ich hatte (bisher) keine globalen Skripte, wusste ehrlich gesagt gar nicht, dass es die gibt, habe aber schon länger nach so etwas gesucht
Ich habe jetzt mal danach gegoogelt und gelesen, dass es eigentlich immer die Ordner "common" und "global" geben sollte. Bei mir existieren die aber nicht. Mit "Neu" tauschen aber "common" und "global" auf. Bisher sind all meine Skripte entweder im Root Verzeichnis oder in darin angelegten Unterordnern.
Ist es sinnvoll, die Skripte alle in Common oder global zu haben? -
@wolfgangfb sagte in Javascript startet nicht (unsinnige Fehlermeldung):
Ist es sinnvoll, die Skripte alle in Common oder global zu haben?
nein!
nur nicht in global, außer du weißt ganz genau was du tust.
Deswegen ist der Ordner auch nur im Expertenmodus zu sehen -
Ich habe mir gedacht, dass ich in "global" Funktionen haben könnte, die ich eigentlich fast immer brauche und deshalb in fast jedem Skript händisch vorne angelegt habe (z.B. Logfunktionen, Stringfunktionen etc.)
Werden die globalen Skripte dann wirklich jedem anderen Skript vorangestellt oder nur dann wenn die Funktion auch aufgerufen wird? -
@wolfgangfb sagte in Javascript startet nicht (unsinnige Fehlermeldung):
wirklich jedem anderen Skript vorangestellt
ja