Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Astrofunktion sehr unzuverlässig??

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Astrofunktion sehr unzuverlässig??

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      AndyUM61 last edited by

      Hallo,

      kann es sein, dass die Astrofunktion für die einzelnen Tagesabschnitte absolut unzuverlässig ist?

      Ich versuche einige Funktionen in meinen Scripts über Astro zu triggern, aber mal funktioniert es, und mal eben nicht.

      Hat dieses Problem auch jemand?

      Das Script ist eine Zusammenstellung einiger hier bereits vorgestellter Scripts.

      Ein Dankeschön an die, die ihre Code-Schnipsel wiederfinden!

      Es berechnet Sonnen-Auf und -Untergang, Elevation und Azimut der Sonne, und soll den aktuellen Astro-Tagesabschnitt setzen.

      Ich nutze das Script global.

      /* Informationen zu Sonne und Tag
      
      !! In Gruppe global !!
      
      Objekte die erstellt werden:
      javascript.0.Sonne.SonneElevation -> Elevation der Sonne
      javascript.0.Sonne.SonneAzimut -> Azimut der Sonne
      javascript.0.Sonne.Sonnenaufgang -> nächster Sonnenaufgang
      javascript.0.Sonne.Sonnenuntergang -> nächster Sonnenuntergang
      javascript.0.Sonne.Tageszeit -> Astrologische Tagesabschnitte
      javascript.0.Sonne.Astrotag -> Astrologischer Tag, Zeit zwischen Sonnenauf- und untergang
      
      */
      var suncalc = require('suncalc'),
          result = getObject("system.adapter.javascript.0"),
          lat = result.native.latitude,
          long = result.native.longitude;
      
      var TopicName = "javascript.0.Sonne"; // HauptObjekt
      createState(TopicName+'.SonneElevation', 0, {unit: '°', name:'ElevationSonne'});
      createState(TopicName+'.SonneAzimut', 0, {unit: '°', name:'AzimutSonne'});
      createState(TopicName+'.Sonnenaufgang', {name: 'nächster Sonnenaufgang', desc: 'sunrise (top edge of the sun appears on the horizon)'});
      createState(TopicName+'.Sonnenuntergang', {name: 'nächster Sonnenuntergang', desc: 'sunset (sun disappears below the horizon, evening civil twilight starts)'});
      createState(TopicName+'.Tageszeit', {name: 'Tageszeit', dest:'Astrologische Tagesabschnitte'});
      createState(TopicName+'.AstroTag', false, {read: true, write: true, type: 'boolean', name: 'Astologischer Tag', desc: 'Zeit zwischen Sonnenauf- und untergang'});
      
      var idSonnenaufgang = TopicName+'.Sonnenaufgang';
      var idSonnenuntergang = TopicName+'.Sonnenuntergang';
      var idTageszeit = TopicName+'.Tageszeit';
      var idAstrotag = TopicName+'.AstroTag';
      var idSonnenElevation = TopicName+'.SonneElevation';
      var idSonnenAzimut = TopicName+'.SonneAzimut';
      
      function Sonnenstand_berechnen () {
          var now = new Date();
      
          // log("-----------------------------------------------");
          // log("latitude : " + result.native.latitude,'info');
          // log("longitude: " + result.native.longitude,'info');
      
          var sunpos = suncalc.getPosition(now, lat, long);
          // log("sunpos: " + JSON.stringify(sunpos),'info');
      
          var h = sunpos.altitude * 180 / Math.PI,
              a = sunpos.azimuth * 180 / Math.PI + 180;
      
          setState(idSonnenElevation,h.toFixed(1));
          setState(idSonnenAzimut,a.toFixed());
      }
      
      var tageszeiten = ['Nacht',
                         'Morgendämmerung',
                         'Morgen',
                         'Vormittag',
                         'Mittag',
                         'Nachmittag',
                         'Abenddämmerung',
                         'Abend'];
      
      function zeiten_speichern () {
          var astrotag = getState(idAstrotag).val,
              sonnenaufgang,
              sonnenuntergang;
          var today = new Date();
          var tomorrow = today.setDate(today.getDate()+1);
          if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute)
              sonnenuntergang = getAstroDate('sunset', today),
              sonnenaufgang = getAstroDate('sunrise', tomorrow);
          } else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen)
              sonnenuntergang = getAstroDate('sunset', tomorrow);
              sonnenaufgang = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate('sunrise', tomorrow) :  getAstroDate('sunrise', today); // es ist vor Mitternacht (bzw. vor 23:XXUhr), dann morgen, sonst heute
          }
          setState(idSonnenaufgang, sonnenaufgang.toLocaleTimeString());
          setState(idSonnenuntergang, sonnenuntergang.toLocaleTimeString());
      }
      
      function neue_tageszeit(abschnitt) {
          setState(idTageszeit, tageszeiten[parseInt(abschnitt, 10)]);
          log('neue Tagezeit: ' + tageszeiten[parseInt(abschnitt, 10)], 'info');
          zeiten_speichern();
      }
      
      // Nacht
      schedule({astro: "night", shift: 120}, function () { neue_tageszeit(0) });
      
      // Morgengdämmerung
      schedule({astro: "nightEnd"}, function () { neue_tageszeit(1) });
      
      // Morgen
      schedule({astro: "sunrise"}, function () { neue_tageszeit(2) });
      
      // Vormittag (beginnt 120min vor Sonnenhöchststand)
      schedule({astro: "solarNoon", shift: -120}, function () { neue_tageszeit(3) });
      
      // Mittag
      schedule({astro: "solarNoon"}, function () { neue_tageszeit(4) });
      
      // Nachmittag
      schedule({astro: "solarNoon", shift: 60}, function () { neue_tageszeit(5) });
      
      // Abenddämmerung (nach Sonnenuntergang)
      schedule({astro: "dusk"}, function () { neue_tageszeit(6) });
      
      // Abend
      schedule({astro: "night"}, function () { neue_tageszeit(7) });
      
      // Astrotag checken, Sonnenstand berechnen
      schedule("*/1 * * * *", function () {
         if (isAstroDay()) setState(idAstrotag, true);
         if (!isAstroDay()) setState(idAstrotag, false);
         zeiten_speichern();
         Sonnenstand_berechnen();
      });
      
      /* Weitere Astrozeiten:
          sunrise: sunrise (top edge of the sun appears on the horizon)
          sunriseEnd: sunrise ends (bottom edge of the sun touches the horizon)
          goldenHourEnd: morning golden hour (soft light, best time for photography) ends
          solarNoon: solar noon (sun is in the highest position)
          goldenHour: evening golden hour starts
          sunsetStart: sunset starts (bottom edge of the sun touches the horizon)
          sunset: sunset (sun disappears below the horizon, evening civil twilight starts)
          dusk: dusk (evening nautical twilight starts)
          nauticalDusk: nautical dusk (evening astronomical twilight starts)
          night: night starts (dark enough for astronomical observations)
          nightEnd: night ends (morning astronomical twilight starts)
          nauticalDawn: nautical dawn (morning nautical twilight starts)
          dawn: dawn (morning nautical twilight ends, morning civil twilight starts)
          nadir: nadir (darkest moment of the night, sun is in the lowest position)
      */
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        @AndyUM61:

        Ich nutze das Script global. `
        Weshalb ? Alle Ergebnisse werden doch in Datenpunkten gespeichert. Als globales Skript wird es in jedes (nicht globale) Skript eingefügt und dort ausgeführt, was die CPU enorm belastet (vermutlich die Ursache für das unzuverlässige Funktionieren). Skripte die schedule() oder on() beinhalten, sollten niemals als globale Skripte verwendet werden !
        @AndyUM61:

        Ich versuche einige Funktionen in meinen Scripts über Astro zu triggern, aber mal funktioniert es, und mal eben nicht.

        Hat dieses Problem auch jemand? `
        Ich verwende nur das Sonnenstand-Skript, das bei mir absolut zuverlässig funktioniert.

        1 Reply Last reply Reply Quote 0
        • A
          AndyUM61 last edited by

          @paul53:

          Weshalb ? Alle Ergebnisse werden doch in Datenpunkten gespeichert. Als globales Skript wird es in jedes (nicht globale) Skript eingefügt und dort ausgeführt, was die CPU enorm belastet (vermutlich die Ursache für das unzuverlässige Funktionieren). Skripte die schedule() oder on() beinhalten, sollten niemals als globale Skripte verwendet werden ! `

          OK, DANKE!

          Da hatte ich noch gar nicht darüber nachgedacht.

          Ist aber logisch und werde ich gleich mal ändern.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          390
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          1136
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo