NEWS
Bei Zahlen Punkt statt Komma?!
-
[Gelöst] Hallo in die Runde
Zunächst einmal möchte ich sagen, dass ich ein Einsteiger bei Javascript bin.
Ich erfasse jeden Tag Zählerstände für den Energieverbrauch und Temperaturwerte. Das habe ich die ganze Zeit manuell in ein Excel eingetragen. Nun bin ich aber in Kürze für 6 Wochen unterwegs und habe ich mir aus einem anderen Skript mein eigens Javaskript abgeleitet:var fs = require('fs'); // enable write // jeden Tag um 06:00 "0 6 * * *" schedule("0 6 * * *" , Tageswerte_Schreiben); // jeden Tag um 6:00 Tageswerte_Schreiben(); // bei Scriptstart function Tageswerte_Schreiben () { var currTemp = getState("alias.0.deconz.Klima Aussen.temperature").val; // Lese aktuelle Temperatur var avgTemp = getState("alias.0.statistics.avg.Klima Aussen.temperature.dayAvg").val; // Lese mittlere Tagestemperatur var currGas = getState("alias.0.Gasverbrauch.Zählerstand_0:00").val; // Lese Gaszähler 0:00 var currStrom = getState("alias.0.Stromverbrauch.Zählerstand_0:00").val; // Lese Stromzähler 0:00 // Zerlege Datum und Zeit in Variable var now = new Date(); // store current date and time var year = now.getFullYear(); var month = addZero(now.getMonth()+1); var day = addZero(now.getDate()); var Thour = addZero(now.getHours()); var Tmin = addZero(now.getMinutes()); var Tsec = addZero(now.getSeconds()); var currSec = now.getTime(); // millisekunden seit 01.01.1970 var currDate = day + '.' + month + '.' + year; var currTime = Thour + ':' + Tmin + ':' + Tsec; var string = " "; // erzeuge Excel String string = "T" +";" + currDate + ";" + currTime + ";" + currTemp + ";" + avgTemp + ";" + currStrom + ";" + currGas + "\n"; // Füge Satz in Datei ein fs.appendFileSync("/opt/iobroker/iobroker-data/tageswertelog.csv", string); // erzeuge Logeintrag log("Tageswerte geloggt :" + currDate + " " + currTime + " " + currTemp + " " + avgTemp + " " + currStrom + " " + currGas , "info"); } // Funktion zur Erzeugung von führenden Nullen für das Datum Format function addZero(i) { if (i < 10) { i = "0" + i; } return i; }
Das ist mit Sicherheit nicht der eleganteste Code, aber mir würde es reichen. Ich erfasse die Werte in einer CSV-Datei. Diese möchte ich später öffnen und die einzelnen Spalten in mein Excel übernehmen. Das alles funktioniert auch.
Nun mein Problem:
Die Temperaturwerte werden mit einem Punkt statt einem Komma ausgegeben. Im Alias (Objektansicht) sehe ich ein Komma. Wie kann ich die Variablenausgabe in meinem Skript so ändern, damit ich ein Komma anstatt einem Punkt habe? -
@ralfth sagte in Bei Zahlen Punkt statt Komma?!:
Im Alias (Objektansicht) sehe ich ein Komma.
das wird sehr wahrscheinlich nur vom admin "konvertiert" weil du Komma als Separator in den Systemeinstellungen konfiguriert hast.
was steht denn in den Objektdaten dazu?
-
@ralfth sagte: ein Komma anstatt einem Punkt
Beispiel mit fester Anzahl (1) von Nachkommastellen:
var currTemp = getState("alias.0.deconz.Klima Aussen.temperature").val.toFixed(1).replace('.', ','); // Lese aktuelle Temperatur
Die Zeilen 14 bis 24 lassen sich durch formatDate() ersetzen.
var string = 'T;' + formatDate(new Date(), 'DD.MM.YYYY;hh:mm:ss') + ";" + currTemp + ";" + avgTemp + ";" + currStrom + ";" + currGas + "\n";
-
@paul53 sagte in Bei Zahlen Punkt statt Komma?!:
@ralfth sagte: ein Komma anstatt einem Punkt
Beispiel mit fester Anzahl (1) von Nachkommastellen:
var currTemp = getState("alias.0.deconz.Klima Aussen.temperature").val.toFixed(1).replace('.', ','); // Lese aktuelle Temperatur
Super, vielen Dank für die schnelle Antwort. Das funktioniert alles super, bis auf das ersetzen des Punktes durch das Komma. Ich habe es jetzt mehrfach deinen Code mit meinem verglichen, trotzdem habe ich immer noch einen Punkt und kein Komma.
var currTemp = getState("alias.0.deconz.Klima Aussen.temperature").val.toFixed(1).replace('.', ','); // Lese aktuelle Temperatur
Hier der Ausschnitt aus der CSV:
16.05.2023;16,6;20,5;3183.98;67047.5
Habe nach einer Lösung gesucht, aber weiß nicht mal genau wo ich suchen soll.
-
@homoran sagte in Bei Zahlen Punkt statt Komma?!:
@ralfth sagte in Bei Zahlen Punkt statt Komma?!:
Im Alias (Objektansicht) sehe ich ein Komma.
das wird sehr wahrscheinlich nur vom admin "konvertiert" weil du Komma als Separator in den Systemeinstellungen konfiguriert hast.
was steht denn in den Objektdaten dazu?
-
@ralfth sagte: habe ich immer noch einen Punkt und kein Komma. Hier der Ausschnitt aus der CSV:
Ist 16,6 (mit Komma) nicht die aktuelle Außentemperatur?
Die Wandlung in einen String mit anschließender Ersetzung von Punkt durch Komma muss natürlich mit allen 4 Werten erfolgen.EDIT:
const fs = require('fs'); // enable write function Tageswerte_Schreiben() { var currTemp = getState("alias.0.deconz.Klima Aussen.temperature").val.toFixed(1).replace('.', ','); // Lese aktuelle Temperatur var avgTemp = getState("alias.0.statistics.avg.Klima Aussen.temperature.dayAvg").val.toFixed(1).replace('.', ','); // Lese mittlere Tagestemperatur var currGas = getState("alias.0.Gasverbrauch.Zählerstand_0:00").val.toFixed(2).replace('.', ','); // Lese Gaszähler 0:00 var currStrom = getState("alias.0.Stromverbrauch.Zählerstand_0:00").val.toFixed(1).replace('.', ','); // Lese Stromzähler 0:00 // erzeuge Excel String var string = formatDate(new Date(), 'DD.MM.YYYY;hh:mm:ss') + ";" + currTemp + ";" + avgTemp + ";" + currStrom + ";" + currGas + "\n"; // Füge Satz in Datei ein fs.appendFileSync("/opt/iobroker/iobroker-data/tageswertelog.csv", 'T;' + string); // erzeuge Logeintrag log('Tageswerte geloggt: ' + string.replace(/;/g, ' ')); } schedule("0 6 * * *" , Tageswerte_Schreiben); // jeden Tag um 6:00 Tageswerte_Schreiben(); // bei Scriptstart
-
@paul53 Ich habe vor lauter Wald die Bäume nicht mehr gesehen.
Habe jetzt die beiden Variablen für Strom und Gas auch angepasst.
Danke
-
@paul53 sagte in Bei Zahlen Punkt statt Komma?!:
Die Wandlung in einen String mit anschließender Ersetzung von Punkt durch Komma
Warum nicht mit
formatValue
arbeiten? https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#formatvalueBeispiel
var currTemp = formatValue(getState("alias.0.deconz.Klima Aussen.temperature").val, 1, '.,');
-
@haus-automatisierung sagte: Warum nicht mit formatValue arbeiten?
formatValue() hatte ich bisher nicht auf dem Schirm, da es auch mit nativem Javascript ohne großen Aufwand machbar ist.
-
@haus-automatisierung Es wird immer eleganter.
Vielen Dank an Alle für die kompetenter Unterstützung. Ich habe das Thema auf GELÖST gesetzt.