Hallo zusammen,
für eine Zugangssteuerung möchte ich per DOIF bestimmte Schaltaktionen nur in einen bestimmten Zeitraum erlauben, z.B. zwischen "02.11.2018 13:30" und "02.11.2018 17:30"
Start- und Enddatum/Zeit kommen dynamisch aus Dummies, die die Datum und Zeit genau so als String enthalten.
([dummy_start-dummy_ende]
ergibt erwartungsgemäß "error: Wrong timespec dummy_start: either HH:MM:SS or {perlcode}"
Um nun das entsprechende DOIF zu bauen, suche ich nun schon eine geraume Zeit herum: Muss man das wirklich so kompliziert machen wie hier beschrieben? https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten#Zeitspanne_zwischen_zwei_Terminen
Oder gibt es da einen einfacheren Weg, um das Datum aus den Dummies mit einzubeziehen?
Käme denn das DOIF damit zurecht, wenn man Start- und Enddatum/-Zeit jeweils als timestamps hätte - und falls ja: Kann man innerhalb des DOIF die String aus den Dummies in Timestamps konvertieren oder müssten die schon als Inhalt in den Dummies stehen?
Im Notify würde ich das (ungetestet) etwa so machen:
my $date = ReadingsVal("dummy_start", "STATE", "");
my ($mday,$mon,$year,$hour,$min,$sec) = split(/[\s.:]+/, $date);
my $time = timelocal($sec,$min,$hour,$mday,$mon-1,$year);
print $time,"\n",scalar localtime $time;
...
Danke für Eure Hilfe &
Viele Grüße
Martin
Augen auf und Klammern zählen!
[[dummy_start]-[dummy_ende]]
Zitat von: dadoc am 30 Oktober 2018, 16:08:07
Um nun das entsprechende DOIF zu bauen, suche ich nun schon eine geraume Zeit herum: Muss man das wirklich so kompliziert machen wie hier beschrieben? https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten#Zeitspanne_zwischen_zwei_Terminen
Oder gibt es da einen einfacheren Weg, um das Datum aus den Dummies mit einzubeziehen?
Hallo Martin,
Per hat schon die Lösung gepostet, ich empfehle Dir nicht irgendwo zu suchen sondern immer zuerst in die Doku schauen:
https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Gruß Otto
Danke Per & Otto,
danke für die Hinweise, Commandref und Wiki sind in der Tat immer meine ersten Anlaufstellen, ich hatte auch die doppelten Klammern probiert, aber der Fehler bleibt derselbe:
timer_01_c01
error: Wrong timespec 02.11.2018 13:00:18: either HH:MM:SS or {perlcode}
timer_02_c01
error: Wrong timespec 02.11.2018 13:45:26: either HH:MM:SS or {perlcode}
weswegen ich vermutete, dass DOIF nicht mit dem Datums+Zeit-String klarkommt.
Oder doch?
Das DOIF sieht so aus:
([[dummy_start_d]-[dummy_ende_d]] and [keyremote_6_6]) (set status_d off)
Grüße
Martin
Zitat von: Otto123 am 30 Oktober 2018, 16:33:09
immer zuerst in die Doku schauen:
https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Hmm, da steht ja auch etwas missverständlich:
ZitatDiese müssen eine Zeitangabe im Format HH:MM oder HH:MM:SS oder eine Zahl beinhalten.
Aber anscheinend nicht nur "beinhalten", sondern ausschließlich daraus bestehen...
Wenn ich den datetimepicker, mit dem ich über ftui Start- und Endzeitpunkt auf Uhrzeit im Format HH.MM.SS konfiguiriere, ist der Fehler weg. Hilft mir aber nichts, da ich es ja auf einen bestimmten Tag beziehen will.
Grüße
Martin
Hallo Martin,
das einzige was ich weiß, ist so das Du es in die DOIF Form bringen musst:
https://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung
Aber für einmalige Tage ist das so einfach gar nicht gebaut, das musst Du sicher selbst machen.
Ob DOIF noch in irgendeiner Variante etwas anderes versteht weiß ich nicht, die Entwicklung dort ist sehr dynamisch. ;D
Gruß Otto
Das mit den Wochentagen bringt mich in Sachen Datum leider nicht weiter.
Es scheint aber im DOIF zu klappen, wenn ich statt des Zeit-Datums-Strings einen epoch-Timestamp in den Dummies habe. Dafür habe ich einen zweiten Satz Dummies angelegt. Nur: Wie kriege ich mit einem notify die Strings aus dem erstens Satz von Dummies in timestamps konvertiert? Ich habe mal mit epoch() und str2time() probiert, da ich aber kein wirklicher Perl-Experte bin, leider ohne Erfolg.
Habt Ihr Tipps?
Grüße
Martin
Zitat von: dadoc am 30 Oktober 2018, 18:04:46
Das mit den Wochentagen bringt mich in Sachen Datum leider nicht weiter.
Es scheint aber im DOIF zu klappen, wenn ich statt des Zeit-Datums-Strings einen epoch-Timestamp in den Dummies habe. Dafür habe ich einen zweiten Satz Dummies angelegt. Nur: Wie kriege ich mit einem notify die Strings aus dem erstens Satz von Dummies in timestamps konvertiert? Ich habe mal mit epoch() und str2time() probiert, da ich aber kein wirklicher Perl-Experte bin, leider ohne Erfolg.
Habt Ihr Tipps?
Grüße
Martin
Du kannst die entsprechenden Informationen per Filter mit etwas Regex-Verständins abgreifen, siehe https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen
([[dummy_start_d:state:"(\d\d:\d\d:\d\d)$"]-[dummy_ende_d:state:"(\d\d:\d\d:\d\d)$"]] and ## Zeitintervall
[?dummy_start_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"] le $ymd and ## Datumsintervall
$ymd le [?dummy_ende_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"])
(set ...
Vielen Dank Damian,
ich habe Deinen Code ausprobiert. Ich verstehe das so, dass wenn ich Start- und Endzeitpunkt der Dummies so setze, dass sie den aktuellen Zeitpunkt beinhalten, der set-Event ausgelöst werden sollte. Das geschieht aber bislang nicht. Keine Fehler im Log, weshalb ich schließe, dass das DOIF nicht getriggert wird?
Grüße
Martin
Wenn alles richtig läuft, dann müssen die Timer gesetzt sein - das kann man in den Readings des DOIFs ja sehen. Wenn du die gleiche Start- und Endzeit nimmst, dann ist das Zeitintervall gleich Null, das ist nicht sinnvoll, denn Länge Null bedeutet kein Trigger.
Guten Morgen,
irgendwie scheint sich das DOIF da noch um einen bzw. mehrere Tage zu verrechnen:
dummy_start_d 29.10.2018 10:15:30
dummy_ende_d 31.10.2018 12:45:28
timer_01_c01 31.10.2018 10:15:30
timer_02_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
Ich dachte zunächst, es liegt evtl. am Enddatum 31. Aber:
dummy_start_d 25.10.2018 09:00:30
dummy_ende_d 07.11.2018 11:15:28
timer_01_c01 01.11.2018 09:00:30
timer_02_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
DOIF ist:
([[dummy_start_d:state:"(\d\d:\d\d:\d\d)$"]-[dimmy_ende_d:state:"(\d\d:\d\d:\d\d)$"]] and [?dummy_start_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"] le $ymd and $ymd le [?dummy_ende_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"]) (set testdummy loel)
Grüße
Martin
Du machst uns ein i für ein u vor ;)
Arghh... ja, das kommt davon, wenn man so was auf dem iPad rumtappert.
Die Berechnungsfehler bleiben aber dennoch erhalten:
dummy_start_d 15.10.2018 07:00:30
dummy_ende_d 15.11.2018 09:30:28
timer_01_c01 01.11.2018 07:00:30
timer_02_c01 01.11.2018 09:30:28
dummy_start_d 30.10.2018 06:00:30
dummy_ende_d 31.10.2018 15:15:28
timer_01_c01 01.11.2018 06:00:30
timer_02_c01 31.10.2018 15:15:28
Das ist doch ein klassisches Einsatzszenario für das Kalendermodul 57_Calendar.pm
Oder für ein notify mit entsprechend gesetztem Atttribut disabledForIntervals
Oder für dynamisch erzeugt at devices
oder oder oder...
So umständlich wie hier im Thread würde ich eine so simple Aufgabenstellung jedenfalls nicht angehen.
Zitat von: dadoc am 31 Oktober 2018, 10:48:34
Arghh... ja, das kommt davon, wenn man so was auf dem iPad rumtappert.
Die Berechnungsfehler bleiben aber dennoch erhalten:
dummy_start_d 15.10.2018 07:00:30
dummy_ende_d 15.11.2018 09:30:28
timer_01_c01 01.11.2018 07:00:30
timer_02_c01 01.11.2018 09:30:28
dummy_start_d 30.10.2018 06:00:30
dummy_ende_d 31.10.2018 15:15:28
timer_01_c01 01.11.2018 06:00:30
timer_02_c01 31.10.2018 15:15:28
Warum Berechnungsfehler? Die Uhrzeit stimmt, das Datum ist der nächste Triggerzeitpunkt und hat mit deinem Datum an dieser Stelle nichts zu tun.
Ah, ok. ich dachte, die Daten müssten übereinstimmen. Aber schalten tut es dennoch nicht so, wie es soll. Was mache ich falsch?
([keyremote_1_2] =~ "Short" and [[dummy_start_d:state:"(\d\d:\d\d:\d\d)$"]-[dummy_ende_d:state:"(\d\d:\d\d:\d\d)$"]] and [?dummy_start_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"] le $ymd and $ymd le [?dummy_ende_d:state:"^(\d\d).(\d\d).\d\d(\d\d)":"$3-$2-$1"])
(set testdummy loel)
DOELSE
(set testdummy unloel)
schaltet bei
dummy_start_d 31.10.2018 14:30:30
dummy_ende_d 31.10.2018 17:00:28
und Betätigung von Keyremote_1_2 um 14:40 Uhr den testdummy nicht auf loel, sondern auf unloel.
Ich hätte das jetzt so verstanden, dass wen das DOIF durch den Remote-Druck getriggert wird, es die Datumsberechnung durchführt und den ersten Befehl anbschickt.
Zitat von: betateilchen am 31 Oktober 2018, 10:54:10
So umständlich wie hier im Thread würde ich eine so simple Aufgabenstellung jedenfalls nicht angehen.
Ich hatte auch im Leben nicht damit gerechnet, dass das irgendwie kompliziert sein könnte - daher hatte ich es mir für ganz für den Schluss aufbewahrt. Aber mit at habe ich es auch nicht hinbekommen, scheint auch nicht so ohne weiter möglich, siehe https://forum.fhem.de/index.php?topic=91625.0
Grüße
Martin
Nimm doch DOIF_readings, da siehst du schon mal, ob die RegEx funktioniert. Und du brauchst sie auch nicht mehrfach.
DOIF_readings - habe es zwar gerade in der Commandref nachgelesen, bin aber nun doch reichlich verwirrt - zu viel Neues auf einmal für eine banal geglaubte Aufgabe, was mich jetzt schon viele Stunden gekostet hat und trotzdem noch nicht das tut, was ich will.
Ich glaube, ich setze erstmal von Hand einen Dummy, der vor dem Schalten abgefragt wird ... Vielleicht bekomme ich ja noch eine Erleuchtung...
Danke & Grüße
Martin
Ich habe fälschlicherweise die Jahreszahl nur zweistellig herausgefilter $ymd hat aber das Format YYYY-MM-DD.
Über DOIF_Readings lässt sich die Definition besser nachvollziehen:
defmod di_test2 DOIF ([[$SELF:start_z]-[$SELF:ende_z]] and [?$SELF:start] le $ymd and $ymd le [?$SELF:ende]) (set bla on) DOELSE (set bla off)
attr di_test2 DOIF_Readings start:[dummy_start_d:state:"^(\d\d).(\d\d).(\d\d\d\d)":"$3-$2-$1"],ende:[dummy_ende_d:state:"^(\d\d).(\d\d).(\d\d\d\d)":"$3-$2-$1"],\
start_z:[dummy_start_d:state:"(\d\d:\d\d:\d\d)$"], ende_z:[dummy_ende_d:state:"(\d\d:\d\d:\d\d)$"]
Es entstehen aus den Dummys separate Readings im DOIF für Zeit und Datum (hier kann man schon sehen, ob die Daten noch stimmen), die dann in der Bedingung abgegriffen werden. Diese Version habe ich persönlich bei mir auf Korrektheit geprüft ;)
Edit: Es fehlten noch die Zeittrigger
Edit: Bei einer Änderung der Dummys werden automatisch die Readings neu erstellt und die Zeittrigger neugesetzt :)
Vielen Dank Damian, ich war schon dabei, mir eine Routine für die myutils.pm zu basteln, mit str2time...
Zitat von: Damian am 31 Oktober 2018, 18:14:55
Edit: Es fehlten noch die Zeittrigger
Was genau meinst Du damit?
Das Ganze sieht bei mir nun so aus
Internals:
CFGFN
DEF ([[$SELF:dummy_start_d]-[$SELF:dummy_ende_d]] and [?$SELF:start] le $ymd and $ymd le [?$SELF:ende]) (set bla on) DOELSE (set bla off)
MODEL FHEM
NAME di_test2
NR 40470
NTFY_ORDER 50-di_test2
STATE initialized
TYPE DOIF
CHANGED:
ende_z: 16:45:21
CHANGEDWITHSTATE:
ende_z: 16:45:21
DOIF_Readings:
ende ::ReadingValDoIf($hash,'dummy_ende_d','state','','^(\d\d).(\d\d).(\d\d\d\d)','"$3-$2-$1"')
ende_z ::ReadingValDoIf($hash,'dummy_ende_d','state','','(\d\d:\d\d:\d\d)$')
start ::ReadingValDoIf($hash,'dummy_start_d','state','','^(\d\d).(\d\d).(\d\d\d\d)','"$3-$2-$1"')
start_z ::ReadingValDoIf($hash,'dummy_start_d','state','','(\d\d:\d\d:\d\d)$')
READINGS:
2018-10-31 18:51:26 cmd 0
2018-10-31 18:56:25 ende 2018-11-01
2018-10-31 18:56:26 ende_z 16:45:21
2018-10-31 18:51:26 mode enabled
2018-10-31 18:56:17 start 2018-10-01
2018-10-31 18:56:19 start_z 16:00:15
2018-10-31 18:51:26 state initialized
2018-10-31 18:51:26 timer_01_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
2018-10-31 18:51:26 timer_02_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
Regex:
DOIF_Readings:
dummy_ende_d:
ende:
state ^dummy_ende_d$:^state:
ende_z:
state ^dummy_ende_d$:^state:
dummy_start_d:
start:
state ^dummy_start_d$:^state:
start_z:
state ^dummy_start_d$:^state:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'di_test2','start') le $ymd and $ymd le ::ReadingValDoIf($hash,'di_test2','ende')
devices:
do:
0:
0 set bla on
1:
0 set bla off
helper:
DOIF_Readings_events
globalinit 1
last_timer 2
sleeptimer -1
interval:
0 -1
1 0
itimer:
all di_test2
localtime:
time:
0 [di_test2:dummy_start_d]
1 [di_test2:dummy_ende_d]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
uiState:
uiTable:
Attributes:
DOIF_Readings start:[dummy_start_d:state:"^(\d\d).(\d\d).(\d\d\d\d)":"$3-$2-$1"],ende:[dummy_ende_d:state:"^(\d\d).(\d\d).(\d\d\d\d)":"$3-$2-$1"],start_z:[dummy_start_d:state:"(\d\d:\d\d:\d\d)$"], ende_z:[dummy_ende_d:state:"(\d\d:\d\d:\d\d)$"]
Haben die Fehler bei den Timern (Wrong timespec : either HH:MM:SS or {perlcode}) etwas zu besagen?
Ich kann leider nicht behaupten, dass ich den Code schon voll verstehe...
Grüße
Martin
Zitat von: dadoc am 31 Oktober 2018, 19:02:50
Vielen Dank Damian, ich war schon dabei, mir eine Routine für die myutils.pm zu basteln, mit str2time...Was genau meinst Du damit?
Das Ganze sieht bei mir nun so aus
DEF ([[$SELF:dummy_start_d]-[$SELF:dummy_ende_d]] and [?$SELF:start] le $ymd and $ymd le [?$SELF:ende]) (set bla on) DOELSE (set bla off)
Das sind die falschen Zeitangaben, siehe meine Definition - das sind die eigentlichen Zeittrigger.
Ah ok, danke. Und schon sind die Fehler weg. Später werde ich es dann mal im Einsatz testen.
Grüße
Martin
Du wolltest wohl nur ein Zeitintervall abfragen und gar nicht über Zeit triggern, dann müsstest du deine Definition anpassen:
([?[$SELF:start_z]-[$SELF:ende_z]] and [?$SELF:start] le $ymd and $ymd le [?$SELF:ende] and "mytrigger") ...
Jetzt bin ich warm gelaufen, hier eine vereinfachte Version die nur das Zeitintervall (mit Datum) abfragt:
defmod di_test2 DOIF ([?$SELF:start] le "$ymd $hms" and "$ymd $hms" le [?$SELF:ende] and ["mytrigger"]) (...
attr di_test2 DOIF_Readings start:[dummy_start_d:state:"^(\d\d).(\d\d).(\d\d\d\d) (\d\d:\d\d:\d\d)$":"$3-$2-$1 $4"],ende:[dummy_ende_d:state:"^(\d\d).(\d\d).(\d\d\d\d) (\d\d:\d\d:\d\d)$":"$3-$2-$1 $4"]
Cool, danke, werde ich natürlich auch ausprobieren (und dann den Thread auf gelöst setzen). Auch die vorherige Version scheint im Praxistest schon genau das zu machen, was ich wollte. Vielen Dank!
Generell scheint die Datumsbehandlung in fhem noch etwas stiefmütterlich zu sein, sobald es sich nicht um wiederkehrende Wochentage o.ä. handelt. Sicher kann man mit Regex (fast) alles lösen, aber für nicht- oder Gelegenheitsprogrammierer birgt das zahllose Stolperfallen. Das Calendermodul muss ich mir noch einmal anschauen, schien mir beim Querlesen aber auch nicht unbedingt unkomplex...
Schönen Abend
Martin
Mal zur Info auch für Interessierte:
DOIF vergleicht Zeitintervalle als Zeichenketten. Zudem kennt es nur Zeitangaben im Format HH:MM:SS zum Triggern.
at wurde irgendwann auf das Format ISO8601 (YYYY-MM-DDTHH:MM:SS) erweitert. Vielleicht werde ich es irgendwann mal nachziehen, was allerdings einen gewissen Aufwand bedeutet.
Dann könnte man z. B. angeben: [2018-10-01T10:00:00 - 2018-11-01T20:00:00] oder indirekt über Readings.
Das von dir vorgegebene Format 02.11.2018 13:30 also TT.MM.YYYY HH:MM ist nicht für String-Vergleiche geeignet, dafür muss man mit dem Jahr beginnen, dann den Monat angeben und dann den Tag. An dieser Stelle sind uns andere Länder überlegen.
Meine letzte Definition macht einfach nur aus 02.11.2018 13:30:00 2018-11-02 13:30:00 (über DOIF_Readings). Damit lässt sich dann einfach ein zeitliches Intervall vergleichen:
start <= jetzt und jetzt <=ende
das entspricht der zuletzt angegebenen Bedingung im DOIF.
Zitat von: Damian am 31 Oktober 2018, 20:19:48
Das von dir vorgegebene Format 02.11.2018 13:30 also TT.MM.YYYY HH:MM ist nicht für String-Vergleiche geeignet, dafür muss man mit dem Jahr beginnen, dann den Monat angeben und dann den Tag. An dieser Stelle sind uns andere Länder überlegen.
Mich hat bei der Lösungssuche die Flexibilität von str2time in Sachen der unterschiedlichsten Formatierungen beeindruckt: https://metacpan.org/pod/release/RSE/lcwa-1.0.0/lib/lwp/lib/HTTP/Date.pm#DESCRIPTION
Grüße
Martin
Zitat von: dadoc am 31 Oktober 2018, 20:53:08
Mich hat bei der Lösungssuche die Flexibilität von str2time in Sachen der unterschiedlichsten Formatierungen beeindruckt: https://metacpan.org/pod/release/RSE/lcwa-1.0.0/lib/lwp/lib/HTTP/Date.pm#DESCRIPTION
Grüße
Martin
ja, allerdings kommt dein Format darin nicht vor ;)
Zitat von: Damian am 31 Oktober 2018, 21:10:14
ja, allerdings kommt dein Format darin nicht vor ;)
Ja, wohl wahr. Ist ja hierzulande auch ein total exotisches Format ;)
Ich vertrete auch unseren Entwicklern gegenüber immer den Standpunkt, dass das Frontend jedweder Applikation dem Benutzer die Informationen in ,,gewohnten" Formaten abbildet und es Aufgabe des Backends (lies: der Entwickler) ist, die entsprechende ,,Übersetzung" in den rechenbaren Bereich zu realisieren.
,,Mein" Format im konkreten Fall ließe sich jedoch auch im Bedarfsfall anpassen, es wird mit dem ftui datetimepicker gesetzt, und der erlaubt eine individuelle Formatierung: https://wiki.fhem.de/wiki/FTUI_Widget_Datetimepicker#Attribute
Hätte aber hier wohl auch nicht geholfen, da wohl die Verarbeitung des Datums, egal in welchem Format (außer epoch/timestamp?) bislang nicht ohne komplexe Regex-Lösungen vorgesehen ist.
Grüße
Martin
Zitat von: dadoc am 31 Oktober 2018, 21:28:02
Ja, wohl wahr. Ist ja hierzulande auch ein total exotisches Format ;)
Ich vertrete auch unseren Entwicklern gegenüber immer den Standpunkt, dass das Frontend jedweder Applikation dem Benutzer die Informationen in ,,gewohnten" Formaten abbildet und es Aufgabe des Backends (lies: der Entwickler) ist, die entsprechende ,,Übersetzung" in den rechenbaren Bereich zu realisieren.
,,Mein" Format im konkreten Fall ließe sich jedoch auch im Bedarfsfall anpassen, es wird mit dem ftui datetimepicker gesetzt, und der erlaubt eine individuelle Formatierung: https://wiki.fhem.de/wiki/FTUI_Widget_Datetimepicker#Attribute
Hätte aber hier wohl auch nicht geholfen, da wohl die Verarbeitung des Datums, egal in welchem Format (außer epoch/timestamp?) bislang nicht ohne komplexe Regex-Lösungen vorgesehen ist.
Grüße
Martin
Doch, wenn du Datetimepicker auf YYYY-MM-DD HH:MM:SS umstellst, dann kannst du direkt in der Bedingung angeben
([?dummy_start_d] le "$ymd $hms" and "$ymd $hms" le [?dummy_ende_d] and ["mytrigger"])(...
Dann brauchst keine Kunstgriffe über Regex. Das DOIF_Readings-Attribut kannst du dann löschen.
Wusste ich nicht, hatte die DOIF-Dokus so interpretiert, dass nur Uhrzeiten zum Berechnen herangezogen werden.
Aber so hätte man halt im Frontend wieder eine hierzulande unübliche Darstellung.
Zitat von: dadoc am 31 Oktober 2018, 21:41:04
Wusste ich nicht, hatte die DOIF-Dokus so interpretiert, dass nur Uhrzeiten zum Berechnen herangezogen werden.
Aber so hätte man halt im Frontend wieder eine hierzulande unübliche Darstellung.
Hier wird auch nichts berechnet, es wird, wie schon geschrieben, ein String-Vergleich gemacht, dazu musst du nur wissen, dass in Perl Strings nicht mit
<= sondern mit
le verglichen werden und "
$ymd $hms" die aktuelle Zeit und Datum im Format "
YYYY-MM-DD HH:MM:SS" beinhaltet.
Zitat von: Damian am 31 Oktober 2018, 21:45:53
dazu musst du nur wissen, dass in Perl...
,,nur" ist gut ;) Aber das ist ja das Tolle an diesem Forum, dass da, wo man (noch) nicht so weit ist und nicht mehr weiter kommt, die Hilfe nicht auf sich warten lässt. Nochmals vielen Dank dafür und für das DOIF-Modul.
Grüße
Martin