FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FFHEM am 15 Februar 2014, 11:27:03

Titel: Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 11:27:03
Hallo liebe Gemeinde,
da ich schon länger zu diesem Thema etwas suche, aber noch nichts gefunden habe:
Ich überprüfe für eine Lichtschaltung die Uhrzeiten. Die Lampen sollen Montags - Donnerstags um 06.50 Uhr angehen, bis es hell wird und abends durch einen PIR-Lichtwert wieder angehen bis 23 Uhr.
Funktioniert alles, nur der Test auf die Uhrzeiten ist umständlich, da ich Stunden und Minuten einzeln abfragen muss.
Der u. a. Ausschnitt wird alle ca. 5 Minuten aufgerufen:

if ($hour < 23 && ( ($wday ~~ [1..4] && (($hour >= 6 && $min >= 50) || $hour >= 7) ) || $hour > 12 )) {
   fhem ("set Aussenlichtsensor dunkel;");


Wie kann ich die Uhrzeiten einfacher abfragen (à la: time > 06.50 && time < 12.00)? Damit meine ich jetzt nicht einen regulären Ausdruck, sondern die Zusammenfassung von Stunden und Minuten.
Vielen Dank!
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 11:34:12
if($hms > "06:50" && $hms < "12:00" && $wday ~~ [1..4]) ...

Aber warum machst Du das eigentlich mit einer 5-minütigen Wiederholung?
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 11:53:48
Vielen Dank, betateilchen! Sieht das jetzt schön übersichtlich aus!

Die 5 Minuten kommen vom PIR-Sensor, der alle ca. 5 - 10 Minuten die Helligkeit sendet.

Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 11:59:11
Ich würde das trotzdem über sunset steuern.

Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 12:00:49
Danke für den Tipp, werde ich mir mal ansehen.
Hätte den Vorteil, dass bei Ausfall des Sensors nicht die Flurbeleuchtung (die wird damit nämlich gesteuert) ausfällt.

Vielen Dank!
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 12:13:20
define morgenLicht at *{sunrise("REAL",-5400,"06:00","08:00")} set Licht on-for-timer 5400

=> morgens geht das Licht von 90 Minuten vor Sonnenaufgang bis zum Sonnenaufgang an, aber nicht vor 6 und nicht nach 8 Uhr.

define abendLicht at *{sunset("REAL",0,"16:00","23:00")} set Licht_Balkon on-till 22:00:00

=> abends geht das Licht von Sonnenuntergang bis 22 Uhr an. Aber nicht vor 16 Uhr. (Die 23-Uhr-Angabe ist an sich irrelevant)
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 13:40:27
Probiere ich aus, danke vielmals!
Gruß
Friedhelm

P.S.:
Toll, dass schon die aktuellen Werte angezeigt werden!
s. Screenshot!
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 14:42:56
wobei das morgenLicht schon die Uhrzeit für morgen früh ist.
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 18:08:46
Ich habe doch noch eine Frage:
Wie bekommt man noch die Wochentagseinschränkung dazu?
So funktioniert es jedenfalls nicht:
define morgenLicht at *{sunrise("REAL",-5400,"06:50","09:00") && $wday ~~ [1..4]} set ST2 on-for-timer 5400
Danke!

Sorry, war zu schnell, habe was gefunden in der Referenz:
define morgenLicht at *{sunrise("REAL",-5400,"06:50","09:00")} { fhem("set ST2 on-for-timer 5400") if($wday ~~ [1..4]) }
Allerdings wird dann in der "Vorschau" nicht erst der Montag angegeben, sondern auch morgen früh 6:49:49.
Ich probiere es mal aus, allerdings wundere ich mich über die Syntax (nachgestelltes if).

Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 18:18:50
Zitat von: FFHEM am 15 Februar 2014, 18:08:46Allerdings wird dann in der "Vorschau" nicht erst der Montag angegeben, sondern auch morgen früh 6:49:49.

Das ist völlig korrekt. Das at wird auch morgen früh um 06:49 aufgerufen, und ERST DANN erfolgt die Prüfung auf den Wochentag und die Entscheidung, ob das Licht angeht oder nicht.

Zitat von: FFHEM am 15 Februar 2014, 18:08:46allerdings wundere ich mich über die Syntax (nachgestelltes if).

Nicht wundern. Perl Handbuch kaufen und lernen.
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: FFHEM am 15 Februar 2014, 18:20:00
Vielen Dank für die blitzschnelle Bestätigung.
Ich hoffe, ich habe Dich nicht zu sehr genervt!
DANKE!
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 15 Februar 2014, 18:22:11
nein, keine Sorge.

Im Gegensatz zu anderen Leuten hast Du ja von Anfang an genau beschrieben, was Du eigentlich tun möchtest  8)
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: roedert am 16 Februar 2014, 10:14:45
Zitat von: betateilchen am 15 Februar 2014, 12:13:20=> morgens geht das Licht von 90 Minuten vor Sonnenaufgang bis zum Sonnenaufgang an, aber nicht vor 6 und nicht nach 8 Uhr.

