FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: xasher am 03 März 2023, 15:09:03

Titel: Reading als Userreading formatieren
Beitrag von: xasher am 03 März 2023, 15:09:03
Hallo zusammen,

ich habe ein kleines Problem bei der Formatierung eines Wertes als Userreading

Mein Reading liefert ein Zeitstempel im folgenden Format:
timestamp: 2023-03-03T14:01:38+00:00

Ich hätte gerne so ein Format "14:01:38 03.03.2023". Den ersten Teil für das Datum habe ich schon, jetzt bekomme ich aber die Uhrzeit nicht hin:
LadenEnde {join("." => reverse split('-', (split(' ',ReadingsTimestamp("Auto","timestamp",0)))[0]))}

Hat jemand das so irgendwo im Einsatz?

VG
Alex
Titel: Antw:Reading als Userreading formatieren
Beitrag von: Otto123 am 03 März 2023, 15:35:06
Hallo Alex,

mein Test
{my $val='timestamp: 2023-03-03T14:01:38+00:00';; $val=~m/T(.*)\+/;;return $1}

Gruß Otto
Titel: Antw:Reading als Userreading formatieren
Beitrag von: xasher am 03 März 2023, 15:54:49
Hallo Otto,

vielen Dank für deine Mühe. Ich habe einen Logikfehler. Ich meinte nicht das Datum des Readings, sondern den Wert des Readings. Da möchte ich das Datum formatiert haben. Ist aber vermutlich nicht so wichtig.

Ich habe das mal so gemacht. Jetzt kommt das raus:

LadenEnde2: 17:51:12.867778

Das Userreading ist so definiert:
LadenEnde2 {my $val=ReadingsVal("BMW","fuel_and_battery_charging_end_time",0);; $val=~m/T(.*)\+/;;return $1}

Der ursprüngliche Readingswert sieht so aus:
2023-03-03 15:49:15   fuel_and_battery_charging_end_time 2023-03-03T17:51:12.867778+00:00


Also, es sieht besser aus, aber die Zeit "17:51:12.867778" ist noch nicht so schön. Das Datum wäre auch noch super.

Danke dir schon mal!!!

Grüße
Alex


Titel: Antw:Reading als Userreading formatieren
Beitrag von: jhohmann am 03 März 2023, 16:10:37
Passt das?
{my $val='2023-03-03T14:01:38+12:34';; $val=~m/(.*)T(.*)\+/;;return join("." => reverse split('-',$1))." ".$2}
Bei mir kommt raus:
03.03.2023 14:01:38
Titel: Antw:Reading als Userreading formatieren
Beitrag von: xasher am 03 März 2023, 16:20:18
Hallo JHohmann

nocht nicht ganz: Siehe oben - ich habe das Readingsdatum versehentlich geschrieben. Gemeint war aber den Value des Readings.
Damit wäre $var= "2023-03-03T17:51:12.867778+00:00".
Sorry.

Das kommt bei deinem Userreadings raus:
03.03.2023 17:51:34.667388

Schön wäre so was "17:51:34 03.03.2023". Danke für eure Unterstützung.

Gruß
Alex
Titel: Antw:Reading als Userreading formatieren
Beitrag von: betateilchen am 03 März 2023, 16:24:34

my $val = '2023-03-03T17:51:12.867778+00:00';
$val =~ /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
return "$3.$2.$1 $4:$5:$6";


Zitat von: xasher am 03 März 2023, 16:20:18
Schön wäre so was "17:51:34 03.03.2023".

Dann musst Du halt die letzte Zeile anpassen:


return "$4:$5:$6 $3.$2.$1";



--
Titel: Antw:Reading als Userreading formatieren
Beitrag von: xasher am 03 März 2023, 16:33:37
Hallo betateilchen, hallo alle,

super, damit komme ich klar. Das funktioniert so!!!

Besten Dank
Alex
Titel: Antw:Reading als Userreading formatieren
Beitrag von: TomLee am 04 März 2023, 17:35:44
Noch eine Möglichkeit:

Zitat{use Time::Piece;
my $t = localtime(time_str2num("2023-03-03T14:01:38+00:00"));
return $t->dmy('.').' '. $t->hms;}

edit:

ohne Verwendung von localtime und time_str2num, direkt ein Time::Piece Objekt machen.
Warum man das use Time::Piece nicht braucht und vorallem das use Time::Piece erst mit Perl 5.8 vorhanden sein soll (bei mir ist 5.28 installiert), ist mir unklar.


my $t = Time::Piece->strptime('2023-03-03T14:01:38+00:00','%Y-%m-%dT%T%Z');
return $t->dmy('.').' '.$t->hms;