Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. sql daten exportieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    sql daten exportieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      darth last edited by

      Hallo

      ich möchte alle Daten (Stromzählerwerte) aus dem sql(sqliteDB) in ein csv exportieren. Der Adapter hat zwar eine Exportfunktion aber die exportiert nur 500 Datensätze. Einstellungen um diese Grenze zu überspringen konnte ich leider nicht finden. Welchen Weg gibt es?

      Danke

      David G. 1 Reply Last reply Reply Quote 0
      • David G.
        David G. @darth last edited by

        @darth

        Eigentlich hasse ich die Antwort ja.
        Aber gefühlt sind die ersten 10 Google-Treffer von "sqlite csv Export" die Lösung.

        1 Reply Last reply Reply Quote 0
        • D
          darth last edited by

          ja schon, ich dachte das es in IObroker etwas passendes geben würde anstatt mich mit einem SQLite explorer direkt auf die Datenbank zu klinken. Schade.

          Viele Grüße

          David G. F 2 Replies Last reply Reply Quote 0
          • David G.
            David G. @darth last edited by

            @darth

            Gibt's ja evtl.
            Weiß es aber auch nicht.

            1 Reply Last reply Reply Quote 0
            • F
              fastfoot @darth last edited by

              @darth probiere mal, dauert aber mit SQLITE etwas

              /**
               * Zweck:   Exportiert History Daten in eine CSV, wandelt optional in Exceldatum incl. Sommer- und Winterzeit
               * Datum:   19.07.2022
               * Autor:   @fastfoot
               */
              
              const fileName = '/opt/iobroker/ts_number.csv';
              const exportForExcel = false;  //wenn true wird in ein Excel Datum gewandelt()
              
              sendTo('sql.0', 'query', 'select * from ts_number', r => {
                  jsonToCSV(r.result, fileName)
                  log('done!', 'warn')
              })
              
              //converts a JSON table to csv file
              function jsonToCSV(records, fileName) {
                  const fs = require('fs');
                  const CRLF = '\r\n';
                  const DELIM = ';';
                  const TXTQUAL = '"';
                  let csv = Object.keys(records[0]).slice().join(DELIM) + CRLF;
              
                  for (let record of records) {
                      for (let rec of Object.keys(record)) {
                          if (typeof record[rec] == 'number') {
                              if (exportForExcel && rec === 'ts') {
                                  const ts = record[rec];
                                  const dst = isDST(ts);
                                  if (dst) {
                                      record[rec] = ts / 864e5 + 25569 + 2 / 24;
                                  } else {
                                      record[rec] = ts / 864e5 + 25569 + 1 / 24;
                                  }
                              }
                              csv += record[rec].toString().replace('.', ',') + DELIM;
                          } else {
                              csv += TXTQUAL + record[rec] + TXTQUAL + DELIM;
                          }
                      }
                      csv += CRLF;
                  }
                  fs.writeFile(fileName, csv, err => {
                      if (err) console.log(err);
                  })
              }
              
              //berechnet ob Sommer- oder Winterzeit(letzter Sonntag im März und letzter Sonntag im Novemver!!!)
              function isDST(ts) {
                  const dat = new Date(ts);
                  const y = dat.getFullYear();
                  const ls1 = new Date(y, 3, 1);
                  const ls2 = new Date(y, 11, 1);
                  ls1.getDay() > 0 ? ls1.setDate(ls1.getDate() - 7 + (7 - ls1.getDay())) : ls1.setDate(ls1.getDate() - 7);
                  ls2.getDay() > 0 ? ls2.setDate(ls2.getDate() - 7 + (7 - ls2.getDay())) : ls2.setDate(ls2.getDate() - 7);
                  ls1.setHours(3, 0, 0, 0);
                  ls2.setHours(3, 0, 0, 0);
                  return dat >= ls1 && dat <= ls2;
              }
              
              OliverIO AllElectrified 2 Replies Last reply Reply Quote 0
              • D
                darth last edited by

                ok danke erstmal. Wo führt man dieses Skript aus, einfach als neues Script unter Scripte oder als bash script auf der Konsole des PI?

                BananaJoe 1 Reply Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @darth last edited by

                  @darth anhand des sendTo im Scripte würde ich sagen unter Scripte als JS-Script

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @fastfoot last edited by

                    @fastfoot sagte in sql daten exportieren:

                    select * from ts_number

                    als sql würde ich das hier vorschlagen

                    select dp.name,val.ts,val.val,val.ack,val.q from ts_number as val, datapoints as dp where val.id=dp.id
                    

                    sonst kann man die datenpunktbezeichnungen schlecht lesen.

                    sqlite hat selbst auch einen modus um csv dateien zu schreiben.
                    https://stackoverflow.com/questions/6076984/sqlite-how-do-i-save-the-result-of-a-query-as-a-csv-file
                    das dürfte schneller gehen, muss man dann aber als bash befehl aufrufen.

                    1 Reply Last reply Reply Quote 1
                    • AllElectrified
                      AllElectrified @fastfoot last edited by AllElectrified

                      @fastfoot
                      Der Script wirft bei mir leider eine Warnung:

                      16:09:47.731 warn javascript.0 (303078) TypeError: Cannot read property '0' of undefined at jsonToCSV (script.js.diverse_Exports.Export_Gaszaehler:22:34) at Object.cb (script.js.diverse_Exports.Export_Gaszaehler:12:5) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5620:71) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:232:37) at processImmediate (internal/timers.js:464:21)

                      Hab ich das was übersehen? Oder geht er trotzdem und ich muss nur sehr sehr lange warten bis das Ergebnisfile kommt (es wurde kein File im Zielordner angelegt)

                      Gruß
                      Thomas.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      736
                      Online

                      31.9k
                      Users

                      80.1k
                      Topics

                      1.3m
                      Posts

                      6
                      9
                      744
                      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