NEWS
[gelöst] From Dusk Till Dawn
-
Hallo Leute,
ich würde gerne bei einem Ereignis etwas ausführen, wenn es gerade zeitlich zwischen "dusk" und "dawn" ist, aber irgendwie klappt es nicht. Ich habe versucht Astrozeiten zu holen, die in String-Uhrzeit umzuwandel und dann mit "between" zu veegleichen, aber ohne erfolg. (bin gerade unterwegs und kann ggf später mein code posten).
Grüße,
ldittmar
-
-
Hi Rainer,
danke für die schnelle Antwort. JS-Technisch bekomme ich das hin, aber ich wollte wissen ob es vielleicht mit compareTime "between" irgendwie machbar wäre… eine Idee wäre vielleicht auch das compareTime so zu erweitern, dass auch die Astrobegriffe akzeptiert werden. Sowas wie compareTime("dusk", "dawn", "between").
Grüße,
ldittmar
-
Vielleicht hilft dir die Funktion https://github.com/ioBroker/ioBroker.javascript#getastrodate oder auch https://github.com/ioBroker/ioBroker.javascript#isastroday.
Mit getAstroDate kannst du ja abfragen, wann zB der nächste Sonnenuntergang ist und die Zeit speichern, um sie dann mit compareTime zu verwenden.
Gruß
Pix
-
Danke Rainer und Pix,
ich habe mal alles angeschaut und eine Lösung gefunden:
function compareAstroTime(startTime, endTime, operation, time) { var astroList = ["sunrise", "sunset", "sunriseEnd", "sunsetStart", "dawn", "dusk", "nauticalDawn", "nauticalDusk", "nightEnd", "night", "goldenHourEnd", "goldenHour"]; if (typeof startTime === 'string') { if (astroList.indexOf(startTime) !== -1) { startTime = getAstroDate(startTime); startTime = startTime.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); log(startTime); } } if (endTime && typeof endTime === 'string') { if (astroList.indexOf(endTime) !== -1) { endTime = getAstroDate(endTime); endTime = endTime.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); log(endTime); } } return compareTime(startTime, endTime, operation, time); }
Diese Funktion könnte man später einfach im JS-Adapter in der Funktion compareTime einbauen. Zur Zeit nutze ich es als globale Funktion. Ich habe mich auch an den Adapter orientiert, damit man ggf. es einfach einbauen kann. Ich schaue praktisch ob der String der kommt eine Astrozeit ist und wenn ja übersetze ich es in Stunden/Minuten und übergebe weiter an compareTime().
Edit: Das einzige was hier "blöd" ist, ist die Tatsache, dass sich die Astrozeiten immer auf heute beziehen… ist aber bei so eine kleine Differenz wahrscheinlich zu verkraften.
Grüße,
ldittmar
-
Hallo Leute,
ich würde gerne bei einem Ereignis etwas ausführen, wenn es gerade zeitlich zwischen "dusk" und "dawn" ist, aber irgendwie klappt es nicht. Ich habe versucht Astrozeiten zu holen, die in String-Uhrzeit umzuwandel und dann mit "between" zu veegleichen, aber ohne erfolg. (bin gerade unterwegs und kann ggf später mein code posten).
Grüße,
ldittmar `
Hallo ldttmar
Schau mal hier http://forum.iobroker.net/viewtopic.php … 891#p48209
Vielleicht kannst Du mit diesem Prinzip etwas anfangen.
Grüße