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.
    • Sören
      Sören last edited by

      Hallo zusammen,

      gibt es eine Möglichkeit, aus dem History Adapter die generierte CSV Datei automatisch an eine Mailadresse zu versenden? Dafür benötige ich wohl den E-Mail Adapter. Finde aber keine Möglichkeit, die CSV Datei automatisch zu generieren und zu speichern. Am besten wäre eine Lösung mit Blockly, da ich mit Javascript noch nicht zu Recht komme.

      VG
      Sören

      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:

        Am besten wäre eine Lösung mit Blockly, da ich mit Javascript noch nicht zu Recht komme.

        Für die getHistory Funktion gibt es keinen Blockly-Baustein soweit ich weiß. Daher wird das nichts ohne JavaScript.

        Wie genau soll die CSV-Datei denn aufgebaut sein?

        Siehe https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#gethistory

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

          @haus-automatisierung Danke für die schnelle Reaktion. Eigentlich reicht mir die manuell generierte CSV Datei im Datenpunkt völlig aus. Diese soll einfach automatisch an eine E-Mailadresse versendet werden, damit ich nicht immer im Datenpunkt nachsehen muss. Es muss nur der Timestamp und der Wert des Datenpunktes aufgeführt sein.

          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:

            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

                                985
                                Online

                                32.1k
                                Users

                                80.7k
                                Topics

                                1.3m
                                Posts

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