NEWS
Zeitbasiertes Script läuft nicht
-
Ach, du möchtest eine Antwort? Kannst du vielleicht etwas mehr Informationen liefern? Wie sieht das Script aus? Und was heisst "funktioniert nur im Test"?
-
'* * * * *'//Kilometerstand var kmStand = getState('vw-connect.0.WVWZZZ3CZHE064639.status.data_0x0203FFFFFF.field_0x0203010002.milCarSent'/*milCarSent*/).val; var km = kmStand - 75582; function setzeWert(){ setState('javascript.0.Eigene.gefahreneKM',km/*kmStand*/) } //Anzahl Tage im Jahr 2021 var endDate = new Date(); var startDate = new Date(2021, 0, 1, 0, 0, 0); var differenz = Math.round((endDate.getTime() - startDate.getTime())/86400000); function setzeWertTage(){ setState('javascript.0.Eigene.days',differenz/*days*/) } //gefahrene Kilometer pro Tag var kmTag = Math.round(km / differenz); function setzeWertkmTag(){ setState('javascript.0.Eigene.kmProTag',kmTag/*kmProTag*/) } //Hochrechung aufs Jahr var kmJahr = kmTag * 365 function setzeWertkmJahr(){ setState('javascript.0.Eigene.kmJahr',kmJahr/*kmJahr*/) } //kWh pro Tag var kWhJahr = getState('sourceanalytix.0.fritzdect__0__DECT200_116300037014__power.currentYear.consumed.05_currentYear'/*05 currentYear*/).val; var kWhTag = kWhJahr / differenz var kWhTagR = kWhTag.toFixed(2); function setzeWertkWhTag(){ setState('javascript.0.Eigene.kWhProTag',kWhTagR/*kWhJahr*/) } //Daten in die Datenbank schreiben setzeWertTage(); setzeWertkmTag(); setzeWert(); setzeWertkmJahr(); setzeWertkWhTag();
Der obere Code hat noch einen Zeitplan. Vorher hatte ich die untere Funktion benutzt. Solange ich auf der iobroker Oberfläche war hat er auch zu den Zeiten das Script ausgeführt.
schedule({hour: 20, minute: 48}, function () { setzeWertTage(); } );
gerade habe ich alle Scripte neu gestartet und dann wurden auch die Werte in die DB geschrieben
-
@MatthiaB Kam denn um 20:48 eine Fehlermeldung?
Was meinst du mit dem folgenden?
Der obere Code hat noch einen Zeitplan. Vorher hatte ich die untere Funktion benutzt. Solange ich auf der iobroker Oberfläche war hat er auch zu den Zeiten das Script ausgeführt.
Setze doch mal den Schedule auf
{ hour: 15, minute: 50 }
und schaue, ob es ausgeführt wird.
Und vielleicht machst du noch ein Log in die Funktion, damit nicht etwa das "setState()" das Problem ist. -
ich haben nun folgendes gemacht:
schedule({hour: 16, minute: 5}, function () {
setzeWertTage();
setzeWertkmTag();
setzeWert();
setzeWertkmJahr();
setzeWertkWhTag();console.log ('erledigt');
} );
im Log
javascript.0 2021-01-07 16:05:00.015 info (24041) script.js.common.Test.GTE-KM_Stand: erledigt
Die Daten wurden korrekt ermittelt.
Bei den Scripten gibt es rechts eine Uhr. Da kann man auch Zeitpläne erstellen.
Es kann doch nicht daran liegen das ich das Web-Fenster des iobroker schließe oder?
-
habe es mal umgestellt:
schedule("* * * * *", function () {
setzeWertTage();
setzeWertkmTag();
setzeWert();
setzeWertkmJahr();
setzeWertkWhTag();console.log ('erledigt');
} );
laut log wird die Funktion jede Minute ausgeführt.
Ich prüfe das mal morgen wieder.
-
@MatthiaB sagte in Zeitbasiertes Script läuft nicht:
Bei den Scripten gibt es rechts eine Uhr. Da kann man auch Zeitpläne erstellen.
Es kann doch nicht daran liegen das ich das Web-Fenster des iobroker schließe oder?Kann ich mir nicht vorstellen. Das ist ja nur ein Tool, das dir den entsprechenden Cron Ausdruck generiert. Das hat nicht mit der Ausführung von Scripts zu tun. Aber speichern musst du natürlich schon
-
ja ich glaube ich habe das Tool nicht korrekt benutzt.
-
hi,
mein Script liefert schön jede Stunde einen Logeintrag, aber ändert keine Daten in der Datenbank.
Ich glaube weil sich die Werte nicht aktualisieren im Script. Die Variablen sind ja gesetzt.
Die shedule-Funktion setzt ja nur die Werte. Die Berechnung läuft woanders ab. Und dort werden keine neuen Werte gezogen...
-
@MatthiaB Ja, dann musst du natürlich jedes mal auch noch rechnen. Sonst bringt es sehr wenig
-
Hi,
mein Script läuft nun, allerdings ist bei dem ein neuer Tag erst um 12 Uhr nicht um 0 Uhr...