FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: SebbelG am 20 Februar 2019, 14:28:38

Titel: sunset() in if-Abfrage
Beitrag von: SebbelG am 20 Februar 2019, 14:28:38
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.
Titel: Antw:sunset() in if-Abfrage
Beitrag von: pcbastler am 20 Februar 2019, 14:41:35
Ich hab das mit

IF (!isday("HORIZON=2.0")) ...


gelöst.
Titel: Antw:sunset() in if-Abfrage
Beitrag von: SebbelG am 20 Februar 2019, 15:14:30
So geht es, vielen Dank!

Aber ich würde auch gerne verstehen, warum die andere Variante nicht geht.  :-\
Titel: Antw:sunset() in if-Abfrage
Beitrag von: Otto123 am 20 Februar 2019, 15:17:26
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
Titel: Antw:sunset() in if-Abfrage
Beitrag von: betateilchen am 20 Februar 2019, 17:01:05
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...
Titel: Antw:sunset() in if-Abfrage
Beitrag von: SebbelG am 20 Februar 2019, 17:20:05
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.
Titel: Antw:sunset() in if-Abfrage
Beitrag 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.
Titel: Antw:sunset() in if-Abfrage
Beitrag von: Otto123 am 20 Februar 2019, 21:27:32
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
Titel: Antw:sunset() in if-Abfrage
Beitrag von: nils_ am 21 Februar 2019, 13:47:31
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
Titel: Antw:sunset() in if-Abfrage
Beitrag von: CoolTux am 21 Februar 2019, 13:52:21
Ja Sorry. Mein Fehler. Ich war durch mein eigenes IsDay abgelenkt.
Richtig muss es heißen

isday();



Grüße