Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. InfluxDB
  5. Pflege der InfluxDB

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    963

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    692

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Pflege der InfluxDB

Geplant Angeheftet Gesperrt Verschoben InfluxDB
44 Beiträge 7 Kommentatoren 166 Aufrufe 6 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde aufgespalten von backitup Speicherort Homoran
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    Laser
    schrieb am zuletzt editiert von
    #35

    Ich habe 2 Jahre eingestellt. Wenn das handelbar ist, reicht mir das. Es sind immer noch viel zu viele Werte zu oft geloggt.

    1 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      Laser
      schrieb am zuletzt editiert von Laser
      #36

      Fehler12234

      1 Antwort Letzte Antwort
      0
      • fuzzy1955F fuzzy1955

        @Laser sagte in Pflege der InfluxDB:

        Ändern- da habe ich Bedenken, daß Alles auf einmal weg ist

        Hi,

        die InfluxDB kann man doch auch mit SQL-Befehlen bedienen, soweit ich aus der Doku sehe. Ich verwende als langjähriger SQL-Datenbank-Entwickler lieber die mysql, aber die Befehlsstruktur ist sehr ähnlich:

        mysql:
        SELECT * FROM iobroker.ts_number WHERE ts <= xxxxxxxx;
        
        Zum Löschen alter Daten **(VORSICHT, DATENBANK VORHER UNBEDINGT SICHERN!!)**
        DELETE FROM iobroker.ts_number WHERE ts <= xxxxxxxx;
        
        InfluxDB:
        SELECT * FROM "absolutismus" WHERE time = '2016-07-31T20:07:00Z'
        

        Der IOB sammelt die Daten [Edit Begin] aller Datenpunkte, bei denen die DB-Speicherung aktiviert ist, [Edit end] in der Datenbank-Tabelle "ts_number" und diese wird schnell sehr groß, wenn man im Sekundentakt speichert. Mein Backup zur mysql-DB hat jetzt nach einem Jahr etwa 4 MB.

        Die 2 wichtigsten Tabellen sind:
        MySQL.jpg

        In der Tabelle "datapoints" legt der IOB die Datenpunkte bei denen die DB-Speicherung aktiviert ist, als Referenz zur Tabelle "ts_Number" an:
        MySQL2.jpg

        Und damit kann man die Datenmengen schon gut im Zaum halten ;-) Vielleicht hilft euch das etwas. Fragen generell zu SQL kann ich gern beantworten.

        Gruß, Fuzzy

        fuzzy1955F Online
        fuzzy1955F Online
        fuzzy1955
        schrieb am zuletzt editiert von fuzzy1955
        #37

        sagte in Pflege der InfluxDB:

        Und damit kann man die Datenmengen schon gut im Zaum halten

        Weitere Tipps zur Vermeidung der Datenflut:

        Erstellen einer neuen Datenbanktabelle "statistik".
        MySQL3.jpg

         CREATE TABLE iobroker.statistik(  
        	id INTEGER NOT NULL AUTO_INCREMENT,
        	name TEXT NOT NULL,
        	date DATETIME NOT NULL,
        	val INT NOT NULL,
        PRIMARY KEY (id,date)) ENGINE = InnoDB;
        
        CREATE INDEX IX_statistik01 ON iobroker.statistik(name);
        

        [Edit] Erstellen eines JavaScripts "Jahresabschluss" (läuft nur einmal im Jahr am 2.1.):

        const idStatistikdaten = 'alias.0.Diagrammdaten.Statistikdaten';
        
        let dtHeute = new Date(Date.now());
        let intVJahr = dtHeute.getFullYear() - 1;
        let intVVJahr = dtHeute.getFullYear() - 2;
        let strSQL;
        let IntAnzDS = 0;
        
        function sendToPromise(iSQL) { 
            return new Promise((resolve, reject) => { 
                sendTo('sql.0', 'query', iSQL, function (result) {
                    try {
                        IntAnzDS = JSON.stringify(result.result);
                        IntAnzDS = JSON.stringify(result.result);
                        IntAnzDS = IntAnzDS.replace('[{"AnzahlDS":', '');
                        IntAnzDS = Number(IntAnzDS.replace('}]', ''));
                        resolve(IntAnzDS); 
                    } catch {
                        console.error(result.error);
                    }
                });
            }); 
        } 
        
        //------------- Prüfen, ob Vorjahresdaten in der Statistik bereits vorhanden sind -> Abbruch --------------------------------
        (async () => { 
            try {
                strSQL = "SELECT COUNT(id) as AnzahlDS FROM iobroker.statistik WHERE DATE_FORMAT(date, '%Y') = " + intVJahr + ";";
                const res = await sendToPromise(strSQL); 
                //const count = Number(res?.result?.[0]?.AnzahlDS ?? res?.rows?.[0]?.AnzahlDS ?? 0);
                //console.log('AnzahlDS:'+ IntAnzDS); 
                await DatenbankAktualisieren(IntAnzDS); 
            } 
            catch (err) {
                console.error('Fehler:', err); 
            } 
        })();
        
        
        function DatenbankAktualisieren (iCount) {
        
            if (iCount == 0) {
        
                //------------- JahresMonatsdaten in die Tabelle iobroker.statistik verdichten --------------------------------
        
                strSQL = "INSERT INTO iobroker.statistik (id, name, date, val) " +
                    "SELECT id, name, DATE_FORMAT(tsDate, '%Y-%m-01 00:00:00') as Datum, CONVERT(SUM(val), INT) as val " +
                    "FROM iobroker.vw_number " +
                    "WHERE DATE_FORMAT(tsDate, '%Y') = " + intVJahr + " " +
                    "GROUP BY id, name, DATE_FORMAT(tsDate, '%Y-%m') " +
                    "ORDER  BY id, name, DATE_FORMAT(tsDate, '%Y-%m');";
        
                sendTo('sql.0', 'query', strSQL, function (result) {
                    if (result.error) {
                        console.error(result.error);
                    } else {
                        setState (idStatistikdaten,JSON.stringify(result.result));
                    }
                });
        
                //------------- alte JahresMonatsdaten löschen --------------------------------
        
                strSQL = "DELETE FROM iobroker.ts_number WHERE SUBSTRING(from_unixtime(SUBSTRING(ts, 1, 10)),1,4) = " + intVVJahr + ";";
                sendTo('sql.0', 'query', strSQL, function (result) {
                    if (result.error) {
                        console.error(result.error);
                    } else {
                        console.log("Die Daten des Jahres " + intVVJahr + " wurden gelöscht.");
                    }
                });
        
                console.log("Die Daten von " + intVJahr + " wurden in  die Tabelle statistik verdichtet angefügt (YYYY-MM-01)");
                
            } else {
                 console.log("Das Jahr " + intVJahr + " wurde bereits abgeschlossen ");
            }
        }
        
        

        [Edit] Mit der Tabelle "statistiken" lassen sich nahezu beliebig viele Vorjahre auswerten oder in Diagrammen darstellen. Natürlich kann man die Abfragebedingungen erweitern, so dass nur bestimmte Datenpunkte in die Statistiktabelle laufen (z.B. WHERE id in (1,25,67,123,555 ...).

        Fragen zu SQL-Datenbanken kann ich gern beantworten.

        Gruß, Fuzzy

        Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.19, VIS-2, MariaDB (MySQL)
        Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
        PV: 10 kWp Module, 2 x Deye WR SUN-10K, 2 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

        1 Antwort Letzte Antwort
        0
        • L Offline
          L Offline
          Laser
          schrieb am zuletzt editiert von Laser
          #38

          Ich habe jetzt alle unnötig vom Scraper generierten Measurements einzeln gelöscht. Viel Arbeit. Jetzt bin ich bei etwa 9GB Datenbankbackup angelangt. Damit scheint das Backup klar zu kommen.

          1 Antwort Letzte Antwort
          0
          • B Online
            B Online
            bloop
            schrieb am zuletzt editiert von
            #39

            Ich habe vor einiger Zeit ein Skript zum Löschen Alter InfuxDB Measurements geschrieben. Dieses kann Datenpunkte die nicht mehr aktualisiert werden recht einfach löschen. Eventuell hilft euch dies weiter. 😜

            https://forum.iobroker.net/topic/80965/influxdb-alten-datenmüll-löschen

            1 Antwort Letzte Antwort
            0
            • L Offline
              L Offline
              Laser
              schrieb am zuletzt editiert von Laser
              #40

              Da müssen aber erst mal die richtigen Measurements im Script stehen. Gelöscht wird nur, wenn der Text absolut übereinstimmt.

              B 1 Antwort Letzte Antwort
              0
              • L Laser

                Da müssen aber erst mal die richtigen Measurements im Script stehen. Gelöscht wird nur, wenn der Text absolut übereinstimmt.

                B Online
                B Online
                bloop
                schrieb am zuletzt editiert von
                #41

                @Laser
                Das Skript analysiert deine Datenbank auf Measurements welche älter als x nicht mehr beschrieben wurden. (Kannst du definieren)
                Und fragt dann welche Measurements gelöscht werden sollen.

                1 Antwort Letzte Antwort
                0
                • L Offline
                  L Offline
                  Laser
                  schrieb am zuletzt editiert von Laser
                  #42

                  Geht das dann schneller als die manuelle Auswahl mit drag und drop in den Editor und dann auf die Konsole kopiert? Das Bereinigen hat bei mir etwa 2h gedauert.

                  B 1 Antwort Letzte Antwort
                  0
                  • L Laser

                    Geht das dann schneller als die manuelle Auswahl mit drag und drop in den Editor und dann auf die Konsole kopiert? Das Bereinigen hat bei mir etwa 2h gedauert.

                    B Online
                    B Online
                    bloop
                    schrieb am zuletzt editiert von
                    #43

                    @Laser
                    Skript pullen, konfigurieren, ausführbar machen, starten. ca. 5min. Das ausführen dauert wenige Sekunden. 🤷‍♂️
                    Ob es sich für dich rentiert musst du selbst einschätzen.

                    1 Antwort Letzte Antwort
                    0
                    • L Offline
                      L Offline
                      Laser
                      schrieb zuletzt editiert von Laser
                      #44

                      Das glaube ich noch nicht. Ein einzelner Löschbefehl dauerte teilweise Minuten. Teilweise Sekunden.

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      830

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe