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!
if($hms > "06:50" && $hms < "12:00" && $wday ~~ [1..4]) ...
Aber warum machst Du das eigentlich mit einer 5-minütigen Wiederholung?
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.
Ich würde das trotzdem über sunset steuern.
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!
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)
Probiere ich aus, danke vielmals!
Gruß
Friedhelm
P.S.:
Toll, dass schon die aktuellen Werte angezeigt werden!
s. Screenshot!
wobei das morgenLicht schon die Uhrzeit für morgen früh ist.
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).
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.
Vielen Dank für die blitzschnelle Bestätigung.
Ich hoffe, ich habe Dich nicht zu sehr genervt!
DANKE!
nein, keine Sorge.
Im Gegensatz zu anderen Leuten hast Du ja von Anfang an genau beschrieben, was Du eigentlich tun möchtest 8)
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.
Danke für den Tipp, aber ich will die Helligkeit absichtlich nicht berücksichtigen.
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???
am einfachsten den Doppelpunkt weg-regexen und dann 2255 mit 2200 vergleichen :)
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.
Ah, ok...
Danke!
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.