Rechnen mit sunrise() und sunset()

Begonnen von efyzz, 14 Februar 2017, 22:42:39

Vorheriges Thema - Nächstes Thema

efyzz

Nabend,

ich möchte gern meine Aquariumbeleuchtung entsprechend der realen Tagesdauer in unseren Breitengraden schalten. Dabei soll die Beleuchtung aber immer um 22:00 Uhr aus gehen, dafür jedoch variabel, entsprechend der realen Tagesdauer, einschalten. Sodass die Beleuchtungsdauer der tatsächlichen Tageslänge entspricht.

Ich bräuchte also sowas wie:
define AquariumOn at *{22:00:00-(sunset()-sunrise())} set AquariumLamp on

Könnte mir bitte jemand den Ausdruck hinter at in eine ordentliche Syntax übersetzen?

Vielen Dank!
RaspberryPi3B, Bookworm Lite
Homematic Funkmodul HM-MOD-RPI-PCB
------------------------------------------------------------------------
Ich bin kein Programmierer ... aber ich weiß, auf welcher Seite der Lötkolben heiß ist.

KernSani

Schau dir mal die commandref zu EL_SUNRISE genau an, da findest du die entsprechende Info, wie du die Lampe einschaltest. Zum ausschalten brauchst du ein weiteres at, oder - falls deine Lampe es unterstützt, nutzt du on-till.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

efyzz

Moin,

danke für den Hinweis, aber da liegt nicht mein Problem. Das mit der Schalterei kriege ich schon irgendwie hingefummelt.

Mein Problem ist die Berechnung der Uhrzeiten. Zunächst brauche ich die Länge eines Tages:
sunset - sunrise

Und diese müsste ich dann von meiner Abschaltzeit (22:00 Uhr) abziehen, um die Einschaltzeit zu erhalten:
Einschaltzeit = 22:00 - (sunset - sunrise)

Dabei kriege ich nur Murks raus, weil ich einfach nicht weiß, wie die Syntax dafür genau aussehen müsste. Leider helfen mir die Beispiele in der Commandref dabei auch nicht weiter  :(

Nochmal ein Beispiel:
Sunrise = 8:00 Uhr
Sunset = 21:00 Uhr
-> Tageslänge = Sunset - Sunrise = 13 Stunden
-> Einschaltzeit = Abschaltzeit - Tageslänge = 22:00 Uhr - 13 Stunden = 9:00 Uhr
RaspberryPi3B, Bookworm Lite
Homematic Funkmodul HM-MOD-RPI-PCB
------------------------------------------------------------------------
Ich bin kein Programmierer ... aber ich weiß, auf welcher Seite der Lötkolben heiß ist.

betateilchen

Zitat von: efyzz am 15 Februar 2017, 13:39:29
Dabei kriege ich nur Murks raus, weil

weil Dein Denkansatz Murks ist.

FHEM kennt keine Uhrzeiten im Stunden/Minuten/Sekunden-Format, sondern nur absolute Zeitstempel, aus denen für die Anzeige eine für Menschen lesbare Darstellung zusammengefrickelt wird.

sunrise_abs() und sunset_abs() sollten Dir weiterhelfen, damit kann man absolute Zeitstempel ermitteln.
Ebenso kannst Du Deine Uhrzeit 22:00 Uhr in einen solchen Zeitstempel umrechnen.

Zeitstempel(22:00) - sunset_abs() + sunrise_abs() = Zeitstempel(Einschaltzeit)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thorsten Pferdekaemper

Zitat von: efyzz am 14 Februar 2017, 22:42:39ich möchte gern meine Aquariumbeleuchtung entsprechend der realen Tagesdauer in unseren Breitengraden schalten.
Hast Du auch Fische aus unseren Breitengraden? Das wäre ungewöhnlich. Normalerweise hat man ja was tropisches und da sind die Tageslängen ja eher fast konstant. Außerdem mögen es die Fische meistens gar nicht so hell, außer vielleicht bei Tanganjika/Malawisee-Cichliden.
Was auch noch zu bedenken ist: Die meisten Wasserpflanzen stammen von tropischen Landpflanzen ab, d.h. sie funktionieren am besten, wenn es zur Mittagszeit ein Gewitter gibt, also man das Licht mal für 2 Stunden abschaltet. Algen andererseits kommen aus dem Meer, wo es immer hell ist. Sie mögen Dauerlicht...
Sorry, ich konnte nicht anders als mein altes Aquarienwissen zum Besten zu geben.
Gruß,
   Thorsten
FUIP

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

rudolfkoenig

define AquariumOn at *{sunrise()} set AquariumLamp on-till {sunset(0,"00:00","22:00")}

betateilchen

Rudi, das Licht soll nicht zum Sonnenaufgang eingeschaltet werden ;)
Dafür aber immer um 22 Uhr aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Ach so. Abendunterhaltung, aber die Fische sollen es nicht merken.
Na dann:
define AquariumOn at *{f67133()} set AquariumLamp on-till 22:00
mit f67133 in 99_myUtils.pm:
sub
f67133()
{
  FmtTime( time_str2num("2017-01-01 22:00:00")-
          (time_str2num("2017-01-01 ".sunset_abs())-
           time_str2num("2017-01-01 ".sunrise_abs())));
}       


