Wie kann man Uhrzeiten eleganter vergleichen?

Begonnen von FFHEM, 15 Februar 2014, 11:27:03

Vorheriges Thema - Nächstes Thema

FFHEM

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!
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

if($hms > "06:50" && $hms < "12:00" && $wday ~~ [1..4]) ...

Aber warum machst Du das eigentlich mit einer 5-minütigen Wiederholung?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FFHEM

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.

Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

Ich würde das trotzdem über sunset steuern.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FFHEM

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!
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FFHEM

#6
Probiere ich aus, danke vielmals!
Gruß
Friedhelm

P.S.:
Toll, dass schon die aktuellen Werte angezeigt werden!
s. Screenshot!
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

wobei das morgenLicht schon die Uhrzeit für morgen früh ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FFHEM

#8
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).

Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FFHEM

Vielen Dank für die blitzschnelle Bestätigung.
Ich hoffe, ich habe Dich nicht zu sehr genervt!
DANKE!
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

betateilchen

nein, keine Sorge.

Im Gegensatz zu anderen Leuten hast Du ja von Anfang an genau beschrieben, was Du eigentlich tun möchtest  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

roedert

#12
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.

betateilchen

Danke für den Tipp, aber ich will die Helligkeit absichtlich nicht berücksichtigen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

efyzz

#14
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???
RaspberryPi3B, Bookworm Lite
Homematic Funkmodul HM-MOD-RPI-PCB
------------------------------------------------------------------------
Ich bin kein Programmierer ... aber ich weiß, auf welcher Seite der Lötkolben heiß ist.