Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Bei Zahlen Punkt statt Komma?!

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Bei Zahlen Punkt statt Komma?!

    This topic has been deleted. Only users with topic management privileges can see it.
    • RalfTh
      RalfTh last edited by RalfTh

      [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?

      Homoran paul53 2 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @RalfTh last edited by

        @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?

        Homoran 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @RalfTh last edited by paul53

          @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";
          
          RalfTh 1 Reply Last reply Reply Quote 0
          • RalfTh
            RalfTh @paul53 last edited by

            @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.

            paul53 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Homoran last edited by

              @RalfTh

              @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?

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @RalfTh last edited by paul53

                @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
                
                RalfTh haus-automatisierung 2 Replies Last reply Reply Quote 0
                • RalfTh
                  RalfTh @paul53 last edited by

                  @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

                  1 Reply Last reply Reply Quote 0
                  • haus-automatisierung
                    haus-automatisierung Developer Most Active @paul53 last edited by

                    @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#formatvalue

                    Beispiel

                    var currTemp = formatValue(getState("alias.0.deconz.Klima Aussen.temperature").val, 1, '.,');
                    
                    paul53 RalfTh 2 Replies Last reply Reply Quote 0
                    • paul53
                      paul53 @haus-automatisierung last edited by paul53

                      @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.

                      1 Reply Last reply Reply Quote 0
                      • RalfTh
                        RalfTh @haus-automatisierung last edited by

                        @haus-automatisierung Es wird immer eleganter. 😊
                        Vielen Dank an Alle für die kompetenter Unterstützung. Ich habe das Thema auf GELÖST gesetzt.

                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        924
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        4
                        10
                        776
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo