Datum/Uhrzeit in DOIF vergleichen

Begonnen von call_me_driver, 26 Januar 2019, 21:05:32

Vorheriges Thema - Nächstes Thema

call_me_driver

Tach,

ich will in einem DOIF (hört auf ein IFTTT-Befehl) noch eine Datumsüberprüfung einführen.
Und zwar dass die Aktion darunter nur durchgeführt wird, wenn der Sonnenuntergang vorbei is.

([Web_IFTTT:"^Command.*$"] and [time_str2num($year."-".sprintf("%02i",$month)."-".sprintf("%02i",$mday)." ".ReadingsVal("Sonnenuntergang", "state",0))] < time_str2num(TimeNow()) )

Wenn ich beide Ausgaben in ein Dummy-Device schreiben lasse, is sowohl Datum (ohne time_str2num) als auch Unix-Timestamp richtig.

Trotzdem bekomm ich die Fehlermeldung

Zitaterror: Wrong timespec time_str2num($year."-".sprintf("%02i",$month)."-".sprintf("%02i",$mday)."".ReadingsVal("Sonnenuntergang","state",0)): either HH:MM:SS or {perlcode}

Wo liegt mein Fehler? (und gibt es ggf. ne einfachere methode?)

setstate Sonnenuntergang 17:35:55
setstate Sonnenuntergang 2019-01-26 21:00:09 state 17:35:55


TEst-Dummy
setstate XXX_1 2019-01-26 17:35:55
setstate XXX_1 2019-01-26 20:57:50 state 2019-01-26 17:35:55


Damian

Zitat von: call_me_driver am 26 Januar 2019, 21:05:32
Tach,

ich will in einem DOIF (hört auf ein IFTTT-Befehl) noch eine Datumsüberprüfung einführen.
Und zwar dass die Aktion darunter nur durchgeführt wird, wenn der Sonnenuntergang vorbei is.

([Web_IFTTT:"^AlexaHome.*$"] and [time_str2num($year."-".sprintf("%02i",$month)."-".sprintf("%02i",$mday)." ".ReadingsVal("Sonnenuntergang", "state",0))] < time_str2num(TimeNow()) )

Wenn ich beide Ausgaben in ein Dummy-Device schreiben lasse, is sowohl Datum (ohne time_str2num) als auch Unix-Timestamp richtig.

Trotzdem bekomm ich die Fehlermeldung

Wo liegt mein Fehler? (und gibt es ggf. ne einfachere methode?)

setstate Sonnenuntergang 17:35:55
setstate Sonnenuntergang 2019-01-26 21:00:09 state 17:35:55


([Web_IFTTT:"^AlexaHome.*$"] and [?[Sonnenuntergang]-05:00])

dürfte etwas einfacher sein ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

call_me_driver

Stimmt.... was macht die -05:00 ?


Zitat von: Damian am 26 Januar 2019, 21:15:06
([Web_IFTTT:"^AlexaHome.*$"] and [?[Sonnenuntergang]-05:00])

dürfte etwas einfacher sein ;)

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

call_me_driver

ah... verstehe.. du sagst quasi nicht "wenn sonnenuntergang < aktuelle zeit" ist...
sondern wenn aktuelle zeit zwischen sonnenuntergang und 5 uhr liegt...

versteh ich des richtig? dann kann ich ja 5 uhr auch durch sonnenaufgang ersetzen.... !?

Zitat von: Damian am 26 Januar 2019, 21:32:18
Ein Zeitintervall hat ein Anfang und ein Ende ;)

https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen

Damian

Zitat von: call_me_driver am 26 Januar 2019, 22:00:52
ah... verstehe.. du sagst quasi nicht "wenn sonnenuntergang < aktuelle zeit" ist...
sondern wenn aktuelle zeit zwischen sonnenuntergang und 5 uhr liegt...

versteh ich des richtig? dann kann ich ja 5 uhr auch durch sonnenaufgang ersetzen.... !?

ja
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

call_me_driver


Peter aus Calw

Hallo,
möchte von einem  Datums-reading (device:datum) die Zeitspanne zum aktuellen Datum in Tage x anzeigen.
Wie kann man das lösen ?
Gruß Peter und schöne Weihnachten

Damian

#8
Hier eine Möglichkeit:

defmod di_diff_days DOIF init {[00:00];set_Reading("Tage",(::time_str2num("$year-".[mydevice:Datum]." 00:00:00") - ::time_str2num("$ymd 00:00:00"))/86400)}

Im Reading Tage des Moduls befindet sich die Anzahl der Tage zum Datum, welches sich in [mydevice:Datum] befindet. Das Datum wird im Format MM-DD erwartet. Bei Änderung des Datums wird die Anzahl automatisch aktualisiert.

Edit: Definition angepasst. Mit init wird sofort nach der Definition das Tage-Reading belegt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF