Hallo zusammen!
Ich möchte bei Ankunft zu Hause nach Sonnenuntergang Lichter einschalten lassen. Dazu wird per HomeKit ein Dummy-Device eingeschaltet, darüber ein Notify getriggert, welches eine Sub-Routine in der 99_myUtils.pm auslöst (weil verschiedene Personen ankommen können, möchte den Code zentral haben und nicht für jeden ein extra Notify mit dem kompletten Code).
Kann ich in der Sub-Routine in einer if-Abfrage die Zeit zwischen Sonnenuntergang und Sonnenaufgang herausbekommen? Bisher schaltet das Licht immer. Mache ich hier einen Fehler oder habe ich einen Denkfehler?
Dies ist der wichtige Teil mit einer Test-Nachricht per Telegram, das eigentliche sub ist umfangreicher:
sub Anwesenheit() {
if ([{sunset("REAL")}-{sunrise("REAL")}]) {
fhem("set teleBot message Lichter an.");
}
}
Vielen Dank.
Ich hab das mit
IF (!isday("HORIZON=2.0")) ...
gelöst.
So geht es, vielen Dank!
Aber ich würde auch gerne verstehen, warum die andere Variante nicht geht. :-\
Hi SebbelG,
dieser Code: [{sunset("REAL")}-{sunrise("REAL")}] ist irgendwo aus einem DOIF, das geht innerhalb Perl nicht so. Du solltest Fehlermeldungen haben!
Aber schau Dir auch ruhig an was dein Konstrukt ergibt, wirf dazu einfach die Bestandteile in die FHEM Kommandozeile, die kann nämlich Perl
{{sunset("REAL")}-{sunrise("REAL")}}
Damit Du verstehst, was Du mit if () abfragen wolltest.
Gruß Otto
Zitat von: SebbelG am 20 Februar 2019, 15:14:30
Aber ich würde auch gerne verstehen, warum die andere Variante nicht geht. :-\
Weil sunrise() den Sonnenaufgang von morgen liefert, wenn heute schon Sonnenaufgang war.
Doku lesen kann manchmal helfen...
Das stimmt, soweit war ich jetzt auch, mit sunset_abs() und sunrise_abs() sollte es ja gehen.
Ich komme leider mit dem Perl im if nicht ganz zurecht, ich bekomme den Vergleich der Zeiten nicht hin.
Es gibt die FHEM interne Funlktion IsDay. Einfach mal in der Kommandozeile in FHEMWEB eingeben
IsDay()
Dann solltest Du 0 oder gar nichts zurück bekommen wenn es Nacht ist.
Zitat von: SebbelG am 20 Februar 2019, 17:20:05
... mit dem Perl im if nicht ganz zurecht ...
if ist schon Perl ;D und deine sub sowieso ...
Zeiten vergleichen ist nicht so die einfachste Sache - egal in welcher Programmiersprache. Im Wiki habe ich z.B. diesen Artikel für Dich gefunden.
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit
Ansonsten nimm vielleicht auch mal ein Perlbuch zur Hand http://perldoc.perl.org/functions/time.html
Gruß Otto
Zitat von: CoolTux am 20 Februar 2019, 17:22:05
Es gibt die FHEM interne Funlktion IsDay. Einfach mal in der Kommandozeile in FHEMWEB eingeben
IsDay()
Dann solltest Du 0 oder gar nichts zurück bekommen wenn es Nacht ist.
isday()
also klein geschrieben, oder?
https://commandref.fhem.de/#SUNRISE_EL
Ja Sorry. Mein Fehler. Ich war durch mein eigenes IsDay abgelenkt.
Richtig muss es heißen
isday();
Grüße