[gelöst] Reading formatieren - Uhrzeit ohne Sekunden

Begonnen von Cybers, 18 Mai 2017, 11:54:14

Vorheriges Thema - Nächstes Thema

Cybers

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
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Cybers

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.
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Amenophis86

Wenn gelöst, dann bitte als solches den Thread markieren (Titel ändern). Danke
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Cybers

#4
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 #?
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

rabehd

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".
Auch funktionierende Lösungen kann man hinterfragen.

Cybers

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
Da kann mir leider auch keiner helfen...
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Thorsten Pferdekaemper

 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
FUIP

DeeSPe

#8
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.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Thorsten Pferdekaemper

Zitat von: DeeSPe am 18 Mai 2017, 15:21:30
Mit RegEx:
Da sieht dann RegEx in dem Fall eher weniger elegant aus...
FUIP

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Cybers

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?
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Thorsten Pferdekaemper

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
FUIP

DeeSPe

#14
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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe