uiTable: Zahlendarstellung im Format #.###,##

Begonnen von CQuadrat, 11 Mai 2022, 11:40:51

Vorheriges Thema - Nächstes Thema

CQuadrat

Hallo Zusammen,

gibt es eine einfache(!) Möglichkeit, Zahlen in uiTable im deutschen Format darzustellen?
Also anstelle von
3362.47 kWh
in
3.362,47 kWh
(mit Tausenderpunkten und Komma als Dezimalzeichen)


Danke und Gruß

Christoph
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

Damian

#1
Zitat von: CQuadrat am 11 Mai 2022, 11:40:51
Hallo Zusammen,

gibt es eine einfache(!) Möglichkeit, Zahlen in uiTable im deutschen Format darzustellen?
Also anstelle von
3362.47 kWh
in
3.362,47 kWh
(mit Tausenderpunkten und Komma als Dezimalzeichen)


Danke und Gruß

Christoph

Man kann zwar neuerdings den Output-Parameter verwenden, siehe https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card

Allerdings sollte das Ergebnis eine Zahl im Sinne von Perl sein (also mit Punkt), weil dieser Wert als Zahl für die Bestimmung der Farbe benötigt wird.

Edit: Wo genau willst du die Zahl sehen? Ich ging von der Funktion Card aus.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CQuadrat

Aktuell will ich das gerade in der cylinder-Funktion verwenden.

Ich habe sogar eine entsprechende Konvertierungsfunktion in myUtils. Wenn ich die in uiTable aufrufen könnte ....
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

Sany

ZitatWenn ich die in uiTable aufrufen könnte ....

....
::deineFunktion()

sollte klappen.
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Zitat von: CQuadrat am 11 Mai 2022, 14:09:54
Aktuell will ich das gerade in der cylinder-Funktion verwenden.

Ich habe sogar eine entsprechende Konvertierungsfunktion in myUtils. Wenn ich die in uiTable aufrufen könnte ....

cylinder geht auch von einer Perl-Zahl aus. Man kann nur die Nachkommastellen definieren.


sonst, wie von Sany vorgeschlagen, kannst beliebigen Perlcode in einer Zelle angeben:

::meineFunktion([mydevice:myreading])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CQuadrat

#5
Leider nicht ganz.
Meine Funktion wird zwar aufgerufen, aber aus ursprünglich 6123.7 wird dann durch meine Funktion 6.123,7 was dann in uiTable zu 6 wird.

Vermutlich, da eine "Perl"-Zahl erwartet wird.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

Damian

Zitat von: CQuadrat am 11 Mai 2022, 14:41:27
Leider nicht ganz.
Meine Funktion wird zwar aufgerufen, aber aus ursprünglich 6123.7 wird dann durch meine Funktion 6.123,7 was dann in uiTable zu 6 wird.

Vermutlich, da eine "Perl"-Zahl erwartet wird.

Genau. Das passiert bei den vordefinierten SVG-Funktionen von mir.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CQuadrat

FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

Damian

Zitat von: CQuadrat am 12 Mai 2022, 08:46:34
Schade  :-[. Aber es gibt Schlimmeres  ;).

Naja, man kann alles programmieren, allerdings sind jetzt schon die Parametrisierungsmöglichkeiten der Funktionen vom Umfang her grenzwertig. Daher will ich sie nicht weiter aufblähen. Bei größeren Zahlen, gehe ich bei mir auf die nächstgrößere Einheit (W-> KW, KW-MW) und komme mit weniger Ziffern aus, was platzsparender ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sany

ZitatSchade  :-[. Aber es gibt Schlimmeres  ;).

du kannst das ja für Dich selbst machen. Der Weg dorthin:

https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eigene_uiTable-Funktionen_programmieren

wie dort beschrieben brauchst Du eine Datei, in der Deine eigenen Funktionen liegen und die Du dann in uiTable aufrufst.
Dann kopierst Du Dir aus 98_DOIF.pm die Funktionen für Cylinder, benennst sie um und passt sie entsprechend an. In Deiner ui_Table rufst Du dann diese Funktion auf.

Habe ich so bei mir für ein paar Dinge gemacht, funktioniert prima. z.B. bei Ring oder style die Nachkommastellen kleiner anzeigen. Teile davon hat Damian dann sogar übernommen.

So wie es aussieht stehen die Cylinder-Funktionen ganz am Ende der 98_DOIF.pm, vor dem html-Teil für die commandref. Es gibt die 2 Funktionen für cylinder und cylinder_bars, beide rufen eine geminsame cylinder_mode auf. In cylinder_mode wird schon recht früh eine Variable $format mit einer sprintf-Definition gefüllt, abhängig von den Dezimalstellen. Hier könntest Du mit Deiner Formatierungs-Funktion ansetzen.

Das ist so grob der Weg, wenn Perl jetzt nicht gerade ein Fremdwort ist, ist das machbar. Klar muss sein, wenn es später Änderungen an DOIF gibt, die cylinder betreffen, dann müsstest Du das in Deiner "eigenen" Funktion nachführen, falls die Neuerungen dort auch drin sein sollen.


Viel Erfolg!


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

CQuadrat

Danke für den Tip!

Ich werde bei Gelegenheit das mal austesten.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue