ioBroker Astro-Tageszeit abfragen und in Datenpunkt eintragen

Astro
Lesedauer: 6 Minuten

Jetzt neu: Mit Tageslänge und Mondphase

In ioBroker kannst Du mit den Astro Funktionen eine ganze Menge abfragen. Aber jede Astrozeit immer in jedem Skript abzufragen ist lästig, oder? Richtig! Mit diesem Skript kannst du global alle Werte der Astro Funktion abfragen und in passenden Datenpunkten abspeichern. Das Skript erstellt beim ersten Aufruf automatisch die benötigten Datenpunkte und sollte im common Bereich erstellt werden. Der Aufruf des Skripts geschieht alle 30 Minuten automatisch und kann in der letzten Zeile angepasst werden.
Hier kann es natürlich vorkommen, das die ein oder andere Tageszeit übersprungen wird, da sie nur 2-5 Minuten (gerade im Sommer: Sonnenauf- und untergang innerhalb von 5 Minuten) auseinander liegen. Zusätzlich gibt es 6 Variablen, die den aktuellen Astro – Zustand anzeigen (tageszeitAstro, naechsteTageszeitAstro, tageszeitLesbar, naechsteTageszeitLesbar, aktuelleAstroZeit, Tag). Die Variable Tag steht zwischen Sonnenauf- und untergang auf Tag.

Extra: Bei jedem Durchlauf des Skriptes wird überprüft, ob die eingetragene Uhrzeit bereits vergangen ist. Wenn ja, wird hier schon der Wert für die nächste Zeit dieses Ereignisses gespeichert. Auch bekommst du im Log immer eine Übersicht, wie der aktuelle Durchlauf des Skriptes abgelaufen ist.

Screenshot der verfügbaren Variablen

Screenshot der verfügbaren Variablen

Ausgabe im Log

Log-Ausgabe
Log-Ausgabe

Skript

/*
 * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * Dieses Skript dient zur freien Verwendung in ioBroker zur Erfassung der Astro-Zeiten.
 * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung
 * und Performance entwickelt.
 * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind.
 *
 * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf
 * https://www.kreyenborg.koeln
 * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der,
 * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht!
 * 
 * Ansprüche gegenüber Dritten bestehen nicht. 
 * 
 * Skript Name:     Astro-Zeiten
 * Skript Version:  1.41
 * Erstell-Datum:   01. April 2021 | Update: 23. Dezember 2022
 * 
 */

// Datenpunkte neu erstellen
var ueberschreiben = false;

// Hauptdatenpunkt unterhalb javascript
var datenpunkt = "Astro.";

// Lesbare Zeiten
var lesbare_zeiten = ["Früher Morgen", "Frühe Dämmerung", "Morgendämmerung", "Sonnenaufgang", "Vormittag", "später Vormittag", "Mittag",
    "früher Abend", "Abend", "Sonnenuntergang", "Abenddämmerung", "später Abend", "Nacht", "Mitternacht"];

// Objekte der Astro Zeiten
var objekt = ["nauticalDawn", "nauticalDawn", "dawn", "sunrise", "sunriseEnd", "goldenHourEnd", "solarNoon", "goldenHour",
    "sunsetStart", "sunset", "dusk", "nauticalDusk", "nauticalDusk", "nadir", "tageszeitAstro", "naechsteTageszeitAstro",
    "tageszeitLesbar", "naechsteTageszeitLesbar", "aktuelleAstroZeit", "Tag", "sunriseUnix", "sunsetUnix", "sommerzeit",
    "tageslaenge", "tageslaenge_minuten", "mondphase"];

