Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage] Data Logging in Textdadei [gelöst]

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    843

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
9 Beiträge 3 Kommentatoren 813 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TOBO
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #2

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

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        TOBO
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @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");
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            TOBO
            schrieb am zuletzt editiert von
            #5

            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 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @TOBO:

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

              schedule('*/15 * * * *', flog);
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                TOBO
                schrieb am zuletzt editiert von
                #7

                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 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  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 );
                  });
                  
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    Ü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");
                    
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    737

                    Online

                    32.6k

                    Benutzer

                    82.1k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2025
                    logo
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Home
                    • Aktuell
                    • Tags
                    • Ungelesen 0
                    • Kategorien
                    • Unreplied
                    • Beliebt
                    • GitHub
                    • Docu
                    • Hilfe