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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [Gelöst] Quelle für Anzahl der Sonnenstunden?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    254

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[Gelöst] Quelle für Anzahl der Sonnenstunden?

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
21 Beiträge 8 Kommentatoren 799 Aufrufe 4 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.
  • T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von
    #5

    Jo das sollte im brightsky drin sein

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    1 Antwort Letzte Antwort
    1
    • BananaJoeB BananaJoe

      Lösung: Dieser Adapter hier: https://forum.iobroker.net/topic/81967/betatest-bright-sky-v0-6-x

      Original Post:

      Ich musste am Wochenende meine Integration per daswetter Adapter beenden.
      Ich habe nun auf den OpenWeatherMap-Adapter umgestellt und das klappt sehr gut,
      die Mondphasen haben ich gerade per Skript wieder hinzugefügt ( https://forum.iobroker.net/topic/80342/skript-für-mondphase-mondauf-und-untergang )

      Jetzt würden mir noch 2 1 Werte fehlen die den ich bisher über DasWetter bekommen hatte:

      • Uhrzeit des Sonnenhöchststand
      • Anzahl der Sonnenstunden (die Prognose, nicht einfach errechnet)

      Hätte da jemand eine Idee?

      Den Höchststand habe ich gerade dann doch im FollowTheSun Adapter gefunden:

      followthesun.0.short term.today.solarnoon_time
      
      bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von bahnuhr
      #6

      @bananajoe
      Würde dir das Script von hier:
      https://www.kreyenborg.koeln
      helfen?

      Das Script bei mir:

      
      // * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
      // * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
      // * https://www.kreyenborg.koeln
      // * 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 = "javascript.0.System.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(), uhrzeit = zeit_formatieren(datum);
          // Zustand der Daten
              var aktuell = 0, aktualisiert = 0, keine_aktualisierung = 0, astro_index = 0;
          // Aktuellen Tagesabschnitt bestimmen
              var ergebnis = -1, naechste_element = false;
          // Aktuelle & kommende Tageszeit
              var aktuelle_tageszeit = 0, 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_beleuch = mondphase.fraction; var mond = mondphase.phase; var status = 'Neumond'; 
          if (mond > 0.05) status = parseInt(mond_beleuch*100) + '% 1/4 Mond zunehmend';
          if (mond > 0.2) status = parseInt(mond_beleuch*100) + '% 1/2 Mond zunehmend';
          if (mond > 0.3) status = parseInt(mond_beleuch*100) + '% 3/4 Mond zunehmend';
          if (mond > 0.45) status = parseInt(mond_beleuch*100) + '% Vollmond';
          if (mond > 0.55) status = parseInt(mond_beleuch*100) + '% 3/4 Mond abnehmend';
          if (mond > 0.7) status = parseInt(mond_beleuch*100) + '% 1/2 Mond abnehmend';
          if (mond > 0.8) status = parseInt(mond_beleuch*100) + '% 1/4 Mond abnehmend';
          if (mond > 0.95) status = parseInt(mond_beleuch*100) + '% 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);
      
      
      

      Sieht in Vis dann so aus:
      ed1dab1b-a795-4226-8d22-3e89cc279e2a-image.png

      Und die Zeiten dann halt ausrechnen.


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      Ro75R 1 Antwort Letzte Antwort
      0
      • bahnuhrB bahnuhr

        @bananajoe
        Würde dir das Script von hier:
        https://www.kreyenborg.koeln
        helfen?

        Das Script bei mir:

        
        // * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
        // * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
        // * https://www.kreyenborg.koeln
        // * 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 = "javascript.0.System.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(), uhrzeit = zeit_formatieren(datum);
            // Zustand der Daten
                var aktuell = 0, aktualisiert = 0, keine_aktualisierung = 0, astro_index = 0;
            // Aktuellen Tagesabschnitt bestimmen
                var ergebnis = -1, naechste_element = false;
            // Aktuelle & kommende Tageszeit
                var aktuelle_tageszeit = 0, 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_beleuch = mondphase.fraction; var mond = mondphase.phase; var status = 'Neumond'; 
            if (mond > 0.05) status = parseInt(mond_beleuch*100) + '% 1/4 Mond zunehmend';
            if (mond > 0.2) status = parseInt(mond_beleuch*100) + '% 1/2 Mond zunehmend';
            if (mond > 0.3) status = parseInt(mond_beleuch*100) + '% 3/4 Mond zunehmend';
            if (mond > 0.45) status = parseInt(mond_beleuch*100) + '% Vollmond';
            if (mond > 0.55) status = parseInt(mond_beleuch*100) + '% 3/4 Mond abnehmend';
            if (mond > 0.7) status = parseInt(mond_beleuch*100) + '% 1/2 Mond abnehmend';
            if (mond > 0.8) status = parseInt(mond_beleuch*100) + '% 1/4 Mond abnehmend';
            if (mond > 0.95) status = parseInt(mond_beleuch*100) + '% 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);
        
        
        

        Sieht in Vis dann so aus:
        ed1dab1b-a795-4226-8d22-3e89cc279e2a-image.png

        Und die Zeiten dann halt ausrechnen.

        Ro75R Offline
        Ro75R Offline
        Ro75
        schrieb am zuletzt editiert von
        #7

        @bahnuhr es geht zumindest für mich darum, wie lange heute die Sonne insgesamt zu sehen ist und nicht von Wolken verdeckt. Für mich ist die Differenz zwischen Sonnenauf- und Untergang uninteressant.

        Ro75.

        SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

        bahnuhrB 1 Antwort Letzte Antwort
        0
        • Ro75R Ro75

          @bahnuhr es geht zumindest für mich darum, wie lange heute die Sonne insgesamt zu sehen ist und nicht von Wolken verdeckt. Für mich ist die Differenz zwischen Sonnenauf- und Untergang uninteressant.

          Ro75.

          bahnuhrB Online
          bahnuhrB Online
          bahnuhr
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #8

          @ro75

          Alles klar.
          Dann kauf dir einen HM Sonnensensor und loggen die Zeiten die über x sind.
          Das von heute:
          4533d5c6-7867-4428-acf5-d5274bac119a-image.png


          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
          Danke.
          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
          ScreenToGif :https://www.screentogif.com/downloads.html

          Ro75R HomoranH 2 Antworten Letzte Antwort
          0
          • bahnuhrB bahnuhr

            @ro75

            Alles klar.
            Dann kauf dir einen HM Sonnensensor und loggen die Zeiten die über x sind.
            Das von heute:
            4533d5c6-7867-4428-acf5-d5274bac119a-image.png

            Ro75R Offline
            Ro75R Offline
            Ro75
            schrieb am zuletzt editiert von
            #9

            @bahnuhr naja, ich möchte früh wissen, was ich erwarten kann und nicht erst abends sehen was war. Bei daswetter.com lief das sehr sehr gut - nur eben Geschichte.

            Ro75.

            SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

            bahnuhrB 1 Antwort Letzte Antwort
            0
            • bahnuhrB bahnuhr

              @ro75

              Alles klar.
              Dann kauf dir einen HM Sonnensensor und loggen die Zeiten die über x sind.
              Das von heute:
              4533d5c6-7867-4428-acf5-d5274bac119a-image.png

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

              @bahnuhr sagte in Quelle für Anzahl der Sonnenstunden?:

              loggen die Zeiten die über x sind.

              daa kann man in der Wetterstation sogar konfigurieren und wird dann in eine SysVar geschrieben.

              Nachteil ist aber dass das nicht als Prognose geht ;-) .

              kein Support per PN! - Fragen im Forum stellen -
              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              1 Antwort Letzte Antwort
              0
              • Ro75R Ro75

                @bahnuhr naja, ich möchte früh wissen, was ich erwarten kann und nicht erst abends sehen was war. Bei daswetter.com lief das sehr sehr gut - nur eben Geschichte.

                Ro75.

                bahnuhrB Online
                bahnuhrB Online
                bahnuhr
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #11

                @ro75
                Naja, das war der 2. Versuch.
                Jetzt fällt mir nix mehr ein.

                Prognose mag ich nicht.
                Stimmt sowieso nicht.


                Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                Danke.
                gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                ScreenToGif :https://www.screentogif.com/downloads.html

                Ro75R 1 Antwort Letzte Antwort
                0
                • bahnuhrB bahnuhr

                  @ro75
                  Naja, das war der 2. Versuch.
                  Jetzt fällt mir nix mehr ein.

                  Prognose mag ich nicht.
                  Stimmt sowieso nicht.

                  Ro75R Offline
                  Ro75R Offline
                  Ro75
                  schrieb am zuletzt editiert von
                  #12

                  @bahnuhr Danke für die Ideen, definitiv. Aber das ist eben nicht was wir da suchen.

                  Ro75.

                  SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                  T 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    die dwd api scheint diese informationen enthalten

                    6afc0bda-e881-49a7-b3e5-4bff00b0bd14-image.png

                    https://dwd.api.bund.dev/
                    https://dwd.api.proxy.bund.dev/v30/stationOverviewExtended?stationIds=10865,G005

                    dieeinzelwerte sind nicht so gut dokumentiert.
                    hier steht ein wenig dazu
                    https://github.com/bundesAPI/dwd-api

                    BananaJoeB Online
                    BananaJoeB Online
                    BananaJoe
                    Most Active
                    schrieb am zuletzt editiert von BananaJoe
                    #13

                    @oliverio sagte in Quelle für Anzahl der Sonnenstunden?:

                    die dwd api scheint diese informationen enthalten

                    6afc0bda-e881-49a7-b3e5-4bff00b0bd14-image.png

                    https://dwd.api.bund.dev/
                    https://dwd.api.proxy.bund.dev/v30/stationOverviewExtended?stationIds=10865,G005

                    dieeinzelwerte sind nicht so gut dokumentiert.
                    hier steht ein wenig dazu
                    https://github.com/bundesAPI/dwd-api

                    Könnte klappen:
                    3841aa3f-9dec-4732-ad44-4466f655f635-image.png

                    Das weist du woher das G005 kommt bzw. wofür das steht?
                    Für eine Station ID, Berlin-Marzahn ..

                    Laut dieser Seite wäre Achim bei Bremen 8373:
                    https://www.dwd.de/DE/leistungen/klimadatendeutschland/statliste/statlex_html.html?view=nasPublication&nn=16102

                    Ich hadere gerade wie denn die URL aussehen muss

                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    1 Antwort Letzte Antwort
                    0
                    • BananaJoeB Online
                      BananaJoeB Online
                      BananaJoe
                      Most Active
                      schrieb am zuletzt editiert von
                      #14

                      Ok, Berlin-Marzan, vermutlich: Da kommt nur eine Zahl an die URL, man kann mehrere angeben.

                      https://dwd.api.proxy.bund.dev/v30/stationOverviewExtended?stationIds=G005

                      Jetzt muss ich nur eine in der Nähe finden

                      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                      1 Antwort Letzte Antwort
                      0
                      • BananaJoeB Online
                        BananaJoeB Online
                        BananaJoe
                        Most Active
                        schrieb am zuletzt editiert von BananaJoe
                        #15

                        Ok, viele Station sind wohl nicht abrufbar wegen nicht mehr da etc., in der letzten Spalte steht ein Datum, alles was länger her ist funktioniert nicht. Alles mit einem aktuellen Datum auch nicht immer.
                        Ich habe jetzt eine in Bremen gefunden:
                        52555305-0191-4d17-85f7-3cf0a2a2737c-image.png
                        https://dwd.api.proxy.bund.dev/v30/stationOverviewExtended?stationIds=10224

                        Demnach hatten wir heute 1590 * 0,1 min = 159 Minuten Sonnenschein? 2,5h
                        Meine Solaranlage brummte so richtig von 11:30 bis ca. 15:00, also 3,5h,
                        Naja, kommt in etwa hin und es sind ja 20km weiter

                        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                        1 Antwort Letzte Antwort
                        0
                        • BananaJoeB BananaJoe

                          Lösung: Dieser Adapter hier: https://forum.iobroker.net/topic/81967/betatest-bright-sky-v0-6-x

                          Original Post:

                          Ich musste am Wochenende meine Integration per daswetter Adapter beenden.
                          Ich habe nun auf den OpenWeatherMap-Adapter umgestellt und das klappt sehr gut,
                          die Mondphasen haben ich gerade per Skript wieder hinzugefügt ( https://forum.iobroker.net/topic/80342/skript-für-mondphase-mondauf-und-untergang )

                          Jetzt würden mir noch 2 1 Werte fehlen die den ich bisher über DasWetter bekommen hatte:

                          • Uhrzeit des Sonnenhöchststand
                          • Anzahl der Sonnenstunden (die Prognose, nicht einfach errechnet)

                          Hätte da jemand eine Idee?

                          Den Höchststand habe ich gerade dann doch im FollowTheSun Adapter gefunden:

                          followthesun.0.short term.today.solarnoon_time
                          
                          H Offline
                          H Offline
                          hans_999
                          Gesperrt
                          schrieb am zuletzt editiert von
                          #16

                          @bananajoe said in Quelle für Anzahl der Sonnenstunden?:

                          Anzahl der Sonnenstunden (die Prognose, nicht einfach errechnet)

                          Wie wäre es mit den Daten von https://forecast.solar/
                          Liefert die Daten als JSON

                          {
                              "result": {
                                  "watts": {
                                      "2019-06-22 05:15:00": 17,
                                      "2019-06-22 05:30:00": 22,
                                      "2019-06-22 05:45:00": 27,
                                      ...
                                      "2019-06-29 20:15:00": 14,
                                      "2019-06-29 20:30:00": 11,
                                      "2019-06-29 20:45:00": 7
                                  },
                                  "watt_hours": {
                                      "2019-06-22 05:15:00": 0,
                                      "2019-06-22 05:30:00": 6,
                                      "2019-06-22 05:45:00": 12,
                                      ...
                                      "2019-06-29 20:15:00": 2545,
                                      "2019-06-29 20:30:00": 2548,
                                      "2019-06-29 20:45:00": 2550
                                  },
                                  "watt_hours_day": {
                                      "2019-06-22": 2626,
                                      "2019-06-23": 2918,
                                      "2019-06-24": 2526,
                                      "2019-06-25": 2866,
                                      "2019-06-26": 2892,
                                      "2019-06-27": 1900,
                                      "2019-06-28": 2199,
                                      "2019-06-29": 2550
                                  }
                              },
                              "message": {
                                  "type": "success",
                                  "code": 0,
                                  "text": ""
                              }
                          }
                          

                          Erhältlich in verschiedenen Zugangsmodellen, darunter "Free for Life"

                          
                          
                          This works without API key for free, no subscription needed.
                          (You will not receive an API key for a donation.)
                          
                              Solar production forecast data
                              Forecast horizon: This and the next day
                              Data resolution: 1 hour
                          
                          Best for users without loggers to get a quick idea about coming solar production.
                          
                          1 Antwort Letzte Antwort
                          0
                          • Ro75R Ro75

                            @bahnuhr Danke für die Ideen, definitiv. Aber das ist eben nicht was wir da suchen.

                            Ro75.

                            T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von
                            #17

                            @ro75
                            Ich weiß ja nicht ob du es überlesen hast oder das falsch ist - im brightsky gibts das hier:
                            Bildschirmfoto 2025-11-12 um 22.51.51.png

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            BananaJoeB 1 Antwort Letzte Antwort
                            1
                            • T ticaki

                              @ro75
                              Ich weiß ja nicht ob du es überlesen hast oder das falsch ist - im brightsky gibts das hier:
                              Bildschirmfoto 2025-11-12 um 22.51.51.png

                              BananaJoeB Online
                              BananaJoeB Online
                              BananaJoe
                              Most Active
                              schrieb am zuletzt editiert von
                              #18

                              @ticaki sagte in Quelle für Anzahl der Sonnenstunden?:

                              brightsky

                              Der Adapter ist ja cool, kann ja sogar auch noch Solarprognose.
                              Er hat auch tatsächlich die Station in Bremen mit ausgewählt die ich auch schon gefunden hatte.

                              Dickes Danke!

                              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                              T HomoranH 2 Antworten Letzte Antwort
                              0
                              • BananaJoeB BananaJoe

                                @ticaki sagte in Quelle für Anzahl der Sonnenstunden?:

                                brightsky

                                Der Adapter ist ja cool, kann ja sogar auch noch Solarprognose.
                                Er hat auch tatsächlich die Station in Bremen mit ausgewählt die ich auch schon gefunden hatte.

                                Dickes Danke!

                                T Nicht stören
                                T Nicht stören
                                ticaki
                                schrieb am zuletzt editiert von
                                #19

                                @bananajoe

                                Für das solar kannste dich bei @Homoran und @klassisch bedanken, die haben da soviel analysiert ,das ich sie mit den Adapterfunktionen unterstützen wollte :)

                                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                Spenden

                                BananaJoeB 1 Antwort Letzte Antwort
                                0
                                • BananaJoeB BananaJoe

                                  @ticaki sagte in Quelle für Anzahl der Sonnenstunden?:

                                  brightsky

                                  Der Adapter ist ja cool, kann ja sogar auch noch Solarprognose.
                                  Er hat auch tatsächlich die Station in Bremen mit ausgewählt die ich auch schon gefunden hatte.

                                  Dickes Danke!

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

                                  @bananajoe sagte in Quelle für Anzahl der Sonnenstunden?:

                                  kann ja sogar auch noch Solarprognose.

                                  leider ist die Treffequote nicht sooo toll.
                                  Zumindest jetzt in der ttüben Zeit nicht.
                                  Achtung Wimmelbild ;-) :

                                  Screenshot_20251113-085217_Firefox.jpg

                                  Die stündliche Vorhersage (estimate real, grau) ist im Prinzip gar nicht für ein entsprechendes Nutzungsprofil zu gebrauchen
                                  Screenshot_20251113-090656_Firefox.jpg

                                  Da scheint der DWD die zu erwartende Sonnenscheindauer einfach auf den Tag gemäß des Sonnenverlaufs zu verteilen.

                                  Screenshot_20251113-085518_Firefox.jpg

                                  Für beides kann der arme @ticaki nichts!
                                  Die Rohdaten geben es leider nicht her

                                  kein Support per PN! - Fragen im Forum stellen -
                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                  Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  1 Antwort Letzte Antwort
                                  0
                                  • T ticaki

                                    @bananajoe

                                    Für das solar kannste dich bei @Homoran und @klassisch bedanken, die haben da soviel analysiert ,das ich sie mit den Adapterfunktionen unterstützen wollte :)

                                    BananaJoeB Online
                                    BananaJoeB Online
                                    BananaJoe
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #21

                                    @ticaki hab jetzt erst realisiert das der Adapter von dir ist - Klasse Arbeit, Danke dafür!

                                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

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


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate
                                    FAQ Cloud / IOT
                                    HowTo: Node.js-Update
                                    HowTo: Backup/Restore
                                    Downloads
                                    BLOG

                                    581

                                    Online

                                    32.7k

                                    Benutzer

                                    82.5k

                                    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