Perl Code Zeiteingabe klappt nicht

Begonnen von schnun, 08 Dezember 2013, 20:15:34

Vorheriges Thema - Nächstes Thema

schnun

Hallo,

ich will das ein Aktor -  in diesem Fall eine Steckdose - nur in der Zeit zwischen 22:00 und 06:00 Uhr morgens schaltet wenn sich der Status von
Sensor "garage_Tor" auf "Offen" ändert.
Mit "if ( $hm lt "06:00" &&\" habe ich ja schon mal 6 Uhr oder kleiner (0 Uhr) abgedeckt - funktioniert auch, aber wenn ich Vorgebe
"if ( $hm gt "22:00" &&  $hm lt "06:00" &&\" dann reagiert die Steckdose nicht mehr auf das offene Garagentor.

Anbei Auszug aus der .cfg .

define garage_Tor TRX_LIGHT AC 00a243be02 light
attr garage_Tor eventMap on:Zu off:Offen
attr garage_Tor onOffDevice true
attr garage_Tor room Garage
define FileLog_garage_Tor FileLog ./log/garage_Tor-%Y.log garage_Tor
attr FileLog_garage_Tor logtype text
attr FileLog_garage_Tor room Garage
define garage_TorAuf notify garage_Tor.*|schlazi_AlarmGarage.*|garage_Fenster.* {\
my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
if ( $hm lt "06:00" &&\
$value{garage_Tor} eq "Offen" &&\
$value{garage_Fenster} eq "Zu" &&\
$value{schlazi_AlarmGarage} eq "Aus") {\
fhem ("set schlazi_AlarmGarage Ein");;\
DebianMail('xxxxxxxx@@xxxxx.de,'Meldung Garage Auf','Garagentor ist offen !!!');;\
}\
}

Ich habe schon intensiv gesucht, aber ich finde keine Konstellation von abends bis zum nächsten morgen.
Hat mir jemand einen Vorschlag ?

Gruss
Patrick
FHEM 5.7
FB 7362 SL
Raspberry Pi Model B
RFXTRX 433mhz
2 x HM-Lan-Adapter

rudolfkoenig

"if ( $hm gt "22:00" &&  $hm lt "06:00" &&\" dann reagiert die Steckdose nicht mehr auf das offene Garagentor.

Auch wenn man umgangsprachlich "nach 22:00 und vor 06:00" sagt, muss man das in jede Programmiersprache als "nach 22:00 oder vor 06:00" schreiben.

schnun

Vielen Dank ! Verstanden, umgesetzt und funktioniert.

Und jetzt geh ich mal los und besorg mir "Einführung in Perl".

Gruss
Patrick
FHEM 5.7
FB 7362 SL
Raspberry Pi Model B
RFXTRX 433mhz
2 x HM-Lan-Adapter

Puschel74

Hallo,

ein Perl-Buch ist gut aber für dieses Problem nicht zwingend notwendig.

Mal ein Beispiel indem wir voraussetzen das wir anstelle von ODER ein UND programmiert haben.

z.B.: Uhrzeit = 23 Uhr
Der Vergleich auf "später als 22 Uhr" trifft zu ABER der Vergleich auf "früher als 6 Uhr" schlägt fehl.
Logisch - 23 Uhr ist niemals früher als 6 Uhr.

Genauso auch mit 5 Uhr.
Hier trifft zwar der Vergleich auf früher als 6 Uhr zu aber der Vergleich mit später als 22 Uhr muss zwangsläufig fehlschlagen.

In diesen beiden Fällen (und allen Uhrzeiten dazwischen) wird die Abfrage immer falsch sein.
Genau genommen wird die Abfrage niemals wahr zurück liefern - egal wie spät es ist  ;)

Anstelle vom UND das ODER und beide Uhrzeiten (und alles zwischen 22:00 Uhr und 06:00 Uhr) werden ein wahr zurück liefern da nur einer der beiden Vergleiche wahr sein muss (und hier auch nur einer wahr sein kann).
Wenn es nun z.B 7 Uhr ist dann sind wir weder später als 22 Uhr noch früher als 6 Uhr und die Aussage ist falsch.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

schnun

In der Tat logisch, wenn man darüber nachdenkt, was ich offensichtlich nicht
ausreichend getan habe.
Ich denke ein Perl-Buch ist bei mir nicht verkehrt, ich will ja das Forum nicht
ständig mit "Anfängerkram"  belasten.

Danke an euch beide für die Erleuchtung...  ;)
FHEM 5.7
FB 7362 SL
Raspberry Pi Model B
RFXTRX 433mhz
2 x HM-Lan-Adapter

bugster_de

ich glaube die Frage hat nichts mit Perl zu tun. der Umgang mit Zeit, welche auf 24 oder 60 Basis fusst ist nie ganz einfach :-)