NEWS
Zahlenformate in Node-RED Dashboard
-
Ich betreibe node-red auch als iobroker-Adapter und bin ein wirklicher Fan dieses Programms und würde auch ungern auf einen anderen Logik-Prozessor (blockly etc.) umsteigen.
Ich habe nur - weder in der node-red Dokumentation - noch hier irgendeine Möglichkeit gefunden oder weiß nicht, wie ich das deutsche Zahlenformat - zumindest im Dashboard - umstellen kann.Die Punkte - bei Dezimalzahlen da gewöhnt man sich ja noch dran - aber das Komma als Tausender Trennzeichen finde ich in der Darstellung störend. Kann mir hier jemand eine Beschreibung geben, wie man das umstellen kann?
Danke für die Hilfe im Voraus!
-
Keiner eine Idee?
-
@mickym
Hi, ich weiß wohl wie man nen Punkt durch ein Komma ersetzt. Dazu nimmst du ne Funktion Node und da kommt folgendes rein. Je nach dem wie deine Message heißt natürlich, in diesem Beispiel gehe ich von msg.payload aus.msg.payload = msg.payload.replace('.', ','); return msg;
Wie man allerdings den Punkt bei den Tausendern entfernt, weiß ich leider nicht. Hat mich auch noch nie gestört, da ich bei Tausenden nicht mehr mit Nachkommastellen arbeite oder sie Runde falls es Nachkommastellen gibt. Aber das müsste eigentlich auch jemand wissen der sich mit Javascript gut auskennt.
-
@mickym
Hi, habs gerade mal getestet, das hier würde dir den Punkt entfernen, aber wenn du nen Tausender Wert mit Nachkommastelle hast, ist der Punkt für Komma auch weg. Oder wenn du die Nachkommastelle nicht brauchst, kannst du den Wert vorher Runden.msg.payload = msg.payload.replace('.', ''); return msg;
msg.payload = Math.round(msg.payload); msg.payload = msg.payload.replace('.', ''); return msg;
-
@mickym
Hi, habe noch weiter getestet, da wird wohl immer nur der erste Punkt weggenommen, der zweite bleibt. Dann wäre das ja,das wonach du suchst.
Oder du nimmst das hier, dann wird der erste Punkt weggenommen und der zweite durch ein Komma ersetzt.msg.payload = msg.payload.replace('.', ''); msg.payload = msg.payload.replace('.', ','); return msg;
-
Hi @frankyboy73 vielen Dank - aber das ist leider nicht das was ich suche. Ich will die Zahlenformate nicht durch Wandlung in Strings und anschließender Stringmanipulation erreichen.
Das Problem ist die Darstellung in dem Dashboard. Da aber zum Beispiel das Gauge oder auch andere Elemente nur Zahlen als Input verarbeiten um korrekt zur funktionieren, ist also die Stringmanipulation keine Lösung. Ich werde mal den Titel ändern wenn das noch geht.
Ein Möglichkeit wären ja die Angular - Filter wie in den Node-Beschreibungen beschrieben.
The msg.payload is searched for a numeric value and is formatted in accordance with the defined Value Format, which can then be formatted using Angular filters.
For example : {{value | number:1}}% will round the value to one decimal place and append a % sign.Im Prinzip muss ja nur das Node-Red Dashboard lokalisiert werden.
Ich kann hier immer nur was der I18n libary zu lesen - das übersteigt aber meinen Horizont, wie alles zusammenhängt.
-
@mickym
Ah, ok. Da kann ich dir leider nicht weiterhelfen.
Das könnte man allerdings auch alles in nur einer Funktion Node umarbeiten und wieder zurück in Number konvertieren.
Und nur zur Info, ich gebe auf meine Dashboard Elemente eigentlich immer nur Strings, auch auf Gauge, klappt bei mir wunderbar.
Edit:
Falls benötigt hier die Umwandlung von Number in String, Punkt entfernen, Punkt durch Komma ersetzen und zurück in Number.msg.payload = (String(msg.payload)) msg.payload = msg.payload.replace('.', ''); msg.payload = msg.payload.replace('.', ','); msg.payload = (Number(msg.payload)) return msg;
-
@frankyboy73
Oh Du hast mir ganz unbewusst weitergeholfen - ich habe zwar nicht mehr genau in Erinnerung wie der Gauge funktioniert, aber dass er auch Zeichenfolgen frisst - liegt wohl daran, dass mit {{value}} impliziert, eine Zahlenkonvertierung stattfindet. Ich habe nämlich festgestellt, dass ich diesen auch oft Strings als Futter gebe. Und ich hab dann mal bei mir geschaut, woher dieses blöde 1000er Komma kommt und das liegt wohl an diesem blöden Angular Filter - der bei mir so eingestellt war: {{value | number:0}}Der erzeugt dann das 1000er Komma.
Aber genau, dass wurde irgendwo beschrieben, dass dieser Angular Filter auch irgendwie auf Ländereinstellungen zugreifen kann.
Aber Du hast mir insofern geholfen, dass diese 1000er Trennung nur durch den Filter kommt, mit dem Punkt als Dezimalzeichen kann ich leben.
Danke!
Aber vielleicht gibts ja trotzdem jemand, der es weiß, wie man diesen Angular Filtern - deutsches Verhalten beibringt.
irgendwie scheint das zu gehen - aber ich werde nicht schlau draus: I18n / localization of UI / change locale for angular filters (currency, number, …) -
@mickym Ganz generell kannst du hier mal lesen
https://discourse.nodered.org/t/number-in-german-format-in-dashboard-100-235-25-how-to/23236/14Leider etwas umständlich, geht aber.
-
@rewenode Danke - Aber ich werde das erst mal hinten anstellen. Insbesondere da ich node-red ja als Adapter laufen habe, müsste ich ja dann wieder die andere settings.js modifizieren usw. und dem gegenüber ist der Nutzen dann minimal.
Aber nochmals vielen Dank für Deine Recherche.