Reading als Userreading formatieren

Begonnen von xasher, 03 März 2023, 15:09:03

Vorheriges Thema - Nächstes Thema

xasher

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

Otto123

Hallo Alex,

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

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

xasher

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



jhohmann

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
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

xasher

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

betateilchen

#5

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";



--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

xasher

Hallo betateilchen, hallo alle,

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

Besten Dank
Alex

TomLee

#7
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;