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

                        979
                        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