efyzz

Ah ja, jetzt wird's interessant!
Ich werde jetzt eine Weile brauchen, um die Tipps zu testen und zu verstehen ... dann melde ich mich wieder.
Vielen Dank für eure Hilfe!

Zitat von: Thorsten Pferdekaemper am 15 Februar 2017, 13:58:45
Hast Du auch Fische aus unseren Breitengraden?
Ja, es handelt sich um ein Nordsee-Aquarium. Neben der Beleuchtungsdauer wird auch die Temperatur entsprechend der Jahreszeit angepasst. Aktuell habe ich 9°C im Becken. 
Das ist notwendig, damit die Fische im Frühjahr dann auch in Paarungsstimmung kommen ;D

Zitat von: rudolfkoenig am 15 Februar 2017, 15:22:34
Ach so. Abendunterhaltung, aber die Fische sollen es nicht merken.
Na dann:
define AquariumOn at *{f67133()} set AquariumLamp on-till 22:00
mit f67133 in 99_myUtils.pm:
sub
f67133()
{
  FmtTime( time_str2num("2017-01-01 22:00:00")-
          (time_str2num("2017-01-01 ".sunset_abs())-
           time_str2num("2017-01-01 ".sunrise_abs())));
}       


Dazu doch noch eine Frage:
Das funktioniert ja jetzt nur für den 01.01.2017. Oder muss da einfach nur irgendein Datum stehen, das sich am Ende sowieso "raus kürzt"?
RaspberryPi3B, Bookworm Lite
Homematic Funkmodul HM-MOD-RPI-PCB
------------------------------------------------------------------------
Ich bin kein Programmierer ... aber ich weiß, auf welcher Seite der Lötkolben heiß ist.

rudolfkoenig


Dietmar63

so sollte es auch gehen:

define AquariumOn  WeekdayTimer  {h2hms_fmt(22.0-(hms2h(sunset_abs())-hms2h(sunrise_abs())))}|on   22:00|off
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

betateilchen

und jetzt bitte noch jemand mit einem DOIF...  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

igami

Zitat von: betateilchen am 15 Februar 2017, 18:32:44
und jetzt bitte noch jemand mit einem DOIF...  8)

defmod aquarium DOIF ([([22:00]-{sunset()}+{sunrise()})])(\
  set AquariumLamp on\
)\
DOELSEIF\
([22:00])(\
  set AquariumLamp off\
)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Thorsten Pferdekaemper

Zitat von: efyzz am 15 Februar 2017, 16:38:38Ja, es handelt sich um ein Nordsee-Aquarium. Neben der Beleuchtungsdauer wird auch die Temperatur entsprechend der Jahreszeit angepasst. Aktuell habe ich 9°C im Becken. 
Das ist notwendig, damit die Fische im Frühjahr dann auch in Paarungsstimmung kommen ;D
Oha, hast Du einen Zoo? Wenn man das gescheit machen will, dann ist das echt was für Fortgeschrittene. Hast Du auch Tidenhub und Brandungssimulation?
Gruß,
   Thorsten
FUIP