NEWS
Astrozeit spinnt - Lampen sind zu früh an
-
@bielefelder81
Ich stelle dir mal mein Script ein zum Vergleichen:// Tageszeiten Script function weiter() { // Variablen var vStunde = new Date().getHours(); var vMinute = new Date().getMinutes(); var sunset = getAstroDate("sunset"); var sunrise = getAstroDate("sunrise"); var akt_zeit = 0.01 * vMinute + vStunde; var i_tagesbeginn = 0.01 * parseInt(sunrise.toLocaleTimeString().substr(3,2)) + parseInt(sunrise.toLocaleTimeString().substr(0,2)); var i_tagesende = 0.01 * parseInt(sunset.toLocaleTimeString().substr(3,2)) + parseInt(sunset.toLocaleTimeString().substr(0,2)); var i_mittag = 13.00; // Mittagszeit var v_tageszeit = 'Nacht'; if (akt_zeit < i_tagesende + 2) v_tageszeit = 'Abend'; if (akt_zeit < i_tagesende + 1) v_tageszeit = 'Dämmerung'; if (akt_zeit < i_tagesende) v_tageszeit = 'Nachmittag'; if (akt_zeit < i_mittag + 1) v_tageszeit = 'Mittag'; if (akt_zeit < i_mittag - 1) v_tageszeit = 'Vormittag'; if (akt_zeit < i_tagesbeginn) v_tageszeit = 'Morgengrauen'; if (akt_zeit < i_tagesbeginn - 1) v_tageszeit = 'Frühmorgens'; if (akt_zeit < i_tagesbeginn - 2) v_tageszeit = 'Nacht'; setState('javascript.0.System.System.Tageszeit', v_tageszeit); } schedule("*/10 * * * *", function () { weiter(); });
Überprüfe es mal mit deinem.
Und du prüfst jede Minute; auch hier mal überlegen ob das Sinn bringt. -
@bielefelder81 ok, das passt zu dem was ich da gelesen habe.
Also:
welche "Lampen sind zu früh an"?und wieso spinnt die Astrozeit?
bzw. wo kommt die Astrozeit bei den Lampen ins Spiel?ich sehe da keine Zusammenhänge
-
@homoran Die Lampe1 und Lampe2 im Flur geht zu früh an.
Wie gesagt, ich habe die Skripts nur so bekommen und es funktionierte sonst immer. Ich steige da sowieso nicht durch. Dachte ihr seht das und wisst sofort "Aaah, ja. Das fehlt was..." - Fertig -
Da fehlt ein Wesentlicher Teil im Skript, damit Zeit auch entsprechend Aktualisiert wird.
//Bei Änderung der Zeiten Aktualisieren on({id: '0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenuntergang'}, () => { von = getState('0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenuntergang').val; }) on({id: '0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenaufgang'}, () => { bis = getState('0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenaufgang').val; })
-
@bahnuhr sagte in Astrozeit spinnt - Lampen sind zu früh an:
Überprüfe es mal mit deinem.
wenn es nach dem Nachmittag (solarNoon+60') erst die Abenddämmerung gibt, läuft IMHO alles ok.
-
Hi zusammen, ich habe heute mal wieder das Problem, dass mein Astro Flurlicht Script nicht korrekt funktioniert.
In den Objekten steht als aktuelle Tageszeit "Nachmittag" drin. Dann geht natürlich nicht die Lampe an...
Ich bekomme die Warnung "Astrozeit cannot calculate night, nightend für die Koordinaten".
-
Das Thema
Nacht
wurde im (Beta)-Javascript-Adapter angepackt. Welche Version hast du da? -
@thomas-braun Das kann ich dir leider nicht beantworten. Im Script steht aber sowas wie "Erstellt: 01.06.2015 von Pix"
Der Javascript Adapter ist bei mir 8.3.1 -
Ich spreche aber auch von deinem iobroker.javascript-Adapter...
-
@thomas-braun Habe ich anschließend auch kapiert und oben editiert.
-
@bielefelder81
Möglich das es in 8.3.1 noch nicht drin ist. Ist ganz frischer Code. -
@thomas-braun Aber ich habe an dem Astroscript , dass ich seit ewigen Zeiten nicht geändert habe, nichts geändert...
Es funktionierte ja vorher mit der anderen Javascript Version auch. -
8.4.2 (2024-05-28)
(klein0r) Fixed createState (removed redundant native attributes) (winnyschuster) Fixed astro custom component
-
@thomas-braun Das verstehe ich nicht... Aber ich benutzte bis dato auch nie die Astrofunktion vom Javascript Adapter, soweit ich weiß. Hab damals von jemandem ein Script bekommen und das erstellt unter 0_userdata eigene Datenpunkte für Astro.
-
/* System Tageszeiten Skript meldet Tageszeiten Nacht;Frühmorgens;Morgengrauen;Vormittag;Mittag;Nachmittag;Dämmerung;Abend; Basis: http://www.homematic-inside.de/tecbase/homematic/scriptlibrary/item/tageszeit-in-abschnitte-unterteilen oder hier: https://github.com/ioBroker/ioBroker.javascript#astro--funktion https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#getastrodate erstellt: 01.06.2015 von Pix 18.02.2018 Sonnenaufgang und Sonnenuntergang wird nur noch neu geschrieben wenn die bereits gesetzte Zeit sich von der neuen Unterscheidet 11.12.2015 getAstroDate ermittelt nun auch Sonnenaufgang und Untergang Astrotag (isAstroDay) eingebaut */ /*Variablen erstellen*/ createState('0_userdata.0.Allgemein.Astro.Tageszeit', { name: 'Tageszeit' }); createState('0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenaufgang', { name: 'nächster Sonnenaufgang Uhrzeit', desc: 'sunrise (top edge of the sun appears on the horizon)' }); createState('0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenuntergang', { name: 'nächster Sonnenuntergang Uhrzeit', desc: 'sunset (sun disappears below the horizon, evening civil twilight starts)' }); createState('0_userdata.0.Allgemein.Astro.Tageszeit.Astrotag', false, { read: true, write: true, type: 'boolean', name: 'Astologischer Tag', desc: 'Zeit zwischen Sonnenauf- und untergang' }); let idTageszeit = "0_userdata.0.Allgemein.Astro.Tageszeit", tageszeiten = ['Nacht', 'Morgendämmerung', 'Morgen', 'Vormittag', 'Mittag', 'Nachmittag', 'Abenddämmerung', 'Abend'], idAstrotag = "0_userdata.0.Allgemein.Astro.Tageszeit.Astrotag", idSonnenaufgang = "0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenaufgang", idSonnenuntergang = "0_userdata.0.Allgemein.Astro.Tageszeit.Sonnenuntergang"; function zeiten_speichern () { let astrotag = getState(idAstrotag).val, sonnenaufgang, sonnenuntergang; let today = new Date(); let tomorrow = today.setDate(today.getDate()+1); if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute) sonnenuntergang = getAstroDate('sunset', today), sonnenaufgang = getAstroDate('sunrise', tomorrow); } else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen) sonnenuntergang = getAstroDate('sunset', tomorrow); sonnenaufgang = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate('sunrise', tomorrow) : getAstroDate('sunrise', today); // es ist vor Mitternacht (bzw. vor 23:XXUhr), dann morgen, sonst heute } if(getState(idSonnenaufgang).val != sonnenaufgang){ setState(idSonnenaufgang, sonnenaufgang.toLocaleTimeString('de-DE', { hour12: false })); } if(getState(idSonnenuntergang).val != sonnenuntergang){ setState(idSonnenuntergang, sonnenuntergang.toLocaleTimeString('de-DE', { hour12: false })); } } function neue_tageszeit(abschnitt) { setState(idTageszeit, tageszeiten[parseInt(abschnitt, 10)]); log('neue Tagezeit: ' + tageszeiten[parseInt(abschnitt, 10)], 'info'); zeiten_speichern(); } // Nacht schedule({astro: "night", shift: 120}, function () { neue_tageszeit(0) }); // Morgengdämmerung schedule({astro: "nightEnd"}, function () { neue_tageszeit(1) }); // Morgen schedule({astro: "sunrise"}, function () { neue_tageszeit(2) }); // Vormittag (beginnt 120min vor Sonnenhöchststand) schedule({astro: "solarNoon", shift: -120}, function () { neue_tageszeit(3) }); // Mittag schedule({astro: "solarNoon"}, function () { neue_tageszeit(4) }); // Nachmittag schedule({astro: "solarNoon", shift: 60}, function () { neue_tageszeit(5) }); // Abenddämmerung (nach Sonnenuntergang) schedule({astro: "dusk"}, function () { neue_tageszeit(6) }); // Abend schedule({astro: "night"}, function () { neue_tageszeit(7) }); // Astrotag checken schedule("*/1 * * * *", function () { if (isAstroDay) setState(idAstrotag, true); if (!isAstroDay) setState(idAstrotag, false); zeiten_speichern(); });
Jetzt meldet das Script aber plötzlich, dass "new Date" da das Date nicht existiert.
Unten im Script steht auch "setState(idTageszeit, tageszeiten[parseInt(abschnitt, 10)]);" und dort wird jetzt parseInt als Fehler angezeigt. -
Dann muss der Code dort angeschaut werden. Dein
Problem
dürfte sein, dass es bei dir gerade nicht im astronomischen Sinne Nacht wird. -
ich könnte wetten, die Meldung kommt gegen 00:01 Uhr.
und sie komnt vom js AdapterDa berechnet der Adapter seine aktuellen Astrozeiten, ob jemand sie nutzt oder nicht.
Bielefeld liegt im Moment in der nachtlosen Zone, da kann der Adapter keine astronomische Nacht errechnen.Ab einer der nächsten Versionen wird die Meldung aber unterdrückt werden.
-
@homoran sagte: Da berechnet der Adapter seine aktuellen Astrozeiten, ob jemand sie nutzt oder nicht.
Den Haken kann man in der Konfiguration entfernen.
Im Skript von Pix sehe ich aber die Verwendung von "night" und "nightEnd", die ebenfalls zu einer entsprechenden Warnung führt.