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

                              997
                              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