// Zustände der Astro-Zeiten
var beschreibung = ["00 - Ende der Nacht", "01 - nautische Morgendämmerung", "02 - Morgendämmerung", "03 - Sonnenaufgang",
    "04 - Ende des Sonnenaufgangs", "05 - Ende der goldenen Stunde VM", "06 - Mittag", "07 - goldene Abendstunde",
    "08 - Start des Sonnenuntergangs", "09 - Sonnenuntergang", "10 - Dämmerung Abends", "11 - nautische Dämmerung abends",
    "12 - Start der Nacht", "13 - Mitternacht", "Aktuelle Tageszeit (Astro)", "Nächste Tageszeit (Astro)",
    "Aktuelle Tageszeit (lesbar)", "Nächste Tageszeit (lesbar)", "aktuelle Astrozeit",
    "Solange die Sonne scheint, ist Tag", "Sunrise Unix Zeitstempel", "Sunset Unix Zeitstempel", "Sommerzeit/Winterzeit",
    "Länge des Tages in HH:MM", "Länge des Tages in Minuten", "Aktuelle Mondphase"];

// Suncalc
const suncalc = require('suncalc');

// Erstelle die benötigten Datenpunkte
function datenpunkte_erstellen() {
    var numstatuss = objekt.length;
    let datum = new Date();
    for (var i = 0; i < objekt.length; i++) {
        let initial = "";
        if (i < 14) {
            let astro_zeit = zeit_formatieren(getAstroDate(objekt[i], datum));
            if (astro_zeit == "Invalid Date") {
                astro_zeit = "00:00";
            }
            initial = astro_zeit
        } else {
            initial = "";
        }
        createState(datenpunkt + objekt[i], initial, ueberschreiben, {
            read: true,
            write: true,
            name: beschreibung[i],
            desc: beschreibung[i],
            type: "string",
            role: "value",
            unit: "",
            def: ""
        });
        numstatuss--;
        if (numstatuss === 0) {
            update_astro_zeiten();
        }
    }
    log("Astro: Datenpunkte erstellt!");
}

