/* System Tageszeoten
{1}
Skript meldet Tageszeiten
{1}
Nacht;Frühmorgens;Morgengrauen;Vormittag;Mittag;Nachmittag;Dämmerung;Abend;
Basis: http://www.homematic-inside.de/tecbase/homematic/scriptlibrary/item/tageszeit-in-abschnitte-unterteilen
oder hier: https://github.com/ioBroker/ioBroker.javascript#astro--funktion
{1}
https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#getastrodate
{1}
erstellt: 01.06.2015 von Pix
11.12.2015 getAstroDate ermittelt nun auch Sonnenaufgang und Untergang
Astrotag (isAstroDay) eingebaut
*/
// Variablen erstellen
createState('Tageszeit', {
name: 'Tageszeit'
});
createState('Tageszeit.Sonnenaufgang', {
name: 'nächster Sonnenaufgang Uhrzeit',
desc: 'sunrise (top edge of the sun appears on the horizon)'
});
createState('Tageszeit.Sonnenuntergang', {
name: 'nächster Sonnenuntergang Uhrzeit',
desc: 'sunset (sun disappears below the horizon, evening civil twilight starts)'
});
createState('Tageszeit.EndeDerNacht', {
name: 'Ende der Nacht',
desc: 'optional'
});
createState('Tageszeit.DaemmerungMorgens1', {
name: 'Dämmerung Morgens 1',
desc: 'optional'
});
createState('Tageszeit.DaemmerungMorgens2', {
name: 'Dämmerung Morgens 1',
desc: 'optional'
});
createState('Tageszeit.EndeDesSonnenaufgangs', {
name: 'Ende des Sonnenaufgangs',
desc: 'optional'
});
createState('Tageszeit.EndeDerGoldenHourVM', {
name: 'Ende der Golden Hour VM',
desc: 'optional'
});
createState('Tageszeit.Mittag', {
name: 'Mittag',
desc: 'optional'
});
createState('Tageszeit.StartDerGoldenHourNM', {
name: 'Start der Golden Hour NM',
desc: 'optional'
});
createState('Tageszeit.StartDesSonnenuntergangs', {
name: 'Start des Sonnenuntergangs',
desc: 'optional'
});
createState('Tageszeit.DaemmerungAbends1', {
name: 'Dämmerung Abends 1',
desc: 'optional'
});
createState('Tageszeit.DaemmerungAbends2', {
name: 'Dämmerung Abends 2',
desc: 'optional'
});
createState('Tageszeit.StartDerNacht', {
name: 'Start der Nacht',
desc: 'optional'
});
createState('Tageszeit.Mitternacht', {
name: 'Mitternacht',
desc: 'optional'
});
createState('Tageszeit.Astrotag', false, {
read: true,
write: true,
type: 'boolean',
name: 'Astologischer Tag',
desc: 'Zeit zwischen Sonnenauf- und untergang'
});
var idTageszeit = "Tageszeit",
tageszeiten = ['Nacht',
'Morgendämmerung',
'Morgen',
'Vormittag',
'Mittag',
'Nachmittag',
'Abenddämmerung',
'Abend'],
idAstrotag = "Tageszeit.Astrotag";
function zeiten_speichern () {
var astrotag = getState(idAstrotag).val,
sonnenaufgang,
sonnenuntergang;
var today = new Date();
var tomorrow = today.setDate(today.getDate()+1);
var timestampForSunset;
var timestampForSunrise;
if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute)
timestampForSunset=today;
timestampForSunrise=tomorrow;
} else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen)
timestampForSunset = tomorrow;
if(today.getHours() > 12 && today.getHours() <= 23){
timestampForSunrise=tomorrow;
}else{
timestampForSunrise=today;
}
}
setState("Tageszeit.EndeDerNacht", getAstroDate('nightEnd', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.DaemmerungMorgens1", getAstroDate('nauticalDawn', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.DaemmerungMorgens2", getAstroDate('dawn', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.Sonnenaufgang", getAstroDate('sunrise', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.EndeDesSonnenaufgangs", getAstroDate('sunriseEnd', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.EndeDerGoldenHourVM", getAstroDate('goldenHourEnd', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.Mittag", getAstroDate('solarNoon', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.StartDerGoldenHourNM", getAstroDate('goldenHour', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.StartDesSonnenuntergangs", getAstroDate('sunsetStart', timestampForSunset).toLocaleTimeString());
setState("Tageszeit.Sonnenuntergang", getAstroDate('sunset', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.DaemmerungAbends1", getAstroDate('dusk', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.DaemmerungAbends2", getAstroDate('nauticalDusk', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.StartDerNacht", getAstroDate('night', timestampForSunrise).toLocaleTimeString());
setState("Tageszeit.Mitternacht", getAstroDate('nadir', timestampForSunrise).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
schedule("*/1 * * * *", function () {
if (isAstroDay()) setState(idAstrotag, true);
if (!isAstroDay()) setState(idAstrotag, false);
zeiten_speichern();
});
0