Deutsches Datum zu Timestamp

Begonnen von Doemy, 27 Februar 2022, 20:47:14

Vorheriges Thema - Nächstes Thema

Doemy

Hallo liebe Gemeinde,

ich lese in Fhem einen Google Kalender aus uns hole die Termine und Details per CALVIEW.
Das Funktioniert soweit auch alles, die Einträge werden in Readings angezeigt, das Datum im Deutschen Format (z. B. 27.02.2022).

Nun möchte ich die Daten per Modbus weitergeben, dazu muss das Datum im Timestamp-Format sein.
Leider versuche ich das schon einige Stunden erfolglos.
Den Fhem-Wiki Artikel "rechnen mit Zeitangaben" habe ich gelesen, leider klappt es aber trotzdem nicht.

Ob der Timestamp in einem Reading im CALVIEW ist oder in einem neuen Device ist, spielt keine Rolle.

Wahrscheinlich ist es ein Klacks für euch und ich bin einfach zu blöd. 8)
Ich wäre dankbar für eure Hilfe.  :)

Gruß Thomas

Otto123

Hallo Thomas,

Du meinst Du brauchst sowas? Test in der FHEM Kommandozeile:
{my $dat='27.02.2022';;my @arr=split ('\.', $dat);; return "$arr[2]-$arr[1]-$arr[0] 00:00:00"}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Doemy

Hallo Otto,

Danke für deine Antwort.
nicht ganz, vielleicht habe ich mich falsch ausgedrückt. Es muss ein UNIX-Timestamp sein, der nur aus Zahlen besteht.
Beispiel: 27.02.2002 00:00:00 ergibt 1645916400

Gruß Thomas

Otto123

#3
Aber das Beispiel stand doch quasi im Wiki :)

{my ($d,$m,$y) = split(/\./,"27.02.2022");; $m=$m-1;; return timelocal('0','0','0',$d,$m,$y) }
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Für die Sparfüchse  :P :
Vom Monat eins abziehen kann man auch direkt bei der Parameterangabe:
{my ($d,$m,$y) = split(/\./,'27.02.2022');; return timelocal(0,0,0,$d,$m-1,$y) }

Doemy

#5
Guten Abend,

vielen Dank euch für die Antworten.

Leider bekomme ich es aber nicht hin, dass ich den geposteten Code einzubinden, damit es funktioniert.
Weder als UserReading im CALVIEW, noch dass der Wert auf ein anderes Device geschrieben wird. ich weiß ich, was ich falsch mache.


Wenn ich mir den Termin in Unix-Zeit auf ein Device übertragen lassen will, wird jedes Mal der Code auf das Device übertragen, anstatt den umgerechneten Wert.
define AT_date_to_unix at +*01:00:00 set Termin_unix_time {my ($d,$m,$y) = split(/\./,(ReadingsVal('Kalender_1_Beginn','state',''));; return timelocal(0,0,0,$d,$m-1,$y) }  ???

Auch wenn ich ein UserReading anlegen will, bekomme ich nur Fehlermeldungen...

Ich finde keine vernünftige Anleitung wie ich für beides genau vorgehen muss, deshalb hoffe ich nochmals auf eure Hilfe.

Gruß Thomas

Otto123

#6
it's magic - it's set magic  8) https://fhem.de/commandref_DE.html#set
define AT_date_to_unix at +*01:00:00 set Termin_unix_time {(my ($d,$m,$y) = split(/\./, ReadingsVal('Kalender_1_Beginn','state',''));;;; return timelocal(0,0,0,$d,$m-1,$y) )}
Edit: Fehler korrigiert
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Doemy

Leider ist auch hier die Ausgabe im Device "Termin_unix_time" nur dein geposteter Code

{(my ($d,$m,$y) = split(/\./,(ReadingsVal('Kalender_1_Beginn','state',''))

Otto123

#8
Ja ok im at müssen es im define an dieser Stelle eventuell vier sein ;;;;  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Doemy

Habe ich versucht,

define AT_date_to_unix at +*01:00:00 set Termin_unix_time {(my ($d,$m,$y) = split(/\./,(ReadingsVal('Kalender_1_Beginn','state',''));;;; return timelocal(0,0,0,$d,$m-1,$y) )}

jetzt bekomme ich eine Fehlermeldung im Device...

"syntax error at (eval 17610) line 1, at EOF Global symbol "$d" requires explicit package name (did you forget to declare "my $d"?) at (eval 17610) line 1. Global symbol "$m" requires explicit package name (did you forget to declare "my $m"?) at (eval 17610) line 1. Global symbol "$y" requires explicit package name (did you forget to declare "my $y"?) at (eval 17610) line 1."

Otto123

#10
Da ist ne Klammer ( zuviel! Siehe #6
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Doemy

Klappt leider trotzdem nicht...

Fehler:
"Undefined subroutine &main::timelocal called at (eval 1853) line 1."

Otto123

Aber das Beispiel aus #3 hat bei dir in der fhem Kommandozeile funktioniert?  ???
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Doemy

Nein, da kommt der gleiche Fehler.
#1 funktioniert.

Otto123

Dann musst Du noch als erste Perl Anweisung schreiben:
use Time::Local;und schön die Anzahl der ; beachten  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz