FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Doemy am 27 Februar 2022, 20:47:14

Titel: Deutsches Datum zu Timestamp
Beitrag von: Doemy am 27 Februar 2022, 20:47:14
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
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 27 Februar 2022, 21:35:24
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
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 27 Februar 2022, 22:18:24
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
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 27 Februar 2022, 23:05:39
Aber das Beispiel stand doch quasi im Wiki  (https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit#Beispiel:_Wochentag_zu_Datum):)

{my ($d,$m,$y) = split(/\./,"27.02.2022");; $m=$m-1;; return timelocal('0','0','0',$d,$m,$y) }
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: TomLee am 27 Februar 2022, 23:18:16
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) }
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 28 Februar 2022, 22:26:27
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
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 28 Februar 2022, 22:47:42
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
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 28 Februar 2022, 23:25:54
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',''))
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 28 Februar 2022, 23:31:10
Ja ok im at müssen es im define an dieser Stelle eventuell vier sein ;;;;  ;)
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 28 Februar 2022, 23:39:21
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."
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 28 Februar 2022, 23:45:55
Da ist ne Klammer ( zuviel! Siehe #6
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 28 Februar 2022, 23:59:56
Klappt leider trotzdem nicht...

Fehler:
"Undefined subroutine &main::timelocal called at (eval 1853) line 1."
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 01 März 2022, 00:07:28
Aber das Beispiel aus #3 hat bei dir in der fhem Kommandozeile funktioniert?  ???
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 01 März 2022, 00:09:38
Nein, da kommt der gleiche Fehler.
#1 funktioniert.
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Otto123 am 01 März 2022, 00:39:22
Dann musst Du noch als erste Perl Anweisung schreiben:
use Time::Local;und schön die Anzahl der ; beachten  ;)
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: TomLee am 01 März 2022, 00:47:53
Oder fhemTimeLocal (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#fhemTimeLocal) verwenden ? Ich habs eben erst entdeckt.

{my ($d,$m,$y) = split(/\./,'27.02.2022');; return fhemTimeLocal(0,0,0,$d,$m-1,$y) }

edit:

es ist zu spät  ::)

edit 2:

doch doch:

{my ($d,$m,$y) = split(/\./,'27.02.2022');; return fhemTimeLocal(0,0,0,$d,$m-1,$y-1900) }
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: betateilchen am 01 März 2022, 11:53:30
Zitat von: Doemy am 27 Februar 2022, 20:47:14
ich lese in Fhem einen Google Kalender aus uns hole die Termine und Details per CALVIEW.

Warum der Umweg über CALVIEW und nicht direkt über das Calendar-device?

Dann brauchst Du auch kein at, um irgendwas aus dem Kalendereintrag auszuführen, sondern kannst direkt den vom Calendar-device erzeugten event verwenden.
Titel: Antw:Deutsches Datum zu Timestamp
Beitrag von: Doemy am 03 März 2022, 21:29:03
Habe es nun endlich hinbekommen, dass alles so funktioniert, wie es soll.   ;D
Danke euch allen für die Hilfen  :)