// Haupt-Skript
function update_astro_zeiten() {
    var datum = new Date();
    var uhrzeit = zeit_formatieren(datum);

    // Zustand der Daten
    var aktuell = 0;
    var aktualisiert = 0;
    var keine_aktualisierung = 0;
    var astro_index = 0;

    // Aktuellen Tagesabschnitt bestimmen
    var ergebnis = -1;
    var naechste_element = false;

    // Aktuelle & kommende Tageszeit
    var aktuelle_tageszeit = 0;
    var kommende_tageszeit = 0;

    // Tag
    var astroTag = "Nacht";

    for (var i = 0; i < 14; i++) {
        // Temporäre Zahl
        var tmp_ergebnis = 0;

        // Hole Uhrzeit aus aktuellem Datenpunkt
        var dp_zeit = getState(datenpunkt + objekt[i]).val;

        // Hole Index aktuelle Tageszeit
        var tmp_time_uhr = Date.parse('1970-01-01 ' + uhrzeit + ':00');
        var tmp_time_dp = Date.parse('1970-01-01 ' + dp_zeit + ':00');

        // Aktuelle Zeit ist kleiner als DP
        if (tmp_time_uhr < tmp_time_dp) {
            tmp_ergebnis = tmp_time_dp - tmp_time_uhr;
            if (tmp_ergebnis <= ergebnis || ergebnis == -1) {
                ergebnis = tmp_ergebnis;
                astro_index = i;
                naechste_element = true;
            }
            // Aktuelle Zeit ist größer als DP
        } else {
            tmp_ergebnis = tmp_time_uhr - tmp_time_dp;
            if (tmp_ergebnis <= ergebnis || ergebnis == -1) {
                ergebnis = tmp_ergebnis;
                astro_index = i;
                naechste_element = false;
            }
        }
        // Datenpunkt ist kleiner als aktuelle Uhrzeit. Update!
        if (dp_zeit < uhrzeit) {
            // Neue Astro-Zeit für den nächsten Tag generieren
            let morgen = new Date();
            morgen.setDate(morgen.getDate() + 1);
            var astro_zeit = zeit_formatieren(getAstroDate(objekt[i], morgen));

            // Datenpunkt und Astro Zeit sind gleich. Kein Update!
            if (dp_zeit == astro_zeit) {
                keine_aktualisierung++;
            } else {
                if (astro_zeit == "Invalid Date") {
                    astro_zeit = "00:00";
                }
                setState(datenpunkt + objekt[i], astro_zeit, true);
                aktualisiert++;
            }
        } else {
            // Zeit kommt noch! Kein Update!
            aktuell++;
        }
    }
    // Wenn wahr, ist der Abstand zum nächsten Zeitpunkt kleiner. Also -1 um aktuellen Index zu erhalten.
    if (naechste_element) {
        astro_index--;
    }

    // Navigiere zum richtigen Index
    if (astro_index > 12) {
        aktuelle_tageszeit = 13;
        kommende_tageszeit = 0;
    } else if (astro_index < 0) {
        aktuelle_tageszeit = 0;
        kommende_tageszeit = 1;
    } else {
        aktuelle_tageszeit = astro_index;
        kommende_tageszeit = astro_index + 1;
    }

    // Prüfe, ob aktuelle Uhrzeit zwischen Sonnenauf- und untergang liegt
    if (astro_index > 2 && astro_index < 10) {
        astroTag = "Tag";
    }

    // Update aktuelle Tageszeit Astro (Text)
    setState(datenpunkt + objekt[14], text_formatieren(beschreibung[aktuelle_tageszeit]), true);

    // Update kommende Tageszeit Astro (Text)
    setState(datenpunkt + objekt[15], text_formatieren(beschreibung[kommende_tageszeit]), true);

    // Update aktuelle Tageszeit lesbar (Text)
    setState(datenpunkt + objekt[16], lesbare_zeiten[aktuelle_tageszeit], true);

    // Update kommende Tageszeit lesbar (Text)
    setState(datenpunkt + objekt[17], lesbare_zeiten[kommende_tageszeit], true);

    // Update aktuelle AstroZeit
    setState(datenpunkt + objekt[18], objekt[aktuelle_tageszeit], true);

    // Setze die Variable "Tag" auf "Tag", wenn Uhrzeit zwischen Sonnenauf- und untergang
    setState(datenpunkt + objekt[19], astroTag, true);

    // Setze Sommerzeit auf Sommerzeit, wenn in Sommerzeit
    setState(datenpunkt + objekt[22], pruefe_sommerzeit(datum), true);

    // Tageslänge berechnen - in Stunden und Minuten
    let laenge = tageslaenge(getAstroDate(objekt[9]), getAstroDate(objekt[3]));
    setState(datenpunkt + objekt[23], laenge.hh_mm, true);
    setState(datenpunkt + objekt[24], laenge.minuten.toString(), true);

    // Mondphase
    let phase = mondphase(datum);
    setState(datenpunkt + objekt[25], phase, true);

    // Setze die Variable Sunrise Unix
    let tmp_morgen = new Date();
    tmp_morgen.setDate(tmp_morgen.getDate() + 1);
    let unix_sunrise = getAstroDate("sunrise", tmp_morgen).getTime() * 1000;
    setState(datenpunkt + objekt[20], unix_sunrise.toString(), true);

    // Setze die Variable Sunset Unix
    let unix_sunset = getAstroDate("sunset", tmp_morgen).getTime() * 1000;
    setState(datenpunkt + objekt[21], unix_sunset.toString(), true);

    var ausgabe = "Astro: Gültige Zeiten: [aktueller Tag: " + aktuell + "] | [nächster Tag: " + keine_aktualisierung + "] | [Aktualisiert: " + aktualisiert +
        "] | Aktuelle Tageszeit: " + lesbare_zeiten[aktuelle_tageszeit] + " | Kommende Tageszeit: " + lesbare_zeiten[kommende_tageszeit];
    log(ausgabe);
}

// Funktion, um die Zeit in HH:MM zu formatieren
function zeit_formatieren(zeit) {
    return zeit.toLocaleTimeString('de-DE', { hour12: false, hour: '2-digit', minute: '2-digit' });
}

