NEWS
[gelöst] Datenpunkt mit Tausender-Trennzeichen formatieren ?
-
@codierknecht Man kann auch JSONATA nehmen. ;)
@mickym
Man könnte auch direkt in einem Alias umrechnen statt da per Script ranzugehen ;-) -
@schweiger2
Meine Glaskugel sagt, Du willst W in kW umrechnen ... dann so wie @mickym schreibt.
Das ist aber dann umrechnen und nicht formatieren.Ich bin wirklich sparsam mit meinen Auskünften gewesen.
Der Verbrauch wird als 6123 bzw. 39523 angezeigt, sowohl im DP als auch in iQontrol, was aber üblicherweise übernimmt, was es bekommt. Deswegen war mein Grundgedanke, den DP passend zu formatieren.
Mir geht es nicht um die Umrechnung, sondern wirklich nur um die Darstellung als 6.123 bzw. 39.523 W.
-
@mickym
Man könnte auch direkt in einem Alias umrechnen statt da per Script ranzugehen ;-)@codierknecht sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
@mickym
Man könnte auch direkt in einem Alias umrechnen statt da per Script ranzugehen ;-)Nun nachdem er aber eh schon den Datenpunkt mit Blockly schreibt, ist das dann aber auch kein Vorteil. ;)
-
Ich bin wirklich sparsam mit meinen Auskünften gewesen.
Der Verbrauch wird als 6123 bzw. 39523 angezeigt, sowohl im DP als auch in iQontrol, was aber üblicherweise übernimmt, was es bekommt. Deswegen war mein Grundgedanke, den DP passend zu formatieren.
Mir geht es nicht um die Umrechnung, sondern wirklich nur um die Darstellung als 6.123 bzw. 39.523 W.
@schweiger2
Dann wie gesagt auf string umstellen und im Script formatieren.Oder im iQontrol formatieren, aber da kann ich Dir nicht helfen.
-
@codierknecht sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
@mickym
Man könnte auch direkt in einem Alias umrechnen statt da per Script ranzugehen ;-)Nun nachdem er aber eh schon den Datenpunkt mit Blockly schreibt, ist das dann aber auch kein Vorteil. ;)
@mickym sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
Nun nachdem er aber eh schon den Datenpunkt mit Blockly schreibt, ist das dann aber auch kein Vorteil. ;)
Doch - spart Script ;-)
Und wenn der Alias als string angelegt ist, kann er auch gleich formatierenval.toFixed(1) -
Ich bin wirklich sparsam mit meinen Auskünften gewesen.
Der Verbrauch wird als 6123 bzw. 39523 angezeigt, sowohl im DP als auch in iQontrol, was aber üblicherweise übernimmt, was es bekommt. Deswegen war mein Grundgedanke, den DP passend zu formatieren.
Mir geht es nicht um die Umrechnung, sondern wirklich nur um die Darstellung als 6.123 bzw. 39.523 W.
@schweiger2 sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
Ich bin wirklich sparsam mit meinen Auskünften gewesen.
Der Verbrauch wird als 6123 bzw. 39523 angezeigt, sowohl im DP als auch in iQontrol, was aber üblicherweise übernimmt, was es bekommt. Deswegen war mein Grundgedanke, den DP passend zu formatieren.
Mir geht es nicht um die Umrechnung, sondern wirklich nur um die Darstellung als 6.123 bzw. 39.523 W.

Nur halt mal nutzen. ;)
-
@mickym sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
Nun nachdem er aber eh schon den Datenpunkt mit Blockly schreibt, ist das dann aber auch kein Vorteil. ;)
Doch - spart Script ;-)
Und wenn der Alias als string angelegt ist, kann er auch gleich formatierenval.toFixed(1)@codierknecht Na wenn ich obigen Befehl noch in den aktualisiere Block eingebe - machte den Kohl nicht fett.

Da ist ja dann der Alias nun wirklich keine Ersparnis. ;)- Zudem der originale Wert wahrscheinlich dann eh im sonoff - Adapter liegt und dieses Blockly vielleicht nur für die Ausgabe gemacht wurde.
Aber ich gebe Dir natürlich Recht, wenn er das Blockly nur wegen der Anzeige gemacht hat, dann kann er auch ein Alias mit Konvertierfunktion nutzen. ;)
-
@codierknecht Na wenn ich obigen Befehl noch in den aktualisiere Block eingebe - machte den Kohl nicht fett.

Da ist ja dann der Alias nun wirklich keine Ersparnis. ;)- Zudem der originale Wert wahrscheinlich dann eh im sonoff - Adapter liegt und dieses Blockly vielleicht nur für die Ausgabe gemacht wurde.
Aber ich gebe Dir natürlich Recht, wenn er das Blockly nur wegen der Anzeige gemacht hat, dann kann er auch ein Alias mit Konvertierfunktion nutzen. ;)
@mickym
Wenn das Script noch mehr berechnet und eh existiert, hast Du sicher Recht.Wenn es aber nur den Wert aus Tasmota nimmt und woanders hinschreibt, kann man es auch direkt im Alias machen.
Auch JSON auseinandernehmen (z.B. bei MQTT) ist mit den Konvertierungsfunktionen kein Problem.
Dann stehen die Ergebnispunkte hat inalias.0und nicht in0_userdata.0.
Da haben sich mein POST und Dein EDIT gerade überholt

-
@mickym
Wenn das Script noch mehr berechnet und eh existiert, hast Du sicher Recht.Wenn es aber nur den Wert aus Tasmota nimmt und woanders hinschreibt, kann man es auch direkt im Alias machen.
Auch JSON auseinandernehmen (z.B. bei MQTT) ist mit den Konvertierungsfunktionen kein Problem.
Dann stehen die Ergebnispunkte hat inalias.0und nicht in0_userdata.0.
Da haben sich mein POST und Dein EDIT gerade überholt

@codierknecht Ja habe ich gerade ergänzt. Das muss der Mensch selbst wissen, sonst ist Alias sicher eine elegante Lösung.
-
@mickym sagte in Wie Datenpunkt mit Dezimalpunkt formatieren ?:
Nun nachdem er aber eh schon den Datenpunkt mit Blockly schreibt, ist das dann aber auch kein Vorteil. ;)
Doch - spart Script ;-)
Und wenn der Alias als string angelegt ist, kann er auch gleich formatierenval.toFixed(1)@codierknecht Ich hab gerade aber nochmal die Definition nachgeschaut. bei toFixed bekommst Du aber keine 1000der Trennzeichen hin, aber ich hab noch eine andere Funktion für den Alias gefunden: ;)

also hiermit:
val.toLocaleString("de-DE")wird eine Zahl in deutsches Format (String) konvertiert mit 1000der Punkt und Dezimalkomma.

Man kann sogar die Opitionen nutzen - also wenn man bei Ganzzahlen trotzdem eine Dezimalstelle haben will, dann schreibt man:
val.toLocaleString("de-DE",{"minimumFractionDigits":1})
Hier ein Verweis auf die Formatierungsmöglichkeiten: https://www.w3schools.com/jsref/jsref_tolocalestring_number.asp
-
@codierknecht Na wenn ich obigen Befehl noch in den aktualisiere Block eingebe - machte den Kohl nicht fett.

