NEWS
Astrofunktion sehr unzuverlässig??
-
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) */
-
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. -
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.