// Funktion, um den Text zu formatieren. "Mittag" statt "6 - Mittag"
function text_formatieren(text) {
    text = text.split("-")[1];
    text = text.substr(1, text.length);
    return text;
}

function pruefe_sommerzeit(date = new Date()) {
    const januar = new Date(date.getFullYear(), 0, 1).getTimezoneOffset();
    const juli = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
    let sommerzeit = "";

    if (Math.max(januar, juli) !== date.getTimezoneOffset()) {
        sommerzeit = "Sommerzeit";
    } else {
        sommerzeit = "Winterzeit";
    }
    return sommerzeit;
}

function tageslaenge(endzeit, startzeit) {
    // Basis - Sonnenauf- und Untergang
    var stundeDiff = Math.abs(endzeit.getTime() - startzeit.getTime()) / 1000; //in s
    var hDiff = Math.floor(stundeDiff / 3600) % 24; //in Stunden
    var minDiff = Math.floor(stundeDiff / 60) % 60; //in Minuten
    var lesbar = {};
    lesbar.hh_mm = hDiff + ":" + minDiff;
    lesbar.minuten = (hDiff * 60) + minDiff;
    return lesbar;
}

function mondphase(datum) {
    var mondphase = suncalc.getMoonIllumination(datum);
    var mond = mondphase.phase;

    var status = 'Neumond';

    if (mond > 0.05) status = 'Viertelmond zunehmend';

    if (mond > 0.2) status = 'Halbmond zunehmend';

    if (mond > 0.3) status = 'Dreiviertelmond zunehmend';

    if (mond > 0.45) status = 'Vollmond';

    if (mond > 0.55) status = 'Dreiviertelmond abnehmend';

    if (mond > 0.7) status = 'Halbmond abnehmend';

    if (mond > 0.8) status = 'Viertelmond abnehmend';

    if (mond > 0.95) status = 'Neumond';

    return status;
}

// Erster Start des Skripts und anlegen der Datenpunkte
function update_astro_zeiten_erster_start() {
    log("Astro: Erster Start des Skriptes!")
    // Datenpunkte werden erstellt
    datenpunkte_erstellen();
}

// Erster Start und Initialisierung
update_astro_zeiten_erster_start();

// Alle 60 Minunten das Hauptskript ausführen
schedule('*/30 * * * *', update_astro_zeiten);

Einbindung in VIS

Um nun die aktuelle Tageszeit in VIS anzeigen zu können, kannst Du einfach ein String Widget auf deine View ziehen und den Datenpunkt verknüpfen.

String Widget
String Widget auf der View platzieren

Folgender Datenpunkt wird dem String zugewiesen:

javascript.0.Astro.tageszeitLesbar
Datenpunkt der Tageszeit
Wie hat Dir der Beitrag gefallen?
Bewertung: 5/5 - abgegebene Bewertungen: 2

