Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Daten eine Temperatursensors in eione .txt Datei schreiben

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Daten eine Temperatursensors in eione .txt Datei schreiben

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

      Hallo,

      möchte den Wert eines Temperaturregles in eine text Datei schreiben.

      Hat einer ne Idee wie es dann weitergeht?

      
      var Temperatur = getState("hm-rpc.0.KEQ0121727.1.TEMPERATURE").val;  //hohle mir den Wert
      
      
      1 Reply Last reply Reply Quote 0
      • V
        versteckt last edited by

        Morgähn, mit dem JavaScript Adapter gibt es eine writeFile Funktion.

        Gesendet von meinem iPhone mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • L
          looxer01 last edited by

          hier ein Beispielscript.

          Das Script erzeugt eine Datei und hängt neue Sätze an.

          Auslöser ist hier ein schedule.

          Besonderheit ist das Schreiben im lesbaren datumsformat.

          vG Looxer

          var fs = require('fs');                           // enable write
          function Aussentemperatur_Schreiben () 
          {
          var currTemp = getState("hm-rpc.0.JEQ0014148.1.TEMPERATURE").val;    // Lese aktuelle Temperatur
          var currHum = getState("hm-rpc.0.JEQ0014148.1.HUMIDITY").val;    // Lese aktuelle Feuchtigkeit
          
           // 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 + ";" + currSec + ";" + currTemp + ";"  + currHum +  "\n";
          
          // Füge Satz in Datei ein
          fs.appendFileSync("/opt/iobroker/iobroker-data/templog.csv", string);   
          
          // erzeuge Logeintrag
          log("Temperatur geloggt :" + currDate + " " + currTime + " " + currSec + " " + currTemp + " "  + currHum , "info"); 
          
          }
          
          // jeden Tag um 12:00 "0 12 * * *"  
          schedule("59 11 * * *" , Aussentemperatur_Schreiben); // alle 5 Minuten zur vollen Minute
          Aussentemperatur_Schreiben(); // bei Scriptstart
          
          // Funktion zur Erzeugung von führenden Nullen für das Datum Format
          function addZero(i) {
              if (i < 10) {
                  i = "0" + i;
              }
              return i;
          }
          
          
          1 Reply Last reply Reply Quote 0
          • H
            HKF8770 last edited by

            Vielen dank…hat man mal nen Grundstein kann man es umbauen 🙂

            echt mehr als supper

            1 Reply Last reply Reply Quote 0
            • H
              HKF8770 last edited by

              Hallo Looxer,

              um den Datensatz an eine Datei anzuhängen verwendest du:

              fs.appendFileSync("/opt/iobroker/iobroker-data/templog.csv", string);

              Wie muss es heissen um einen Datensatz zu überschreiben?

              1 Reply Last reply Reply Quote 0
              • L
                looxer01 last edited by

                Hi,

                dann ist es

                fs.writeFile("/opt/iobroker/iobroker-data/templog.csv", string);

                vG Looxer

                1 Reply Last reply Reply Quote 0
                • H
                  HKF8770 last edited by

                  Danke.

                  Frage (Erklärung)

                  Lerne gerade noch Java. Für was steht da fs zu Beginn?

                  deine Meinung:

                  Ich hab dann die Daten in nem Excel File auf nem Server liegen. geht auch.die Objekte unter javascript…. einlesen.

                  Ich würde dies dann mit Node Red lösen, was ja auch geht und ich schon realisiert habe.

                  Oder denke ich mit Node Red mal wieder zu kompliziert und da gibt es nen viel einfacheren Weg?

                  1 Reply Last reply Reply Quote 0
                  • L
                    looxer01 last edited by

                    Hi,

                    ich beschäftige mich auch noch nicht so lange mit javascript (nicht java). Ich bin also bei weitem kein Experte.

                    (ist aber manchmal auch besser so 😄 )

                    fs steht für Filesystem und dahinter steht require('fs'), was einem Node.js modul entspricht.

                    Das bedeutet, dass damit das modul "FileSystem" zur Verfügung gestellt wird.

                    Die möglichen Befehle sind alle hier dokumentiert:

                    https://nodejs.org/api/fs.html

                    Du kannst mit fs.readFileSync(file[, options]) dein File synchron einlesen.

                    Was node red angeht sehe ich das persönlich sehr pragmatisch. Ich wähle dein einfacheren Weg.

                    z.B. der Benzinpreis flow ist so bestechend einfach. Da hätte ich ewig mit javascript gebraucht.

                    Den nutze ich deshalb und habe ihn für meine Zwecke angepasst.

                    Andererseits - je mehr du dich mit javascript beschäftigst desto eher wirst du auch alle deine Anforderungen effizient/schnell umsetzen können.

                    vG looxer

                    edit:

                    habe dies hier noch gefunden:

                    http://www.speqmath.com/tutorials/csv2array/

                    damit kannst du ein CSV File in ein javascript array bringen.

                    Die Felder des Files sind dann in einer internen Tabelle enthalten, die entsprechend weiter verarbeitet werden kann.

                    Das ist dann die Alternative zum Flow

                    1 Reply Last reply Reply Quote 0
                    • S
                      stephan61 last edited by

                      Hall Looxer vielen Dank für das Script oben

                      ich habe nur eine Frage wie muss ich das script umschreiben das wirklich nur zur eingestellten Zeit der Eintrag erfolgt

                      im Moment ist es so das die datei zu eingestellten Uhrzeit erstellt wird 😄 aber auch wenn der Javascript adapter oder iobroker neustartet. :?:

                      (halte nachts iobroker an um ein Backup zu erstellen)

                      Gruß Stephan61

                      1 Reply Last reply Reply Quote 0
                      • blauholsten
                        blauholsten Developer last edited by

                        @stephan61:

                        Hall Looxer vielen Dank für das Script oben

                        ich habe nur eine Frage wie muss ich das script umschreiben das wirklich nur zur eingestellten Zeit der Eintrag erfolgt

                        im Moment ist es so das die datei zu eingestellten Uhrzeit erstellt wird 😄 aber auch wenn der Javascript adapter oder iobroker neustartet. :?:

                        (halte nachts iobroker an um ein Backup zu erstellen)

                        Gruß Stephan61 `

                        Theoretisch wenn man das hier löscht.

                        Aussentemperatur_Schreiben(); // bei Scriptstart
                        
                        1 Reply Last reply Reply Quote 0
                        • L
                          looxer01 last edited by

                          Hi Stephan,

                          @stephan61:

                          aber auch wenn der Javascript adapter oder iobroker neustartet. :?: `
                          das sollte eigentlich nicht sein.

                          Es gibt immer mehrere Teile eines Scriptes.

                          1. Der allgemeinte Teil

                          Dieser Teil enthaelt keinen Trigger und wird somit ausgefuehrt, wenn

                          die Scriptengine neu gestartet wird bzw. wenn manuell das Script ueber "Script neu starten" ausgefuehrt wird.

                          2. Dann gibt es den Teil mit Trigger.

                          Ein Trigger kann ein schedule sein oder auch eine Reaktion auf eine Aenderung von Objekten.

                          Funktionen werden nicht ausgefuehrt, wenn sie nicht im allgemeinen Teil aufgerufen werden.

                          Der allgemeine Teil wird also immer ausgefuehrt bevor ein Trigger ausgefuehrt wird.

                          Daher habe ich dort immer die allgemeinen Variablen definiert. Alles was nicht refreshed werden muss fuer die Triggerausfuehrung.

                          versuche es mal so…

                          var fs = require('fs');                           // enable write
                          
                          // jeden Tag um 12:00 "0 12 * * *" 
                          schedule("59 11 * * *" , Aussentemperatur_Schreiben); // jeden Tag um 11:59
                          Aussentemperatur_Schreiben(); // bei Scriptstart
                          
                          function Aussentemperatur_Schreiben ()
                          {
                          var currTemp = getState("hm-rpc.0.JEQ0014148.1.TEMPERATURE").val;    // Lese aktuelle Temperatur
                          var currHum = getState("hm-rpc.0.JEQ0014148.1.HUMIDITY").val;    // Lese aktuelle Feuchtigkeit
                          
                           // 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 + ";" + currSec + ";" + currTemp + ";"  + currHum +  "\n";
                          
                          // Füge Satz in Datei ein
                          fs.appendFileSync("/opt/iobroker/iobroker-data/templog.csv", string);   
                          
                          // erzeuge Logeintrag
                          log("Temperatur geloggt :" + currDate + " " + currTime + " " + currSec + " " + currTemp + " "  + currHum , "info");
                          
                          }
                          
                          // Funktion zur Erzeugung von führenden Nullen für das Datum Format
                          function addZero(i) {
                              if (i < 10) {
                                  i = "0" + i;
                              }
                              return i;
                          }
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • blauholsten
                            blauholsten Developer last edited by

                            @looxer01:

                            Hi Stephan,

                            1. Der allgemeinte Teil

                            Dieser Teil enthaelt keinen Trigger und wird somit ausgefuehrt, wenn

                            die Scriptengine neu gestartet wird bzw. wenn manuell das Script ueber "Script neu starten" ausgefuehrt wird.

                            2. Dann gibt es den Teil mit Trigger.

                            Ein Trigger kann ein schedule sein oder auch eine Reaktion auf eine Aenderung von Objekten.

                            Funktionen werden nicht ausgefuehrt, wenn sie nicht im allgemeinen Teil aufgerufen werden. `

                            Hi,

                            erstmal danke für deine Erklärung! Ich habe in Sachen Scripting/Programmierung so gut wie kein Plan, bzw stehe am Anfang.

                            Aber…..

                            Aussentemperatur_Schreiben(); // bei Scriptstart
                            

                            steht nach meinen Erachtens doch im allgemeinen Teil, und ruft somit bei Scriptstart die Funktion

                            function Aussentemperatur_Schreiben ()
                            

                            auf. :?: :?: :?:

                            Ich habe es selber eben Anhand eines kleinen Scripts bei mir getestet. Und da war es so wie ich schrieb.

                            Die in dem Script verwendete weise um das Datum zu selektieren….

                            Bluefox hat mal in einen anderen Beitrag für mich folgende Funktion geschrieben. P.S. Danke nachmal

                            function getTimeAsString(d) {
                                var date = d || new Date();
                                return date.getFullYear() + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + ('0' + date.getDate()).slice(-2) + ' '+
                             ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' +  ('0' + date.getSeconds()).slice(-2);    
                            }
                            

                            sieht etwas kürzer aus.

                            1 Reply Last reply Reply Quote 0
                            • L
                              looxer01 last edited by

                              ja, absolut korrekt. hatte ich uebersehen, weil nicht getestet

                              aber es entspricht auch der Erklaerung. Da bin ich ja teilweise gerettet :oops:

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              852
                              Online

                              31.7k
                              Users

                              79.7k
                              Topics

                              1.3m
                              Posts

                              5
                              13
                              6513
                              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