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. [gelöst] Daten eine Temperatursensors in eione .txt Datei schreiben

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    13
    1
    112

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    561

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 5 Kommentatoren 6.8k 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.
  • H Offline
    H Offline
    HKF8770
    schrieb am zuletzt editiert von
    #1

    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
    
    

    Freddy

    1 Antwort Letzte Antwort
    0
    • V Offline
      V Offline
      versteckt
      schrieb am zuletzt editiert von
      #2

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

      Gesendet von meinem iPhone mit Tapatalk

      Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

      homegear für Homematic und MAX!

      occ, zWave, rpi, hmm und homekit Entwickler

      1 Antwort Letzte Antwort
      0
      • L Offline
        L Offline
        looxer01
        schrieb am zuletzt editiert von
        #3

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

          Vielen dank…hat man mal nen Grundstein kann man es umbauen :-)

          echt mehr als supper

          Freddy

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            HKF8770
            schrieb am zuletzt editiert von
            #5

            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?

            Freddy

            1 Antwort Letzte Antwort
            0
            • L Offline
              L Offline
              looxer01
              schrieb am zuletzt editiert von
              #6

              Hi,

              dann ist es

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

              vG Looxer

              1 Antwort Letzte Antwort
              0
              • H Offline
                H Offline
                HKF8770
                schrieb am zuletzt editiert von
                #7

                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?

                Freddy

                1 Antwort Letzte Antwort
                0
                • L Offline
                  L Offline
                  looxer01
                  schrieb am zuletzt editiert von
                  #8

                  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 :D )

                  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 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    stephan61
                    schrieb am zuletzt editiert von
                    #9

                    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 :D aber auch wenn der Javascript adapter oder iobroker neustartet. :?:

                    (halte nachts iobroker an um ein Backup zu erstellen)

                    Gruß Stephan61

                    1 Antwort Letzte Antwort
                    0
                    • blauholstenB Offline
                      blauholstenB Offline
                      blauholsten
                      Developer
                      schrieb am zuletzt editiert von
                      #10

                      @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 :D 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
                      

                      Entwickler vom: - Viessman Adapter
                      - Alarm Adapter

                      1 Antwort Letzte Antwort
                      0
                      • L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #11

                        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 Antwort Letzte Antwort
                        0
                        • blauholstenB Offline
                          blauholstenB Offline
                          blauholsten
                          Developer
                          schrieb am zuletzt editiert von
                          #12

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

                          Entwickler vom: - Viessman Adapter
                          - Alarm Adapter

                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #13

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

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

                            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

                            778

                            Online

                            32.5k

                            Benutzer

                            81.8k

                            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