86 Gedanken zu „ioBroker Astro-Tageszeit abfragen und in Datenpunkt eintragen

  1. Siggi Antworten

    Hallo,

    ich habe gerade auf die neue Version 1.4 aktualisiert.
    Da wird mit eine Zeile als Fehler markiert.

    Dies ist die Zeile 50
    Code: const suncalc = require(‘suncalc’);

    Da wird im Editor folgender Fehler angezeigt:
    Cannot find module ‘suncalc’ or its corresponding type declarations.(2307)

    Ist das richtig so?

  2. Toni Antworten

    Hallo Stephan,

    wie greifst du auf die “Astrofunktion(Länge,Breite)” auf die Systemvariablen des Längen- und Breitengrad zu? Also welche Variablen sind das? Eingetragen sind die bei mir, aber ich kann die Variablen dazu nicht finden – Danke!

    Gruß,
    Toni

  3. Mario Siegmann Antworten

    Hallo Stephan,
    ja, wenn man so drüber nachdenkt, kann das sein.

    Könnte man die Felder dann mit dem Script leeren oder beide Angaben auf 00:00 Uhr setzen?
    Denn, was mich auch wundert, dass die Werte nicht bestätigt sind.

    Dank dir.

  4. Mario Siegmann Antworten

    Hallo,
    ich verwende das Script in der aktuell auf der Seite verfügbaren Version.

    Was ich aktuell sehe,ist, dass die Datenpunkte night und nightEnd nicht aktualisiert werden und auch nicht bestätigt sind (also rote Schrift).
    Ist das normal? Kann das behoben werden?

    Danke.

    • Stephan Autor des BeitragsAntworten

      Hallo Mario,
      Dies kommt in den Sommermonaten schon einmal vor, das die Datenpunkte nicht gefüllt werden, da sie durch die Astro-Funktion nicht verfügbar sind.

      Gruß,
      Stephan

    • Stephan Autor des BeitragsAntworten

      Hallo Sepp,
      seit eben gibt es 2 neue Datenpunkte in dem Skript:
      – tageslaenge: Zeit zwischen Sonnenauf- und untegang
      – tageslaenge_minuten: Wie vorheriger Datenpunkt – nur als Minuten

      Ich hoffe, dies ist, was gewünscht wurde.

      Angenehmes Wochenende!

      Gruß,
      Stephan

  5. Sepp Antworten

    Hallo Stephan,

    super Script. Läuft einwandfrei, und hat mir schon sehr oft geholfen.
    Das einzige was mir fehlt ist die Tageslänge.
    Vielleicht gibts ja mal ein update 🙂

    MfG

    • Stephan Autor des BeitragsAntworten

      Hallo Sepp,
      Du meinst die Länge – wie lang es hell ist – eines Tages in Stunden und Minuten?

      Gruß,
      Stephan

  6. Andreas Koerth Antworten

    Hallo zusammen,
    vielen Dank für das tolle Script,
    leider kommt bei mir direkt eine Fehlermeldung. Hatte das schon mal einer ?
    08:29:24.195 info javascript.0 (35033) Start javascript script.js.common.Astrozeit
    08:29:24.200 error javascript.0 (35033) script.js.common.Astrozeit compile failed: at script.js.common.Astrozeit:35

    Das Script macht dann nicht weiter. Hat einer eine Lösung dafür ?

    • Stephan Autor des BeitragsAntworten

      Hallo Andreas,
      tut mir Leid, wenn Du ein Poblem mit dem Skript hast.
      Fügst Du das Skript als TypeScript oder JavaScript ein?
      Alle Skripte auf dieser Seite sind Javascripts – hier könnte also der Fehler zu suchen sein.
      Bitte prüfe dies einmal.

      Gruß,
      Stephan

  7. Peter Dullmaier Antworten

    Hey,
    Ich stelle jetzt auch noch einmal die Frage:
    Wo kann man den Script anpassen, damit die Datenpunkte unter 0_userdata,=.* erzeugt werden?

    Die Anwort von Dir war ja:
    aufgrund der Sicherheitsrichtlinie, ist es JavaScript Skripten nicht erlaubt, außerhalb des eigenen Ordners zu schreiben – lesen hingegen ist baumübergreifend erlaubt.

    Jetzt wird aber immer wieder empfohlen, dass selbst erstellte Datenpunkte nit mehr unter Javascript abgelegt werden sollen sondern unter 0_userdata.
    Also muss es doch eine Möglichkeit gegeben. Kannst Du mir hierbei weiterhelfen ?

    Gruß PD

    • Stephan Autor des BeitragsAntworten

      Hallo Peter,
      diese Art der benutzerdefinierten Objekte im Ordner 0_userdata ist ein Vorschlag der Community, den man nutzen kann oder eben nicht.
      Zu lesen hier: Link
      Da meine Skripte zum Javascript gehören, legen sie ihre Objekte auch dort an.

      Gruß,
      Stephan

  8. Ilja Antworten

    Hallo Stephan,

    Danke für den Tipp. Fehler gefunden. Die Koordinaten in den ioBroker Einstellungen waren korrekt (s.o. “latitude/longitude sind eingetragen”). Der Javascript Adapter hat diese jedoch nicht übernommen, obwohl “Systemeinstellungen verwenden” angegeben war. Nach manuellem Einstellen der Koordinaten im Javascript Adapter funktioniert es.

    Falls jemand anderes das gleiche Problem hat:
    ioBroker Admin Ver. 5.1.23
    Javascript Adapter Ver. 5.2.8

  9. Ilja Antworten

    Hallo Stephan,
    danke für Dein Script. Ich habe es schon länger ohne Probleme am laufen. Jetzt habe ich einen neuen iobroker aufgesetzt und bekomme nach Ausführen des Scripts (v. 1.21) Warnungen und es werden keine Zeiten in die Datenpunkte eingetragen.
    latitude/longitude sind eingetragen. Hast Du eine Idee, was da schief gelaufen ist?

    00:10:47.853 info javascript.0 (4612) Start javascript script.js.common.Astrozeiten
    00:10:47.870 info javascript.0 (4612) script.js.common.Astrozeiten: Astro: Erster Start des Skriptes!
    00:10:47.871 info javascript.0 (4612) script.js.common.Astrozeiten: Astro: Datenpunkte erstellt!
    00:10:47.880 info javascript.0 (4612) script.js.common.Astrozeiten: registered 0 subscriptions and 1 schedule
    00:10:50.879 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.885 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.893 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.899 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.908 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.916 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.923 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.928 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.934 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.940 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.946 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.951 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.956 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.962 warn javascript.0 (4612) at Object.datenpunkte_fuellen (script.js.common.Astrozeiten:72:9)
    00:10:50.964 info javascript.0 (4612) script.js.common.Astrozeiten: Astro: Erste Datenpunkte gefüllt!
    00:10:52.880 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.884 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.888 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.903 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.907 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.910 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.925 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.930 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.934 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.940 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.947 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.952 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.955 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.959 warn javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:144:17)
    00:10:52.964 error javascript.0 (4612) at Object.update_astro_zeiten (script.js.common.Astrozeiten:195:59)

    Gruß, Ilja

    • Stephan Autor des BeitragsAntworten

      Hallo Ilja,
      Wenn Du einen neuen ioBroker aufgesetzt hast, schaue bitte, ob auch die Koordinaten zum Wohnort richtig eingetragen worden sind.
      Ich denke, hier ist der Fehler zu suchen.

      Oder, der Datenbaum unterhalb Javascript ist nicht beschreibbar.

      Gruß,
      Stephan

  10. Kupka Peter Antworten

    Hallo,
    Danke erstmals für das tolle Script.

    Bei mir zeigt das Script heute um 17:14 “Mittag” an. Mir fehlen die nicht astronomischen Begriffe Vormittag oder Nachmittag. Wie kann ich das in dein Script einbauen.

    Gruß Peter

    • Stephan Autor des BeitragsAntworten

      Hallo Peter,
      Die Werte Vormittag und Nachmittag (früher Abend) sind im Skript vorhanden.
      Das Skript zeigt bei mir aktuell auch Mittag an, da astrologisch noch Mittag ist.

      Gruß,
      Stephan

  11. Karsten Antworten

    Hey da!

    Danke für das tolle Script. Nutze ich bereits seit ca. 6 Monaten.

    Jetzt habe ich allerdings seit ein paar Tagen folgende Fehlermeldung:
    javascript.0 2021-06-06 11:21:35.092 error (5146) Cannot get astro date for “night”
    javascript.0 2021-06-06 11:21:35.088 error (5146) Cannot get astro date for “nightEnd”

    Die beiden Datenpunkte bleiben auf 00:00 Uhr, hat da jemand eine Idee, woran das liegen könnte?!

    MfG
    Karsten

    • Stephan Autor des BeitragsAntworten

      Hallo Karsten,
      etwas über deinem Kommentar habe ich Tim/Klaus geantwortet. Diese Fehlerbehebung hilft auch bei dir 😉

      Gruß,
      Stephan

  12. Mike Antworten

    Hi,

    seit heute hab ich Fehler im Log.
    Sonst noch jemand?

    javascript.0 2021-06-05 19:00:00.022 error (11120) Cannot get astro date for “night”
    javascript.0 2021-06-05 19:00:00.012 error (11120) Cannot get astro date for “nightEnd”

    Gruß
    Mike

    • Stephan Autor des BeitragsAntworten

      Hallo Mike,
      etwas über deinem Kommentar habe ich Tim/Klaus geantwortet. Diese Fehlerbehebung hilft auch bei dir 😉

      Gruß,
      Stephan

  13. Ralph Antworten

    Hallo, super,

    eine Frage für mich als Neuling:
    Die Datenpunkte werden ja unter javascript.0* erzeugt.
    Wie muss ich das Script anpassen um die Datenpunkte unter 0_userdata,=.* erzeugen zukönnen?

    Danke für dein Feedback
    Ralph

    • Stephan Autor des BeitragsAntworten

      Hallo Ralph,
      aufgrund der Sicherheitsrichtlinie, ist es JavaScript Skripten nicht erlaubt, außerhalb des eigenen Ordners zu schreiben – lesen hingegen ist baumübergreifend erlaubt.

      Gruß,
      Stephan

  14. Tim Antworten

    Muss leider auch nochmal was zu dem Fehler fragen:
    “javascript.0 (568) Cannot get astro date for “nightEnd” ”
    “javascript.0 (568) Cannot get astro date for “night” ”

    Ist es möglich, dass man zumindest die Fehlermeldung von Javascript umgeht / abfängt?
    Derzeit kommen alle 30 Minuten diese beiden Fehler im Log.

    Danke und Gruß

    • Stephan Autor des BeitragsAntworten

      Hi Tim,
      als “Work-Around” würde ich folgendes vorschlagen.
      Zeile 34 – 37 wie folgt ersetzen:

      // Objekte der Astro Zeiten
      const objekt = ["nauticalDawn", "nauticalDawn", "dawn", "sunrise", "sunriseEnd", "goldenHourEnd", "solarNoon", "goldenHour",
      "sunsetStart", "sunset", "dusk", "nauticalDusk", "nauticalDusk", "nadir", "tageszeitAstro", "naechsteTageszeitAstro",
      "tageszeitLesbar", "naechsteTageszeitLesbar", "aktuelleAstroZeit", "Tag", "sunriseUnix", "sunsetUnix"];

      In dem Code sind die Elemente “night” und “nightEnd” mit “nauticalDusk” und “nauticalDawn” ersetzt (etwa 5 Minuten Zeitunterschied) worden.

      Somit müsstest Du, wenn du auf “night” oder “nightEnd” verwiesen hast, die nächsten Datenpunkte “nauticalDusk” und “nauticalDawn” verwenden.

      Angenehmes Wochenende!

      Gruß,
      Stephan

      • Tim Antworten

        Danke dir. Nehme es gerne erstmal so 🙂
        Klappt auch.

        Aber du wandelst doch später einen invaliden Wert in 00:00 Uhr um, wieso kommt diese Meldung dann überhaupt?
        Hätte dann gedacht, wenn es keinen Wert gibt, bekommt man halt stattdessen 0 Uhr zurück

        • Stephan Autor des BeitragsAntworten

          Hi Tim,
          die Funktion “getAstroDate” hat leider keine “interne Fehlerbehandlung” – somit loggt sie einfach den Fehler und gibt nicht true/false zurück.

  15. Mike Antworten

    Hi,
    danke für die schnelle Antwort.
    Hab’s mal auf 15 Minuten geändert, hat es aber nicht viel verbessert.
    Ist draußen schon gescheit dunkel wenn der Trigger greift. 🙁

    Danke und Gruß
    Mike

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert