Hallo,
ich habe in einem Reading die Uhrzeit im Format h:m:s stehen. Jetzt möchte ich die Uhrzeit allerdings im Format h:m stehen haben. Also ohne Sekunden. Kann mir hierbei einer helfen?
Gruß, Sascha
Wie kommt denn die Uhrzeit da rein?
Kannst Du das evtl. vorher beeinflussen?
Wenn nein, bieten sich mehrere Wege. Du könntest z.B. ein userReading erstellen oder readingsChange benutzen.
Gruß
Dan
Die Uhrzeit kommt über das Modul Calview in das Reading. Da ich die Uhrzeit ohne Sekunden in Smartvisu haben möchte, muß ich das Reading verändern. Mit dem Attribut "userreading" erstelle ich ja quasi eine Kopie des eigentlichen Readings, nur halt in neuer Form.
Das Modul "readingsChange" kannte ich noch nicht.
Wenn gelöst, dann bitte als solches den Thread markieren (Titel ändern). Danke
so recht komme ich mit "readingsChange" nicht weiter.
Was muß ich nehmen um von z.B. 17:15:00 auf 17:15 zu kommen?
Was muß ich für <toReplace> <replaceWith> einsetzen?
define change_001_btime readingsChange CalendarView t_001_btime hh:mm:ss hh:mm
Kann man auch mit einem define mehrer Readings ändern? Also t_001_btime, t_002_btime, etc. dann die Nummer mit Wildcard #?
Macht es nicht mehr Sinn die Anzeige in Smartvisu zu formatieren, als ein Reading zu ändern?
Ich würde die Datenbasis nie ändern, sondern immer nur die in eine Berechnung/Anzeige eingehenden Daten "formatieren".
so habe ich es in Smartvisu stehen: <p>{{ basic.value(id~'fc'~nr~'_btime', id~'_fc'~nr~'_btime') }}</p>
im Smartvisu-Forum habe ich auch schon gepostet: https://knx-user-forum.de/forum/supportforen/smartvisu/830654-zeit-ohne-sekunden-darstellen (https://knx-user-forum.de/forum/supportforen/smartvisu/830654-zeit-ohne-sekunden-darstellen)
Da kann mir leider auch keiner helfen...
Hi,
ich würde auch nie an der Datenbasis rummachen, außer das Modul hat extra selbst eine Einstellung dafür. Dafür ist userReading besser, also in etwa:
attr <device> userReading zeitOhneSekunden {my @pieces = split(/:/,ReadingsVal("<device>","<zeit-reading>","0:0:0"));; return $pieces[0].":".$pieces[1]}
Möglicherweise müssen statt ";;" nur ein ";" hin.
...und möglicherweise geht das mit RegEx kürzer, aber das kann ich nicht aus dem Kopf.
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 18 Mai 2017, 15:08:34
Hi,
ich würde auch nie an der Datenbasis rummachen, außer das Modul hat extra selbst eine Einstellung dafür. Dafür ist userReading besser, also in etwa:
attr <device> userReading zeitOhneSekunden {my @pieces = split(/:/,ReadingsVal("<device>","<zeit-reading>","0:0:0"));; return $pieces[0].":".$pieces[1]}
Möglicherweise müssen statt ";;" nur ein ";" hin.
...und möglicherweise geht das mit RegEx kürzer, aber das kann ich nicht aus dem Kopf.
Gruß,
Thorsten
Mit RegEx:
attr <device> userReading zeitOhneSekunden {ReadingsVal($NAME,"<zeit-reading>","00:00:00")=~/^(\d{1,2}):(\d\d):(\d\d)$/?"$1:$2":ReadingsVal($NAME,"<zeit-reading>","00:00:00")}
Gruß
Dan
EDIT: Sorry, war noch eine ) zu viel.
Zitat von: DeeSPe am 18 Mai 2017, 15:21:30
Mit RegEx:
Da sieht dann RegEx in dem Fall eher weniger elegant aus...
Zitat von: Thorsten Pferdekaemper am 18 Mai 2017, 15:24:12
Da sieht dann RegEx in dem Fall eher weniger elegant aus...
Ist ungetestet, sollte aber funktionieren.
Sieht nur etwas aufgeblähter aus weil ich im Nicht-Match-Fall das ReadingsVal zurück gebe.
Gruß
Dan
habe im Attribut usereading jetzt folgendes stehen: zeitOhneSekunden {ReadingsVal($NAME,"t_001_btime","00:00:00")=~/^(\d{1,2}):(\d\d):(\d\d)$/)?"$1:$2":ReadingsVal($NAME,"t_001_btime","00:00:00")}
bekomme leider eine Fehlermeldung:
Error evaluating CalendarView userReading zeitOhneSekunden: syntax error at (eval 4464) line 1, near "/^(\d{1,2}):(\d\d):(\d\d)$/)"
Da ich ja mehrer Readings (t_001_btime, t_002_btime, t_003_btime, usw.) habe, muß ich jetzt für jedes den Code nehmen oder kann man das auch noch abkürzen?
Zitat von: Cybers am 18 Mai 2017, 15:35:49
habe im Attribut usereading jetzt folgendes stehen: zeitOhneSekunden {ReadingsVal($NAME,"t_001_btime","00:00:00")=~/^(\d{1,2}):(\d\d):(\d\d)$/)?"$1:$2":ReadingsVal($NAME,"t_001_btime","00:00:00")}
bekomme leider eine Fehlermeldung:
Error evaluating CalendarView userReading zeitOhneSekunden: syntax error at (eval 4464) line 1, near "/^(\d{1,2}):(\d\d):(\d\d)$/)"
Hab gerade gesehen dass eine ) zu viel war und habe es oben geändert!
Gruß
Dan
Zitat von: Cybers am 18 Mai 2017, 15:35:49Da ich ja mehrer Readings (t_001_btime, t_002_btime, t_003_btime, usw.) habe, muß ich jetzt für jedes den Code nehmen oder kann man das auch noch abkürzen?
In dem Fall würde ich das mit notify machen:
define setZeitOhneSekunden notify <device>:t_..._btime.* {my @pieces = split(/:/,$EVTPART1);; fhem("setreading <device> ".$EVTPART0."_ohne ".$pieces[0].":".$pieces[1])}
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 18 Mai 2017, 15:46:50
In dem Fall würde ich das mit notify machen:
define setZeitOhneSekunden notify <device>:t_..._btime.* {my @pieces = split(/:/,$EVTPART1);; fhem("setreading <device> ".$EVTPART0."_ohne ".$pieces[0].":".$pieces[1])}
Gruß,
Thorsten
$EVTPART0 enthält aber noch den Doppelpunkt am Ende!?
define setZeitOhneSekunden notify <device>:t_..._btime.* {my $read=$EVTPART0;; $read=~s/:$//;; my @pieces = split(/:/,$EVTPART1);; fhem("setreading <device> ".$read."_ohne $pieces[0]:$pieces[1]")}
Oder mit chop statt Regex:
define setZeitOhneSekunden notify <device>:t_..._btime.* {my $read=$EVTPART0;; chop($read);; my @pieces = split(/:/,$EVTPART1);; fhem("setreading <device> ".$read."_ohne $pieces[0]:$pieces[1]")}
Gruß
Dan
Ein Danke an euch zwei. Ihr habt mir sehr geholfen.
Gruß, Sascha