Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage] Data Logging in Textdadei [gelöst]

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Data Logging in Textdadei [gelöst]

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

      Hallo zusammen,

      ich habe zur Zeit einen Raum, den ich entfeuchten muss. Dazu möchte ich temporär für ein Paar Tage jede 15 Minuten die

      aktuelle Temperatur und Luftfeuchte, kommagetrennt in eine Textdatei schreiben.

      Könnte mir jemand bei dem Script helfen?

      Dies hier sind die beiden Datenpunkte

      "hm-rpc.0.MEQ1571251.1.HUMIDITY"
      "hm-rpc.0.MEQ1571251.1.TEMPERATURE"
      
      

      Gruss.

      ToBo

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        Du suchst bestimmt das http://forum.iobroker.net/viewtopic.php?t=3907

        1 Reply Last reply Reply Quote 0
        • T
          TOBO last edited by

          Also ich habe mir das nun mal angesehen. Da gibt es ein Paar Sachen die ich nicht verstehe.

          var fs = require('fs');
          
          

          Diesen Befehl verstehe ich nicht

          var fn = "/opt/iobroker/iobroker-data/scripts.log";
          
          

          Hier wird der Dateiname festgelegt

          function flog(txt) {
             var ts = new Date();
             var ms = ts.getMilliseconds();
              if (ms < 10) {
                  ms = "00" + ms;
              }
              else if (ms > 9 && ms < 100) {
                  ms = "0" + ms;
              }
          
          

          Hier werden meiner Meinung nach lediglich die Millisekunden formatiert

              ts = formatDate(ts, "YYYY-MM-DD hh:mm:ss.") + ms + " \t";
          
          

          Hier wird das Datum formatiert und die Millisekunden angeängt, Wobei ich "\t" auch nicht verstehe

              fs.appendFileSync(fn, ts + txt + "\n");
          
          

          Hier wird alles in die Datei geschrieben, bzw. angehängt. Was steht aber in der "txt" steht weiss ich auch nicht.

          Ich sehe nur ein Datum und Zeitangabe, aber keine Daten und keine Kommatrennung.

          Ich habe mir das nun mal so gedacht.

          var fs = require('fs');
          var fn = "/opt/iobroker/iobroker-data/entfeuchtung.log";
          
          function flog() {
             var ts = new Date();
          
              ts = formatDate(ts, "YYYY-MM-DD hh:mm:ss.") + " \t";
              fs.appendFileSync(fn, ts + "," + "hm-rpc.0.MEQ1571251.1.HUMIDITY".val + "," + "hm-rpc.0.MEQ1571251.1.TEMPERATURE".val + "\n");
          }
          
          

          Ich brauche keine Millisekunden. Deswegen habe ich den Teil entfernt. Falls das funktionieren sollte, müsste man die Funktion nur noch alle 15 Minuten ausführen.

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

            @TOBO:

            Diesen Befehl verstehe ich nicht `
            Siehe https://nodejs.org/api/fs.html von Node.js.
            @TOBO:

            Wobei ich "\t" auch nicht verstehe `
            Es wird ein Tabulator angehängt.
            @TOBO:

            Was steht aber in der "txt" steht weiss ich auch nicht. `
            Das wird vom aufrufenden Programm an die Funktion übergeben. Bei mir sieht die Datei so aus:

            ! 2016-04-27 13:00:05.356 Netzspannung ausgefallen 2016-04-27 15:58:25.375 Akku kurz vor Shutdown: 36.48 % 2016-04-27 16:01:30.554 Netzspannung vorhanden 2017-08-01 17:52:56.180 Schlafen.WT-UNREACH: true 2017-08-01 17:53:09.150 Bad.UNREACH: true 2017-08-01 17:55:16.610 Wohnen.WT-UNREACH: true 2017-08-01 17:55:18.417 Aussen.UNREACH: true 2017-08-01 18:42:40.637 Wohnen.WT-UNREACH: false 2017-08-01 18:43:07.351 Schlafen.WT-UNREACH: false 2017-08-01 18:43:28.368 Aussen.UNREACH: false 2017-08-01 18:43:52.517 Bad.UNREACH: false 2017-08-01 21:57:50.560 Wohnen.WT-CONFIG_PENDING: true 2017-08-01 21:58:19.252 Wohnen.WT-CONFIG_PENDING: false 2017-08-01 21:58:27.976 Schlafen.WT-CONFIG_PENDUNG: true 2017-08-01 21:59:33.951 Schlafen.WT-CONFIG_PENDUNG: false 2017-09-07 11:27:24.403 Aussen.CONFIG_PENDING: true 2017-09-07 11:27:31.981 Aussen.CONFIG_PENDING: false 2017-09-09 23:00:04.412 Bad.UNREACH: true 2017-09-09 23:01:47.834 Bad.UNREACH: false 2017-09-16 04:34:37.045 Bad.UNREACH: true 2017-09-16 04:35:14.344 Bad.UNREACH: false 2017-09-17 10:00:04.413 Bad.UNREACH: true 2017-09-17 10:01:21.148 Bad.UNREACH: false 2017-09-22 06:00:04.345 Bad.UNREACH: true 2017-09-22 06:01:02.994 Bad.UNREACH: false !
            Und aus diesem Skript wird die Funktion aufgerufen:

            on(/\.UNREACH|LOWBAT|CONFIG_PENDING|FAULT_REPORTING$/, function(dp) {
               var val = dp.state.val;
               var old = dp.oldState.val;
               if (val != old) {
                   if(dp.common.name) flog(dp.common.name + ": " + val);
                   else flog(dp.id + ": " + val);
               }
            });
            
            

            @TOBO:

                fs.appendFileSync(fn, ts + "," + "hm-rpc.0.MEQ1571251.1.HUMIDITY".val + "," + "hm-rpc.0.MEQ1571251.1.TEMPERATURE".val + "\n");
            ```` `  
            

            –>

                fs.appendFileSync(fn, ts + "," + getState("hm-rpc.0.MEQ1571251.1.HUMIDITY").val + "," + getState("hm-rpc.0.MEQ1571251.1.TEMPERATURE").val + "\n");
            
            1 Reply Last reply Reply Quote 0
            • T
              TOBO last edited by

              Also würde das so funktionieren ?

              var fs = require('fs');
              var fn = "/opt/iobroker/iobroker-data/entfeuchtung.log";
              
              function flog() {
                 var ts = new Date();
              
                  ts = formatDate(ts, "YYYY-MM-DD hh:mm:ss.") + " \t";
                  fs.appendFileSync(fn, ts + "," + getState("hm-rpc.0.MEQ1571251.1.HUMIDITY").val + "," + getState("hm-rpc.0.MEQ1571251.1.TEMPERATURE").val + "\n");
              }
              
              

              Dann fehlt mir nur noch der Teil, der diese Function alle 15 Minuten startet.

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

                @TOBO:

                Dann fehlt mir nur noch der Teil, der diese Function alle 15 Minuten startet. `
                Am Ende:

                schedule('*/15 * * * *', flog);
                
                1 Reply Last reply Reply Quote 0
                • T
                  TOBO last edited by

                  Ich habe es jetzt mal so gemacht. Scheint auch zu funktionieren.

                  // Logging in Datei /opt/iobroker/iobroker-data/feuchte.log
                  
                  var fs = require('fs');
                  var fn = "/opt/iobroker/iobroker-data/feuchte.log";
                  var Feuchte = "hm-rpc.0.MEQ1571251.1.HUMIDITY"
                  var Temperatur = "hm-rpc.0.MEQ1571251.1.TEMPERATURE"
                  
                  function flog(Daten) {
                    var Zeitstempel = new Date();
                    var ms = Zeitstempel.getMilliseconds();
                      if (ms < 10) {
                          ms = "00" + ms;
                      }
                      else if (ms > 9 && ms < 100) {
                          ms = "0" + ms;
                      }
                      Datum = formatDate(Zeitstempel, "YYYY-MM-DD") + " \t";
                      Zeit = formatDate(Zeitstempel, "hh:mm:ss.") + ms + " \t";
                      fs.appendFileSync(fn, Datum + Zeit + Daten + "\n");
                  }
                  
                  schedule('*/15 * * * *', flog(getState("hm-rpc.0.MEQ1571251.1.HUMIDITY").val + " \t" + getState("hm-rpc.0.MEQ1571251.1.TEMPERATURE").val + " \t"));
                  
                  

                  PS: Ich weiss nicht was ich gemacht habe, aber wenn ich das Script jetzt starte kommt dieser Fehler

                  javascript.0 script.js.common.LogWerkstattFeuchte: schedule callback missing
                  
                  

                  Nachdem ich das Script starte, werden die aktuellen Daten in die Datei geschrieben, aber das "schedule" scheint nicht zu funktionieren.

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

                    Wenn Daten an die Callback-Funktion von schedule() übergeben werden, muss sie als anonyme Funktion aufgeführt werden.

                    schedule('*/15 * * * *', function() {
                      flog(getState("hm-rpc.0.MEQ1571251.1.HUMIDITY").val + " \t" + getState("hm-rpc.0.MEQ1571251.1.TEMPERATURE").val );
                    });
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      Übrigens kann formatDate() mittlerweile auch ms:

                          var Zeitstempel = new Date();
                          Datum = formatDate(Zeitstempel, "YYYY-MM-DD") + " \t";
                          Zeit = formatDate(Zeitstempel, "hh:mm:ss.sss") + " \t";
                      
                      

                      oder als Einzeiler

                          Zeit = formatDate(new Date(), "YYYY-MM-DD \thh:mm:ss.sss \t");
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      817
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      749
                      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