Da ist ja dann der Alias nun wirklich keine Ersparnis. ;)- Zudem der originale Wert wahrscheinlich dann eh im sonoff - Adapter liegt und dieses Blockly vielleicht nur für die Ausgabe gemacht wurde.
Aber ich gebe Dir natürlich Recht, wenn er das Blockly nur wegen der Anzeige gemacht hat, dann kann er auch ein Alias mit Konvertierfunktion nutzen. ;)
Ich habe mit dem gezeigten JSONata-Ausdruck die gewünschte Formatierung weitgehend realisieren können.
Nur die Ausgabe ohne Nachkommastellen und ohne Einheit "W" habe ich bei der 5-stelligen Zahl nicht hinbekommen trotz einiger Modifikationen im "#.##0,0 W".
Dennoch kann ich mit dem Erreichten leben.
Danke sehr.
-
Ich habe mit dem gezeigten JSONata-Ausdruck die gewünschte Formatierung weitgehend realisieren können.
Nur die Ausgabe ohne Nachkommastellen und ohne Einheit "W" habe ich bei der 5-stelligen Zahl nicht hinbekommen trotz einiger Modifikationen im "#.##0,0 W".
Dennoch kann ich mit dem Erreichten leben.
Danke sehr.
@schweiger2 Verstehe ich nicht: Nutze mal diesen Ausdruck:
$formatNumber($, "#.##0",{'decimal-separator':',', 'grouping-separator':'.'})
-
@schweiger2 Verstehe ich nicht: Nutze mal diesen Ausdruck:
$formatNumber($, "#.##0",{'decimal-separator':',', 'grouping-separator':'.'})
Wenn ich das so einsetze, wird aus einer 39.540,5 bei
$formatNumber($, "#.##0,0",{'decimal-separator':',', 'grouping-separator':'.'})eine 39.5 (mit Punkt) bei
$formatNumber($, "#.##0",{'decimal-separator':',', 'grouping-separator':'.'})Hm.
-
Wenn ich das so einsetze, wird aus einer 39.540,5 bei
$formatNumber($, "#.##0,0",{'decimal-separator':',', 'grouping-separator':'.'})eine 39.5 (mit Punkt) bei
$formatNumber($, "#.##0",{'decimal-separator':',', 'grouping-separator':'.'})Hm.
@schweiger2 Nochmal - die Zahlen müssen Nummern/Zahlen sein und keine Strings. Eine Zahl hat in Javascript nun mal einen Punkt als Dezimalzeichen. Deswegen wird die 39.54 als 39,5 interpretiert. Also es werden imm reine Zahlen in Strings konvertiert. Es gibt auch keine Gruppierungstrennzeichen bei der Eingabe. Also darauf achten, dass nur Zahlen eingegeben werden.

Für jede Ziffer - die verpflichtend ist muss eine 0 eingegeben werden, für jede optionale Ziffer ein #.
Also 0,0 gibt immer eine Dezimalziffer aus.
ein 0,# optional eine Dezimalziffer usw. -
Wenn ich das so einsetze, wird aus einer 39.540,5 bei
$formatNumber($, "#.##0,0",{'decimal-separator':',', 'grouping-separator':'.'})eine 39.5 (mit Punkt) bei
$formatNumber($, "#.##0",{'decimal-separator':',', 'grouping-separator':'.'})Hm.
@schweiger2 sagte in [gelöst] Datenpunkt mit Tausender-Trennzeichen formatieren ?:
39.540,5
Sowas ist also Unsinn - da es keine Zahl ist. Es wird versucht in eine Zahl zu wandeln, und deshalb entsteht daraus 39,540 (deutsche Schreibweise). Einfach auf Datentyp Zahl achten!!!
Wenn Du solche Strings hast musst halt Komma durch Punkt ersetzen.
Wenn Du also "deutsch formatierte Zahlen" (also Strings) in Zahlen übersetzen willst, dann musst das halt tun.

Wenn beides möglich ist, dann machst halt ein Typ Prüfung.
Ich hasse zwar dieses Puzzeln, hier aber mal eine Version, die prüft ob Zahl oder String und dann agiert dann entsprechend:

Der Datenpunkt ist vom Typ Mixed. Du siehst Deine Zahl wird als String erkannt. Hier dann mal eine Funktion, die dann beides akzeptiert.

Do nun wieder genug - Teilchen aneinander gesucht. Ich habe keine Funktion gefunden, mit der man Zeichen ersetzt. Wahrscheinlich muss man hier wieder eine JS Funktion nutzen. Aber ich vielleicht bin ich nur zu blöd zum Suchen. Deswegen hasse ich dieses Puzzeln.
-
@schweiger2 sagte in [gelöst] Datenpunkt mit Tausender-Trennzeichen formatieren ?:
39.540,5
Sowas ist also Unsinn - da es keine Zahl ist. Es wird versucht in eine Zahl zu wandeln, und deshalb entsteht daraus 39,540 (deutsche Schreibweise). Einfach auf Datentyp Zahl achten!!!
Wenn Du solche Strings hast musst halt Komma durch Punkt ersetzen.
Wenn Du also "deutsch formatierte Zahlen" (also Strings) in Zahlen übersetzen willst, dann musst das halt tun.

Wenn beides möglich ist, dann machst halt ein Typ Prüfung.
Ich hasse zwar dieses Puzzeln, hier aber mal eine Version, die prüft ob Zahl oder String und dann agiert dann entsprechend:

Der Datenpunkt ist vom Typ Mixed. Du siehst Deine Zahl wird als String erkannt. Hier dann mal eine Funktion, die dann beides akzeptiert.

Do nun wieder genug - Teilchen aneinander gesucht. Ich habe keine Funktion gefunden, mit der man Zeichen ersetzt. Wahrscheinlich muss man hier wieder eine JS Funktion nutzen. Aber ich vielleicht bin ich nur zu blöd zum Suchen. Deswegen hasse ich dieses Puzzeln.
Ich bin sehr froh, dass Du so hilfsbereit bist, Danke. Ich habe hier mein aktuelles Blockly beigefügt.

Die beiden Datenpunkte in den Objekten aus Tasmota im MQTT-Adapter, aus dem das Attribut ausgelesen wird, haben den Typ "JSON" und werden in die Variablen geschrieben.Die Datenpunkte Verbrauch_aktuell und Verbrauch_gesamt sind natürlich vom Typ "string". Wenn ich sie auf "number" in common und native umstelle, erhalte ich Warnmeldungen im Protokoll, was zu erwarten ist. Es wird also ein String in den Datenpunkt geschrieben.
Wenn ich die Konvertierungsfunktion "nach Zahl" wie im Blockly unten benutze und die Datenpunkte auf "number" ändere, erhalte ich die Fehlermeldungen im Protokoll wie unten gezeigt. Es wird also nach wie vor der Typ "string" geschrieben.


-
@schweiger2 sagte in [gelöst] Datenpunkt mit Tausender-Trennzeichen formatieren ?:
39.540,5
Sowas ist also Unsinn - da es keine Zahl ist. Es wird versucht in eine Zahl zu wandeln, und deshalb entsteht daraus 39,540 (deutsche Schreibweise). Einfach auf Datentyp Zahl achten!!!
Wenn Du solche Strings hast musst halt Komma durch Punkt ersetzen.
Wenn Du also "deutsch formatierte Zahlen" (also Strings) in Zahlen übersetzen willst, dann musst das halt tun.

Wenn beides möglich ist, dann machst halt ein Typ Prüfung.
Ich hasse zwar dieses Puzzeln, hier aber mal eine Version, die prüft ob Zahl oder String und dann agiert dann entsprechend:

Der Datenpunkt ist vom Typ Mixed. Du siehst Deine Zahl wird als String erkannt. Hier dann mal eine Funktion, die dann beides akzeptiert.

Do nun wieder genug - Teilchen aneinander gesucht. Ich habe keine Funktion gefunden, mit der man Zeichen ersetzt. Wahrscheinlich muss man hier wieder eine JS Funktion nutzen. Aber ich vielleicht bin ich nur zu blöd zum Suchen. Deswegen hasse ich dieses Puzzeln.
Ich habe jetzt die debug-Zeile eingefügt und das Protokoll wirft "true" aus. Offensichtlich kommt doch der Typ number aus dem Attribut.

Dann müsste ich doch nachfolgenden Schritt mit JSONata gar nicht gehen und könnte direkt in den Datenpunkt schreiben. Habe ich gemacht und ergibt sich aus dem debug, dass- Typ des Attributes = "number" ist true
- Typ des Datenpunktes Verbrauch_aktuell = "number" ist false

Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden