Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. History Adapter CSV versenden

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    History Adapter CSV versenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • haus-automatisierung
      haus-automatisierung Developer Most Active @Sören last edited by

      @sören sagte in History Adapter CSV versenden:

      Es muss nur der Timestamp und der Wert des Datenpunktes aufgeführt sein.

      Über welchen Zeitraum? Jeden Tag eine Mail mit dem Inhalt der letzten 24 Stunden?

      Sören 1 Reply Last reply Reply Quote 0
      • Sören
        Sören @haus-automatisierung last edited by

        @haus-automatisierung 1 Mal pro Woche die Daten der letzten Woche. Der Datenpunkt wird nur ca. 4 mal am Tag aktualisiert.

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

          @sören sagte in History Adapter CSV versenden:

          @haus-automatisierung 1 Mal pro Woche die Daten der letzten Woche. Der Datenpunkt wird nur ca. 4 mal am Tag aktualisiert.

          Dann bitte mal so testen

          • objId muss den Datenpunkt enthalten, für welchen History aktiviert ist
          • Bitte deine Mailadresse und Absender anpassen

          Das Ganze startet ein Cron, welcher Montags um 00:00 läuft und die Mail sendet.

          Die Mail-Funktion habe ich nur aus der Doku so abgetippt - nicht getestet

          const objId = 'yr.0.forecastHourly.0h.air_temperature';
          
          const fileName = `${objId}.csv`;
          const filePath = `/opt/iobroker/iobroker-data/${fileName}`;
          
          var fs = require('fs');
          
          schedule("0 0 * * 1", async () => {
              const end = new Date().getTime();
              const start = end - (60 * 60 * 24 * 7 * 1000); // letzte 7 Tage;
          
              getHistory('history.0', {
                  id: objId,
                  start: start,
                  end: end,
                  aggregate: 'none',
                  timeout: 2000
              }, (err, result) => {
                  if (err) {
                      console.error(`Unable to get history of ${objId}: ${err}`);
                  } else if (result) {
                      let csvData = ['timestamp;value'];
          
                      for (var i = 0; i < result.length; i++) {
                          csvData.push(`${new Date(result[i].ts).toISOString()};${result[i].val}`);
                      }
          
                      fs.writeFileSync(filePath, csvData.join("\n"));
          
                      sendTo('email.0', {
                          from: 'iobroker@mydomain.com',
                          to: 'yourmail@mydomain.com',
                          subject: `History-Daten von ${objId}`,
                          text: `Hier sind die History-Daten von ${start.toLocaleString()} bis ${end.toLocaleString()}`,
                          attachments: [
                              {
                                  path: filePath
                              }
                          ]
                      }, (err, result) => {
                          if (err) {
                              console.error(`Unable to send email: ${err}`);
                          }
                          fs.unlinkSync(filePath);
                      });
                  }
              });
          });
          
          Sören 2 Replies Last reply Reply Quote 1
          • Sören
            Sören @haus-automatisierung last edited by

            @haus-automatisierung Super, vielen Dank das probiere ich mal aus.

            1 Reply Last reply Reply Quote 0
            • Sören
              Sören @haus-automatisierung last edited by

              @haus-automatisierung Habe nun ja meine erste Mail erhalten. Dies hat auch gut funktioniert. Die CSV Datei ist im Anhang. LEider haben die Timestamps einen Versatz von -2 Stunden. In der Tabelle im ioBroker werden die Zeiten richtig angezeigt. Weißt du wo der Fehler liegen könnte? SOnst finde ich das schon irgendwie raus,

              Danke nochmal!

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

                @sören Ja, ich habe die als ISO-String (UTC) ausgegeben im CSV. Siehe new Date(result[i].ts).toISOString(). Wie genau möchtest Du die Daten denn weiter verarbeiten?

                Sören 1 Reply Last reply Reply Quote 0
                • Sören
                  Sören @haus-automatisierung last edited by

                  @haus-automatisierung ich möchte dir in ein Tool importieren. Klappt auch nur der Zeitversatz von zwei Stunden war mir aufgefallen. Aber wenn das leicht anzupassen wäre? Funktioniert alles.

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

                    @sören sagte in History Adapter CSV versenden:

                    ich möchte dir in ein Tool importieren

                    Jetzt müsste ich also raten, in welchem Format das Tool gerne das Datum hätte. Wir machen das so: Hier gibt es ein angepasstes Script, und Du kannst das Format für das Datum selbst bestimmen.

                    const objId = 'yr.0.forecastHourly.0h.air_temperature';
                    const csvDateFormat = 'DD.MM.YYYY hh:mm:ss';
                    
                    const fileName = `${objId}.csv`;
                    const filePath = `/opt/iobroker/iobroker-data/${fileName}`;
                    
                    var fs = require('fs');
                    
                    schedule("0 0 * * 1", async () => {
                        const end = new Date().getTime();
                        const start = end - (60 * 60 * 24 * 7 * 1000); // letzte 7 Tage;
                    
                        getHistory('history.0', {
                            id: objId,
                            start: start,
                            end: end,
                            aggregate: 'none',
                            timeout: 2000
                        }, (err, result) => {
                            if (err) {
                                console.error(`Unable to get history of ${objId}: ${err}`);
                            } else if (result) {
                                let csvData = ['timestamp;value'];
                    
                                for (var i = 0; i < result.length; i++) {
                                    csvData.push(`${formatDate(new Date(result[i].ts), csvDateFormat)};${result[i].val}`);
                                }
                    
                                fs.writeFileSync(filePath, csvData.join("\n"));
                    
                                sendTo('email.0', {
                                    from: 'iobroker@mydomain.com',
                                    to: 'yourmail@mydomain.com',
                                    subject: `History-Daten von ${objId}`,
                                    text: `Hier sind die History-Daten von ${formatDate(new Date(start), csvDateFormat)} bis ${formatDate(new Date(end), csvDateFormat)}`,
                                    attachments: [
                                        {
                                            path: filePath
                                        }
                                    ]
                                }, (err, result) => {
                                    if (err) {
                                        console.error(`Unable to send email: ${err}`);
                                    }
                                    fs.unlinkSync(filePath);
                                });
                            }
                        });
                    });
                    
                    Sören 2 Replies Last reply Reply Quote 0
                    • Sören
                      Sören @haus-automatisierung last edited by

                      @haus-automatisierung klasse, danke für deine tolle Unterstützung. Ja das Tool ist nicht von mir sondern von meiner Firma. Weiß das also auch nicht so genau. Ich probiere das nochmal aus und melde mich.

                      1 Reply Last reply Reply Quote 0
                      • Sören
                        Sören @haus-automatisierung last edited by

                        @haus-automatisierung Habe gestern die neue Mail erhalten. Das Datumsformat ist korrekt, allerdings wird immernoch ein Versatz von 2 Stunden ausgegeben. Wie kann ich hier die richtige Zeitzone einstellen? In der Ausgabe des History Adapters wird die korrekte Zeit für den Timestamp angezeigt.

                        Besten Dank
                        Sören

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

                          @sören sagte in History Adapter CSV versenden:

                          Wie kann ich hier die richtige Zeitzone einstellen?

                          Ich habe das gerade noch einmal getestet. Bei mir stimmt das Datum / Uhrzeit. Hast Du auf dem System die richtige Zeitzone konfiguriert?

                          sudo timedatectl set-timezone Europe/Berlin
                          
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          1.1k
                          Online

                          32.1k
                          Users

                          80.7k
                          Topics

                          1.3m
                          Posts

                          2
                          14
                          891
                          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