Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Skript - Error Handling

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.4k

Skript - Error Handling

Geplant Angeheftet Gesperrt Verschoben JavaScript
42 Beiträge 6 Kommentatoren 2.9k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • paul53P paul53

    @andreas-5
    Schau mal in folgende Skripte:

    • Steuerung.Dachluke_und_Heizung
    • Steuerung.Licht
    • Überwachung.Zustandsprüfung

    Irgendwo muss das herkommen:

    Astro: Gültige Zeiten: [aktueller Tag: 5] | [nächster Tag: 7] | [Aktualisiert: 2] | Aktuelle Tageszeit: Mittag | Kommende Tageszeit: früher Abend
    

    wobei die letzten beiden Zeiten Astrozeiten sind.

    Hast Du ein Skript unter der Gruppe "global" laufen (Expertenmodus aktivieren)?

    AndreiosA Offline
    AndreiosA Offline
    Andreios
    Forum Testing
    schrieb am zuletzt editiert von
    #33

    @paul53 sagte in Skript - Error Handling:

    @andreas-5
    Schau mal in folgende Skripte:

    • Steuerung.Dachluke_und_Heizung
      schedule("* * * * *"
      Prüft gewisse Bedingungen und schliesst dann ggfs. die Dachluke, auch nichts mit Astro.
    • Steuerung.Licht
      schedule("* * * * *"
      Macht aber nur zu gewissen, teilweise wechselnden, Zeiten etwas, die eben früher teilweise von SS und SR abhängig waren, aber inzwischen umgestellt auf den inzwischen vorhandenen Helligkeitssensor. (z.B. Haustürlicht, Terassenlicht)
    • Überwachung.Zustandsprüfung
      schedule("* * * * *"

    Hast Du ein Skript unter der Gruppe "global" laufen (Expertenmodus aktivieren)?
    Unter global gibt es nur das Astro-Script.

    Schöne Grüße
    Andreas

    ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

    Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

    paul53P 1 Antwort Letzte Antwort
    0
    • AndreiosA Andreios

      @paul53 sagte in Skript - Error Handling:

      @andreas-5
      Schau mal in folgende Skripte:

      • Steuerung.Dachluke_und_Heizung
        schedule("* * * * *"
        Prüft gewisse Bedingungen und schliesst dann ggfs. die Dachluke, auch nichts mit Astro.
      • Steuerung.Licht
        schedule("* * * * *"
        Macht aber nur zu gewissen, teilweise wechselnden, Zeiten etwas, die eben früher teilweise von SS und SR abhängig waren, aber inzwischen umgestellt auf den inzwischen vorhandenen Helligkeitssensor. (z.B. Haustürlicht, Terassenlicht)
      • Überwachung.Zustandsprüfung
        schedule("* * * * *"

      Hast Du ein Skript unter der Gruppe "global" laufen (Expertenmodus aktivieren)?
      Unter global gibt es nur das Astro-Script.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #34

      @andreas-5 sagte: Unter global gibt es nur das Astro-Script.

      Wie sieht das Skript aus?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      AndreiosA 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @andreas-5
        Schau mal in folgende Skripte:

        • Steuerung.Dachluke_und_Heizung
        • Steuerung.Licht
        • Überwachung.Zustandsprüfung

        Irgendwo muss das herkommen:

        Astro: Gültige Zeiten: [aktueller Tag: 5] | [nächster Tag: 7] | [Aktualisiert: 2] | Aktuelle Tageszeit: Mittag | Kommende Tageszeit: früher Abend
        

        wobei die letzten beiden Zeiten Astrozeiten sind.

        Hast Du ein Skript unter der Gruppe "global" laufen (Expertenmodus aktivieren)?

        HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von
        #35

        @paul53 sagte in:

        Irgendwo muss das herkommen:

        das sieht etwas nach dem Tageszeiten Skript aus.
        Das habe ich auch in Verdacht. Da kommt ja auch irgendwann die Nacht, wenn das nicht je nach geographischer Lage abgefangen wird

        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        paul53P 1 Antwort Letzte Antwort
        0
        • HomoranH Homoran

          @paul53 sagte in:

          Irgendwo muss das herkommen:

          das sieht etwas nach dem Tageszeiten Skript aus.
          Das habe ich auch in Verdacht. Da kommt ja auch irgendwann die Nacht, wenn das nicht je nach geographischer Lage abgefangen wird

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #36

          @homoran sagte: das sieht etwas nach dem Tageszeiten Skript aus.

          Ja, und zwar nach dem ursprünglichen, wenn um 18:30 Uhr noch Mittag ist und der Fehler mit "night" noch enthalten ist.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          HomoranH 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @homoran sagte: das sieht etwas nach dem Tageszeiten Skript aus.

            Ja, und zwar nach dem ursprünglichen, wenn um 18:30 Uhr noch Mittag ist und der Fehler mit "night" noch enthalten ist.

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von Homoran
            #37

            @paul53 https://forum.iobroker.net/post/275289

            wenn ich das hier richtig deute wird die Existenz der Nacht im ersten Spoiler geprüft

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            paul53P 1 Antwort Letzte Antwort
            0
            • HomoranH Homoran

              @paul53 https://forum.iobroker.net/post/275289

              wenn ich das hier richtig deute wird die Existenz der Nacht im ersten Spoiler geprüft

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #38

              @homoran sagte: wird die Existenz der Nacht im ersten Spoiler geprüft

              Das ist schon das modifizierte Skript, das auch Vor- und Nachmittag kennt. Da es aber noch Schedule auf "night" enthält, erzeugt es Warnungen.

              Auf keinen Fall darf das Skript unter der Gruppe "global" laufen!!
              Wenn es unter "global" läuft, erklärt es, warum die Error-Meldungen 6 mal hintereinander erscheinen.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @andreas-5 sagte: Unter global gibt es nur das Astro-Script.

                Wie sieht das Skript aus?

                AndreiosA Offline
                AndreiosA Offline
                Andreios
                Forum Testing
                schrieb am zuletzt editiert von
                #39

                @paul53 sagte in Skript - Error Handling:

                @andreas-5 sagte: Unter global gibt es nur das Astro-Script.

                Wie sieht das Skript aus?

                /*
                 * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
                 *
                 * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
                 *
                 * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
                 * 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.21
                 * Erstell-Datum:   13. Mai 2021
                 *
                 */
                 
                // 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 = ["nightEnd", "nauticalDawn", "dawn", "sunrise", "sunriseEnd", "goldenHourEnd", "solarNoon", "goldenHour",
                    "sunsetStart", "sunset", "dusk", "nauticalDusk", "night", "nadir", "tageszeitAstro", "naechsteTageszeitAstro",
                    "tageszeitLesbar", "naechsteTageszeitLesbar", "aktuelleAstroZeit", "Tag", "sunriseUnix", "sunsetUnix"];
                 
                // 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"];
                 
                // Erstelle die benötigten Datenpunkte
                function datenpunkte_erstellen() {
                    for (var i = 0; i < objekt.length; i++) {
                        createState(datenpunkt + objekt[i], "", ueberschreiben, {
                            name: beschreibung[i],
                            desc: beschreibung[i],
                            type: "string",
                            role: "value",
                            unit: ""
                        });
                    }
                    log("Astro: Datenpunkte erstellt!");
                }
                 
                // Datenpunkte mit erstem Inhalt füllen
                function datenpunkte_fuellen() {
                    for (var i = 0; i < objekt.length - 8; i++) {
                        var datum = new Date();
                        try {
                            var astro_zeit = zeit_formatieren(getAstroDate(objekt[i], datum));
                        } catch (e) {
                             // Fehler Kontrolle
                        }
                        if (astro_zeit == "Invalid Date") {
                            astro_zeit = "00:00";
                        }
                        setState(datenpunkt + objekt[i], astro_zeit);
                    }
                    log("Astro: Erste Datenpunkte gefüllt!");
                }
                 
                // 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 < objekt.length - 8; 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);
                            try {
                                var astro_zeit = zeit_formatieren(getAstroDate(objekt[i], morgen));
                            } catch (e) {
                                // Fehler Kontrolle
                            }
                            // 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);
                                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]));
                 
                    // Update kommende Tageszeit Astro (Text)
                    setState(datenpunkt + objekt[15], text_formatieren(beschreibung[kommende_tageszeit]));
                 
                    // Update aktuelle Tageszeit lesbar (Text)
                    setState(datenpunkt + objekt[16], lesbare_zeiten[aktuelle_tageszeit]);
                 
                    // Update kommende Tageszeit lesbar (Text)
                    setState(datenpunkt + objekt[17], lesbare_zeiten[kommende_tageszeit]);
                 
                    // Update aktuelle AstroZeit
                    setState(datenpunkt + objekt[18], objekt[aktuelle_tageszeit]);
                 
                    // Setze die Variable "Tag" auf "Tag", wenn Uhrzeit zwischen Sonnenauf- und untergang
                    setState(datenpunkt + objekt[19], astroTag);
                 
                    // 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());
                 
                    // Setze die Variable Sunset Unix
                    let unix_sunset = getAstroDate("sunset", tmp_morgen).getTime() * 1000;
                    setState(datenpunkt + objekt[21], unix_sunset.toString());
                 
                    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;
                }
                 
                // 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();
                 
                    // erstes Füllen der Datenpunkte um 3 Sek. verzögert
                    setTimeout(datenpunkte_fuellen, 3000);
                 
                    // Das Update der Zeiten ist um 5 Sek. verzögert
                    setTimeout(update_astro_zeiten, 5000);
                }
                 
                // Erster Start und Initialisierung
                update_astro_zeiten_erster_start();
                 
                // Alle 60 Minunten das Hauptskript ausführen
                schedule('*/30 * * * *', update_astro_zeiten);
                

                Warum ich das in global geschoben habe, weiß ich nicht mehr. Ich würde davon ausgehen, dass ich das irgendwo gelesen habe.
                Aber das war schon zu meinen ioBroker-Anfangszeiten, ... ;-)

                Ich habe es jetzt in common verschoben, mal sehen, was passiert.

                Schöne Grüße
                Andreas

                ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

                Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

                paul53P 1 Antwort Letzte Antwort
                0
                • AndreiosA Andreios

                  @paul53 sagte in Skript - Error Handling:

                  @andreas-5 sagte: Unter global gibt es nur das Astro-Script.

                  Wie sieht das Skript aus?

                  /*
                   * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
                   *
                   * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
                   *
                   * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
                   * 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.21
                   * Erstell-Datum:   13. Mai 2021
                   *
                   */
                   
                  // 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 = ["nightEnd", "nauticalDawn", "dawn", "sunrise", "sunriseEnd", "goldenHourEnd", "solarNoon", "goldenHour",
                      "sunsetStart", "sunset", "dusk", "nauticalDusk", "night", "nadir", "tageszeitAstro", "naechsteTageszeitAstro",
                      "tageszeitLesbar", "naechsteTageszeitLesbar", "aktuelleAstroZeit", "Tag", "sunriseUnix", "sunsetUnix"];
                   
                  // 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"];
                   
                  // Erstelle die benötigten Datenpunkte
                  function datenpunkte_erstellen() {
                      for (var i = 0; i < objekt.length; i++) {
                          createState(datenpunkt + objekt[i], "", ueberschreiben, {
                              name: beschreibung[i],
                              desc: beschreibung[i],
                              type: "string",
                              role: "value",
                              unit: ""
                          });
                      }
                      log("Astro: Datenpunkte erstellt!");
                  }
                   
                  // Datenpunkte mit erstem Inhalt füllen
                  function datenpunkte_fuellen() {
                      for (var i = 0; i < objekt.length - 8; i++) {
                          var datum = new Date();
                          try {
                              var astro_zeit = zeit_formatieren(getAstroDate(objekt[i], datum));
                          } catch (e) {
                               // Fehler Kontrolle
                          }
                          if (astro_zeit == "Invalid Date") {
                              astro_zeit = "00:00";
                          }
                          setState(datenpunkt + objekt[i], astro_zeit);
                      }
                      log("Astro: Erste Datenpunkte gefüllt!");
                  }
                   
                  // 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 < objekt.length - 8; 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);
                              try {
                                  var astro_zeit = zeit_formatieren(getAstroDate(objekt[i], morgen));
                              } catch (e) {
                                  // Fehler Kontrolle
                              }
                              // 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);
                                  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]));
                   
                      // Update kommende Tageszeit Astro (Text)
                      setState(datenpunkt + objekt[15], text_formatieren(beschreibung[kommende_tageszeit]));
                   
                      // Update aktuelle Tageszeit lesbar (Text)
                      setState(datenpunkt + objekt[16], lesbare_zeiten[aktuelle_tageszeit]);
                   
                      // Update kommende Tageszeit lesbar (Text)
                      setState(datenpunkt + objekt[17], lesbare_zeiten[kommende_tageszeit]);
                   
                      // Update aktuelle AstroZeit
                      setState(datenpunkt + objekt[18], objekt[aktuelle_tageszeit]);
                   
                      // Setze die Variable "Tag" auf "Tag", wenn Uhrzeit zwischen Sonnenauf- und untergang
                      setState(datenpunkt + objekt[19], astroTag);
                   
                      // 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());
                   
                      // Setze die Variable Sunset Unix
                      let unix_sunset = getAstroDate("sunset", tmp_morgen).getTime() * 1000;
                      setState(datenpunkt + objekt[21], unix_sunset.toString());
                   
                      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;
                  }
                   
                  // 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();
                   
                      // erstes Füllen der Datenpunkte um 3 Sek. verzögert
                      setTimeout(datenpunkte_fuellen, 3000);
                   
                      // Das Update der Zeiten ist um 5 Sek. verzögert
                      setTimeout(update_astro_zeiten, 5000);
                  }
                   
                  // Erster Start und Initialisierung
                  update_astro_zeiten_erster_start();
                   
                  // Alle 60 Minunten das Hauptskript ausführen
                  schedule('*/30 * * * *', update_astro_zeiten);
                  

                  Warum ich das in global geschoben habe, weiß ich nicht mehr. Ich würde davon ausgehen, dass ich das irgendwo gelesen habe.
                  Aber das war schon zu meinen ioBroker-Anfangszeiten, ... ;-)

                  Ich habe es jetzt in common verschoben, mal sehen, was passiert.

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #40

                  @andreas-5 sagte: in common verschoben, mal sehen, was passiert.

                  Die Error-Logs werden nur noch einmal alle 30 Minuten erfolgen, denn es enthält "night" und "nightEnd".
                  Das Skript kannte ich noch nicht.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  AndreiosA 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @andreas-5 sagte: in common verschoben, mal sehen, was passiert.

                    Die Error-Logs werden nur noch einmal alle 30 Minuten erfolgen, denn es enthält "night" und "nightEnd".
                    Das Skript kannte ich noch nicht.

                    AndreiosA Offline
                    AndreiosA Offline
                    Andreios
                    Forum Testing
                    schrieb am zuletzt editiert von
                    #41

                    @paul53 sagte in Skript - Error Handling:

                    @andreas-5 sagte: in common verschoben, mal sehen, was passiert.

                    Die Error-Logs werden nur noch einmal alle 30 Minuten erfolgen, denn es enthält "night" und "nightEnd".
                    Das Skript kannte ich noch nicht.

                    Genau, die kommen also, wie bisher auch, alle 30 Minuten!
                    Und jetzt habe ich es überhaupt erst kapiert, dass es das Script selber ist. Das war das einzige Script, was ich mir noch nicht angesehen hatte, halt weil es auch noch versteckt war, da ich den Expertenmodus bisher fast nie genutzt habe. Auch gestern habe ich es nur "blind" rüber kopiert.
                    Wie schon gesagt, hatte ich mir das ganz zu Anfang gesucht und ich war immer davon ausgegangen, dass das bei Bedarf von den anderen Scripten aufgerufen wird, habe aber nicht wirklich darüber nachgedacht, dass da ja nur Datenpunkte genutzt werden. Das schedue am Ende war mir nicht bewusst.

                    Nun werde ich mir das Script in Ruhe ansehen und erst einmal alles auskommentieren, was nicht mit SR und SS zu tun hat. Bleibt wahrscheinlich nicht viel übrig.

                    Danke Euch für die Unterstützung und ich folgere aus dem Ganzen, dass ich mich viel öfter und intensiver mit dem ioBroker beschäftigen muss!

                    Schöne Grüße
                    Andreas

                    ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

                    Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

                    HomoranH 1 Antwort Letzte Antwort
                    0
                    • AndreiosA Andreios

                      @paul53 sagte in Skript - Error Handling:

                      @andreas-5 sagte: in common verschoben, mal sehen, was passiert.

                      Die Error-Logs werden nur noch einmal alle 30 Minuten erfolgen, denn es enthält "night" und "nightEnd".
                      Das Skript kannte ich noch nicht.

                      Genau, die kommen also, wie bisher auch, alle 30 Minuten!
                      Und jetzt habe ich es überhaupt erst kapiert, dass es das Script selber ist. Das war das einzige Script, was ich mir noch nicht angesehen hatte, halt weil es auch noch versteckt war, da ich den Expertenmodus bisher fast nie genutzt habe. Auch gestern habe ich es nur "blind" rüber kopiert.
                      Wie schon gesagt, hatte ich mir das ganz zu Anfang gesucht und ich war immer davon ausgegangen, dass das bei Bedarf von den anderen Scripten aufgerufen wird, habe aber nicht wirklich darüber nachgedacht, dass da ja nur Datenpunkte genutzt werden. Das schedue am Ende war mir nicht bewusst.

                      Nun werde ich mir das Script in Ruhe ansehen und erst einmal alles auskommentieren, was nicht mit SR und SS zu tun hat. Bleibt wahrscheinlich nicht viel übrig.

                      Danke Euch für die Unterstützung und ich folgere aus dem Ganzen, dass ich mich viel öfter und intensiver mit dem ioBroker beschäftigen muss!

                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #42

                      @andreas-5 sagte in Skript - Error Handling:

                      ich war immer davon ausgegangen, dass das bei Bedarf von den anderen Scripten aufgerufen wird

                      globale Skripte werden vor jedem Skript ausgeführt, nich bei "Bedarf" aufgerufen

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      652

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe