[Gelöst] Eine Uhrzeit 19:59:43 per userreadings zu 19.59 formatieren

Begonnen von 4eversr, 08 April 2018, 13:51:47

Vorheriges Thema - Nächstes Thema

4eversr

Hallo,
ich möchte mir gerne an einem kleinen OLED-Display anzeigen lassen, um welche Uhrzeit sich meine Rolladen abends herunterfahren.
Im Prinzip habe ich auch schon alle Werte vorliegen, ich scheitere nur kläglich an der Umformatierung der Uhrzeit aus meinem Twilight-Modul.

Das Twilight Modul gibt mir einen internen Wert namens "ss_indoor" heraus, der die Form: HH:MM:SS hat, also z.B. 19:59:43.
Diesen Wert kann man per MQTT leider nicht übertragen, ich müsste den Wert in eine Zahl mit Punkt umformatieren, also z.B. HH.MM , in meinem Fall 19.59 .
Also brauche ich ein Userreading was nur die ersten 5 Stellen des Wertes ausliest, und im nachhinein dann noch den Doppelpunkt durch einen einfachen Punkt ersetzt.

Ein bißchen Erfolg hatte ich schon, denn ich habe es geschafft die Doppelpunkte durch Punkte zu ersetzen:

ZitatuserReadings Verdunkelung { my $val = (ReadingsVal("$name", "ss_indoor", 0)); $val =~ s/:/\./g; return $val;}

Das funktioniert schonmal insofern, dass dort nun der Wert 19.59.43 steht, aber wie kriege ich die letzten 3 Zeichen weggeschnitten ?
Ich denke ich muss irgendwo in meinen String das hier einbauen: (\d+.\d+) um nur Stunden und Minuten zu kriegen, ich habe aber keine Ahnung wo ;)





KernSani

Du kannst z.B. mit substr arbeiten...


Kurz, weil mobil...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

4eversr

#2
Der bloße Hinweis auf Substr hilft mir aktuell leider nicht.
Kriege ich das nicht mit Regex allein auch irgendwie auch hin, damit kenne ich mich jetzt etwas aus. - Ich fürchte Substr würde mich aktuell komplett überfordern ;)

Verdunkelung { my $val = (ReadingsVal("$name", "ss_indoor", 0)); $val =~ s/:/\./g; return $val;},
VerdunkHHMM { my $val = (ReadingsVal("$name", "Verdunkelung", 0)); $val =~ m/\d/\d./\d/\d/g;return $val;}


Das hatte ich zwischenzeitlich noch in verschiedenen Konstellationen versucht: Mit und ohne Klammern, mit und ohne m und g, mit und ohne Escape-Character. Bisher ohne Erfolg...

Thorsten Pferdekaemper

Mein Versuch:

VerdunkHHMM { my @val = split(":",ReadingsVal("$name", "ss_indoor", "00:00:00")); return $val[0].".".$val[1]; }

Gruß,
   Thorsten
FUIP

4eversr

#4
@Thorsten

Super, das hat sofort funktioniert ! Das hätte ich niemals hinbekommen.
Die Rolladen-Schließ-Uhrzeit kann nun erfolgreich auf meinem OLED Display am Wemos D1 Mini angezeigt werden.

Danke dafür.

KernSani

Zitat von: 4eversr am 08 April 2018, 15:03:51
Das hätte ich niemals hinbekommen.
Ich glaube mit substr (und ganz kurz Google) hättest du das auch selbst hinbekommen ;)
Aber viele Wege führen nach Rom :-) Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts?


Kurz, weil mobil...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...