Hatte meine Lichtsteuerung auch erst mit Sonnenaufgang und Offset gesteuert, dann aber doch zu dem Twilight-Modul gewechselt. Schau dir das mal an, da gibt es einen wetterabhängigen Sonnenstand - der trifft die Lichtsituation oft besser, da Sunset nicht wetterabhängig (vor allem Bewölkung) ist....

Oder alternativ selbst die Helligkeit messen, ein HMS100T ist mit'm Lötkolben, nem Fotowiederstand und 2 Widerständen und paar Minuten Zeit auch schnell zu einem Helligkeitssensor umgebaut.
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 16 Februar 2014, 10:24:25
Danke für den Tipp, aber ich will die Helligkeit absichtlich nicht berücksichtigen.
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: efyzz am 28 Februar 2017, 23:04:53
Nabend,

ich versuche auch gerade Uhrzeiten zu vergleichen.
Es ist jetzt etwa 22:55 Uhr.
Ein
{$hms > "21:59"}
ergibt true.
Aber ein
{$hms > "22:00"}
ergibt false.

Warum???
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: betateilchen am 28 Februar 2017, 23:12:59
am einfachsten den Doppelpunkt weg-regexen und dann 2255 mit 2200 vergleichen :)
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: justme1968 am 01 März 2017, 00:45:40
weil es mit dem : strings sind und > nur den zahlen teil bis zum : vergleicht. du solltest auch eine warnung im log dazu sehen.

wenn deine stunden immer zwei stellig sind funktioniert auch ein string verglich mit gt. wenn nicht: wie vorgeschlagen den : entfernen.
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: efyzz am 01 März 2017, 12:45:28
Ah, ok...
Danke!
Titel: Antw:Wie kann man Uhrzeiten eleganter vergleichen?
Beitrag von: rabehd am 01 März 2017, 13:29:08
Wenn auch nachträglich.
Die ursprüngliche Frage habe ich so gelöst:
([{sunset_abs("REAL")}]) (set FS_2 on) 
DOELSEIF ([23:22|01234] and (ReadingsVal("BaWue","tomorrow","") eq "none") and (Value("Party") eq "keine")) ({LichterAus()})
DOELSEIF ([00:24|67] and (Value("Party") eq "keine"))({LichterAus()})
DOELSEIF ([00:24] and (ReadingsVal("BaWue","tomorrow","") ne "none") and (Value("Party") eq "keine")) ({LichterAus()})
DOELSEIF ([04:04] and (Value("Party") eq "läuft")) ({LichterAus()})
DOELSEIF ([06:30|67] and (!isday()) ) (set FS_2 on) 
DOELSEIF ([05:25|8] and (!isday()) ) (set FS_2 on)
DOELSEIF ([{sunrise_abs("REAL",0,"05:26","07:08")}|8]) (set FS_2 off) 
DOELSEIF ([{sunrise_abs("REAL",0,"06:31","08:48")}|67]) (set FS_2 off)

Dabei wird Sonnenstand, Wochentag, Feiertag und Dummy Party berücksichtigt.

Zeiten vergleiche ich in dem ich das Ergebnis einer Funktion "Zeit zu UnixZeit" benutze. Der Vorteil ist, dass man damit rechnen kann und auch das Datum berücksichtigt wird.