Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Zurücksetzen einzelner Datenpunkte im SQL-Adapter

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Zurücksetzen einzelner Datenpunkte im SQL-Adapter

Scheduled Pinned Locked Moved ioBroker Allgemein
87 Posts 16 Posters 13.0k Views 14 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • metaxaM metaxa

    @Gaspode
    Wie meinst du das?
    Deine coole Änderung bezieht sich nur auf den Trockendurchlauf?

    BananaJoeB Offline
    BananaJoeB Offline
    BananaJoe
    Most Active
    wrote on last edited by
    #58

    @metaxa sagte in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

    @Gaspode
    Wie meinst du das?
    Deine coole Änderung bezieht sich nur auf den Trockendurchlauf?

    Das Problem beim löschen bleibt, nur das ermitteln der Anzahl der zu löschenden Werte ist optimiert worden

    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

    metaxaM 1 Reply Last reply
    1
    • metaxaM metaxa

      @Gaspode
      Wie meinst du das?
      Deine coole Änderung bezieht sich nur auf den Trockendurchlauf?

      GaspodeG Offline
      GaspodeG Offline
      Gaspode
      wrote on last edited by
      #59

      @metaxa said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

      Deine coole Änderung bezieht sich nur auf den Trockendurchlauf?

      @bananajoe said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

      Das Problem beim löschen bleibt, nur das ermitteln der Anzahl der zu löschenden Werte ist optimiert worden

      Exakt.

      1 Reply Last reply
      1
      • BananaJoeB BananaJoe

        @metaxa sagte in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

        @Gaspode
        Wie meinst du das?
        Deine coole Änderung bezieht sich nur auf den Trockendurchlauf?

        Das Problem beim löschen bleibt, nur das ermitteln der Anzahl der zu löschenden Werte ist optimiert worden

        metaxaM Offline
        metaxaM Offline
        metaxa
        wrote on last edited by metaxa
        #60

        @bananajoe
        ah ok! Umsomehr wäre dann am Ende des TRockendurchlaufs eine kopierbare Liste für mich der Hit! Die könnte ich dann hier
        6fd3894f-d2dc-424b-b3a0-eb582bf479cf-image.png
        einfügen und ausführen. Aus Sicherheitsgründen kleinere Stücke.

        Ist aber händisch mit dem io-Log auch kein großartiges Problem, bin schon mitten drinnen.

        Bei manchen Datenpunkten mit vielen Einträgen in der DB muss ich beim Löschen limitieren:

        delete from ts_number where id=156 limit 500000;
        delete from datapoints where id=156;
        

        DANKE für Eure Arbeit und Überlegungen!

        1 Reply Last reply
        0
        • GaspodeG Offline
          GaspodeG Offline
          Gaspode
          wrote on last edited by Gaspode
          #61

          Hallo,

          noch zwei Ergänzungen:

          • Wenn ein Alias für einen Datenpunkt vergeben ist, wird das berücksichtigt
          • Am Ende eines Trockenlaufs werden SQL Delete Statements zum manuellen Löschen ausgegeben

          Dabei habe ich noch einen kleinen Fehler am Anfang korrigiert: sendTo kann nicht mit await verwendet werden, dafür gibt es inzwischen die Funktion sendToAsync. Da diese leider im Moment noch einen Fehler hat, hab ich dafür eine Ersatzfunktion eingefügt. Ein GitHub Issue dafür gibt es schon und der Fehler wird in der nächsten Version des Javascript Adapters korrigiert sein.
          In der Praxis hat das Verwenden von sentTo wohl keine Probleme gemacht, da der erste SQL Befehl lange genug dauerte, sodass die Liste rechtzeitig gefüllt werden konnte.

          // SQL_Delete_Dead_Objects
          // V0.5
          //
          // Changelog:
          // ----------
          // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
          // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
          // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
          // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
          // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
          // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
          //                               anstelle des Datenpunktnamens verwendet.
          // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
          //                               ausgegeben.
          
          // Einstellungen:
          // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
          const activate_delete = false;
          
          // Name der SQL-Instanz, normalerweiser sql.0
          const sql_instance = 'sql.0';
          // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
          const sql_dbname = 'iobroker';
          
          // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
          async function mySendToAsync(_adapter, cmd, msg) {
              return new Promise((resolve, reject) => {
                  sendTo(_adapter, cmd, msg, res => {
                      if (!res || res.error) {
                          reject(res ? res.error : new Error('Unknown error'));
                      } else {
                          resolve(res);
                      }
                  });
              });
          }
          
          
          // Funktion zum Suchen und Löschen
          async function wartung() {
              try {
                  let sqlDeleteStatements = new Array();
          
                  // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                  let datapointsActiveArray = new Array();
                  const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
          
                  for (const i in result) {
                      datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                  }
          
                  // alle Datenpunkte aus Db holen
                  let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                  if (datapoints) {
                      let count = 0;
                      let sum = 0;
          
                      // Datenpunkte durchlaufen
                      for (const datapoint of datapoints) {
                          // prüfen ob kein Objekt in ioBroker existiert
                          // if (!getObject(datapoint.name)) {
          
                          // prüfen ob SQL-Protokollierung nicht aktiv ist
                          if (!datapointsActiveArray.includes(datapoint.name)) {
                              count++;
          
                              // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                              let countBool = 0;
                              let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                              if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                  countBool = booleanTableItems[0].cnt;
                                  if (activate_delete) {
                                      sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                          if (result.error) {
                                              console.error(result.error);
                                          } else {
                                              // show result
                                              console.log('Rows: ' + JSON.stringify(result.result));
                                          }
                                      });
                                  }
                                  else {
                                      sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                  }
                              }
          
                              // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                              let countNumber = 0;
                              let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                              if (numberTableItems && numberTableItems[0].cnt > 0) {
                                  countNumber = numberTableItems[0].cnt;
                                  if (activate_delete) {
                                      sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                          if (result.error) {
                                              console.error(result.error);
                                          } else {
                                              // show result
                                              console.log('Rows: ' + JSON.stringify(result.result));
                                          }
                                      });
                                  }
                                  else {
                                      sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                  }
                              }
          
                              // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                              let countString = 0;
          
                              let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
          
                              if (stringTableItems && stringTableItems[0].cnt > 0) {
          
                                  countString = stringTableItems[0].cnt;
          
                                  if (activate_delete) {
                                      sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                          if (result.error) {
                                              console.error(result.error);
                                          } else {
                                              // show result
                                              console.log('Rows: ' + JSON.stringify(result.result));
                                          }
                                      });
                                  }
                                  else {
                                      sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                  }
                              }
          
                              if (activate_delete) {
                                  sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                      if (result.error) {
                                          console.error(result.error);
                                      } else {
                                          // show result
                                          console.log('Rows: ' + JSON.stringify(result.result));
                                      }
                                  });
                              }
                              else {
                                  sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                              }
          
                              console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                              sum = sum + countBool + countNumber + countString;
                          }
                      }
                      console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
          
                      if (!activate_delete) {
                          console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                          sqlDeleteStatements.forEach(element => console.log(element));
                      }
                  }
              } catch (err) {
                  console.error(`[wartung] error: ${err.message}`);
                  console.error(`[wartung] stack: ${err.stack}`);
              }
          }
          
          async function getQueryResult(query) {
              return new Promise((resolve, reject) => {
                  sendTo(sql_instance, 'query', query, function (result) {
                      if (!result.error) {
                          resolve(result.result);
                      } else {
                          resolve(null);
                      }
                  });
              });
          }
          
          wartung();
          
          metaxaM liv-in-skyL BananaJoeB 3 Replies Last reply
          3
          • GaspodeG Gaspode

            Hallo,

            noch zwei Ergänzungen:

            • Wenn ein Alias für einen Datenpunkt vergeben ist, wird das berücksichtigt
            • Am Ende eines Trockenlaufs werden SQL Delete Statements zum manuellen Löschen ausgegeben

            Dabei habe ich noch einen kleinen Fehler am Anfang korrigiert: sendTo kann nicht mit await verwendet werden, dafür gibt es inzwischen die Funktion sendToAsync. Da diese leider im Moment noch einen Fehler hat, hab ich dafür eine Ersatzfunktion eingefügt. Ein GitHub Issue dafür gibt es schon und der Fehler wird in der nächsten Version des Javascript Adapters korrigiert sein.
            In der Praxis hat das Verwenden von sentTo wohl keine Probleme gemacht, da der erste SQL Befehl lange genug dauerte, sodass die Liste rechtzeitig gefüllt werden konnte.

            // SQL_Delete_Dead_Objects
            // V0.5
            //
            // Changelog:
            // ----------
            // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
            // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
            // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
            // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
            // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
            // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
            //                               anstelle des Datenpunktnamens verwendet.
            // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
            //                               ausgegeben.
            
            // Einstellungen:
            // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
            const activate_delete = false;
            
            // Name der SQL-Instanz, normalerweiser sql.0
            const sql_instance = 'sql.0';
            // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
            const sql_dbname = 'iobroker';
            
            // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
            async function mySendToAsync(_adapter, cmd, msg) {
                return new Promise((resolve, reject) => {
                    sendTo(_adapter, cmd, msg, res => {
                        if (!res || res.error) {
                            reject(res ? res.error : new Error('Unknown error'));
                        } else {
                            resolve(res);
                        }
                    });
                });
            }
            
            
            // Funktion zum Suchen und Löschen
            async function wartung() {
                try {
                    let sqlDeleteStatements = new Array();
            
                    // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                    let datapointsActiveArray = new Array();
                    const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
            
                    for (const i in result) {
                        datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                    }
            
                    // alle Datenpunkte aus Db holen
                    let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                    if (datapoints) {
                        let count = 0;
                        let sum = 0;
            
                        // Datenpunkte durchlaufen
                        for (const datapoint of datapoints) {
                            // prüfen ob kein Objekt in ioBroker existiert
                            // if (!getObject(datapoint.name)) {
            
                            // prüfen ob SQL-Protokollierung nicht aktiv ist
                            if (!datapointsActiveArray.includes(datapoint.name)) {
                                count++;
            
                                // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                                let countBool = 0;
                                let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                                if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                    countBool = booleanTableItems[0].cnt;
                                    if (activate_delete) {
                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                            if (result.error) {
                                                console.error(result.error);
                                            } else {
                                                // show result
                                                console.log('Rows: ' + JSON.stringify(result.result));
                                            }
                                        });
                                    }
                                    else {
                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                    }
                                }
            
                                // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                                let countNumber = 0;
                                let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                                if (numberTableItems && numberTableItems[0].cnt > 0) {
                                    countNumber = numberTableItems[0].cnt;
                                    if (activate_delete) {
                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                            if (result.error) {
                                                console.error(result.error);
                                            } else {
                                                // show result
                                                console.log('Rows: ' + JSON.stringify(result.result));
                                            }
                                        });
                                    }
                                    else {
                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                    }
                                }
            
                                // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                                let countString = 0;
            
                                let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
            
                                if (stringTableItems && stringTableItems[0].cnt > 0) {
            
                                    countString = stringTableItems[0].cnt;
            
                                    if (activate_delete) {
                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                            if (result.error) {
                                                console.error(result.error);
                                            } else {
                                                // show result
                                                console.log('Rows: ' + JSON.stringify(result.result));
                                            }
                                        });
                                    }
                                    else {
                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                    }
                                }
            
                                if (activate_delete) {
                                    sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                        if (result.error) {
                                            console.error(result.error);
                                        } else {
                                            // show result
                                            console.log('Rows: ' + JSON.stringify(result.result));
                                        }
                                    });
                                }
                                else {
                                    sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                                }
            
                                console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                                sum = sum + countBool + countNumber + countString;
                            }
                        }
                        console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
            
                        if (!activate_delete) {
                            console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                            sqlDeleteStatements.forEach(element => console.log(element));
                        }
                    }
                } catch (err) {
                    console.error(`[wartung] error: ${err.message}`);
                    console.error(`[wartung] stack: ${err.stack}`);
                }
            }
            
            async function getQueryResult(query) {
                return new Promise((resolve, reject) => {
                    sendTo(sql_instance, 'query', query, function (result) {
                        if (!result.error) {
                            resolve(result.result);
                        } else {
                            resolve(null);
                        }
                    });
                });
            }
            
            wartung();
            
            metaxaM Offline
            metaxaM Offline
            metaxa
            wrote on last edited by metaxa
            #62

            @gaspode

            Mega!!!!!!!

            javascript.0 (2778652) script.js.010_Testen.SQL_3_Datenpunkte_löschen: Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:

            Herzlichen Dank!

            GaspodeG 1 Reply Last reply
            0
            • metaxaM metaxa

              @gaspode

              Mega!!!!!!!

              javascript.0 (2778652) script.js.010_Testen.SQL_3_Datenpunkte_löschen: Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:

              Herzlichen Dank!

              GaspodeG Offline
              GaspodeG Offline
              Gaspode
              wrote on last edited by Gaspode
              #63

              @metaxa said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

              Herzlichen Dank!

              Gerne. Und den Tippfehler hab ich auch gleich korrigiert (munuell -> manuell). 😄

              1 Reply Last reply
              1
              • GaspodeG Gaspode

                Hallo,

                noch zwei Ergänzungen:

                • Wenn ein Alias für einen Datenpunkt vergeben ist, wird das berücksichtigt
                • Am Ende eines Trockenlaufs werden SQL Delete Statements zum manuellen Löschen ausgegeben

                Dabei habe ich noch einen kleinen Fehler am Anfang korrigiert: sendTo kann nicht mit await verwendet werden, dafür gibt es inzwischen die Funktion sendToAsync. Da diese leider im Moment noch einen Fehler hat, hab ich dafür eine Ersatzfunktion eingefügt. Ein GitHub Issue dafür gibt es schon und der Fehler wird in der nächsten Version des Javascript Adapters korrigiert sein.
                In der Praxis hat das Verwenden von sentTo wohl keine Probleme gemacht, da der erste SQL Befehl lange genug dauerte, sodass die Liste rechtzeitig gefüllt werden konnte.

                // SQL_Delete_Dead_Objects
                // V0.5
                //
                // Changelog:
                // ----------
                // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
                // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
                // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
                // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
                // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
                // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
                //                               anstelle des Datenpunktnamens verwendet.
                // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
                //                               ausgegeben.
                
                // Einstellungen:
                // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
                const activate_delete = false;
                
                // Name der SQL-Instanz, normalerweiser sql.0
                const sql_instance = 'sql.0';
                // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
                const sql_dbname = 'iobroker';
                
                // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
                async function mySendToAsync(_adapter, cmd, msg) {
                    return new Promise((resolve, reject) => {
                        sendTo(_adapter, cmd, msg, res => {
                            if (!res || res.error) {
                                reject(res ? res.error : new Error('Unknown error'));
                            } else {
                                resolve(res);
                            }
                        });
                    });
                }
                
                
                // Funktion zum Suchen und Löschen
                async function wartung() {
                    try {
                        let sqlDeleteStatements = new Array();
                
                        // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                        let datapointsActiveArray = new Array();
                        const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
                
                        for (const i in result) {
                            datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                        }
                
                        // alle Datenpunkte aus Db holen
                        let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                        if (datapoints) {
                            let count = 0;
                            let sum = 0;
                
                            // Datenpunkte durchlaufen
                            for (const datapoint of datapoints) {
                                // prüfen ob kein Objekt in ioBroker existiert
                                // if (!getObject(datapoint.name)) {
                
                                // prüfen ob SQL-Protokollierung nicht aktiv ist
                                if (!datapointsActiveArray.includes(datapoint.name)) {
                                    count++;
                
                                    // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                                    let countBool = 0;
                                    let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                                    if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                        countBool = booleanTableItems[0].cnt;
                                        if (activate_delete) {
                                            sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                                if (result.error) {
                                                    console.error(result.error);
                                                } else {
                                                    // show result
                                                    console.log('Rows: ' + JSON.stringify(result.result));
                                                }
                                            });
                                        }
                                        else {
                                            sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                        }
                                    }
                
                                    // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                                    let countNumber = 0;
                                    let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                                    if (numberTableItems && numberTableItems[0].cnt > 0) {
                                        countNumber = numberTableItems[0].cnt;
                                        if (activate_delete) {
                                            sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                                if (result.error) {
                                                    console.error(result.error);
                                                } else {
                                                    // show result
                                                    console.log('Rows: ' + JSON.stringify(result.result));
                                                }
                                            });
                                        }
                                        else {
                                            sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                        }
                                    }
                
                                    // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                                    let countString = 0;
                
                                    let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
                
                                    if (stringTableItems && stringTableItems[0].cnt > 0) {
                
                                        countString = stringTableItems[0].cnt;
                
                                        if (activate_delete) {
                                            sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                                if (result.error) {
                                                    console.error(result.error);
                                                } else {
                                                    // show result
                                                    console.log('Rows: ' + JSON.stringify(result.result));
                                                }
                                            });
                                        }
                                        else {
                                            sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                        }
                                    }
                
                                    if (activate_delete) {
                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                            if (result.error) {
                                                console.error(result.error);
                                            } else {
                                                // show result
                                                console.log('Rows: ' + JSON.stringify(result.result));
                                            }
                                        });
                                    }
                                    else {
                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                                    }
                
                                    console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                                    sum = sum + countBool + countNumber + countString;
                                }
                            }
                            console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
                
                            if (!activate_delete) {
                                console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                                sqlDeleteStatements.forEach(element => console.log(element));
                            }
                        }
                    } catch (err) {
                        console.error(`[wartung] error: ${err.message}`);
                        console.error(`[wartung] stack: ${err.stack}`);
                    }
                }
                
                async function getQueryResult(query) {
                    return new Promise((resolve, reject) => {
                        sendTo(sql_instance, 'query', query, function (result) {
                            if (!result.error) {
                                resolve(result.result);
                            } else {
                                resolve(null);
                            }
                        });
                    });
                }
                
                wartung();
                
                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                wrote on last edited by
                #64

                @gaspode
                @BananaJoe

                lief durch - hat gefunden und gelöscht - keine fehler - 👍

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                GaspodeG 1 Reply Last reply
                0
                • liv-in-skyL liv-in-sky

                  @gaspode
                  @BananaJoe

                  lief durch - hat gefunden und gelöscht - keine fehler - 👍

                  GaspodeG Offline
                  GaspodeG Offline
                  Gaspode
                  wrote on last edited by
                  #65

                  @liv-in-sky said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

                  lief durch - hat gefunden und gelöscht - keine fehler -

                  Freut mich.

                  Evtl. könnte man etwas in der Form ja als "Purge" oder so in den SQL Adapter einbauen. Dafür müsste natürlich das Lastproblem beim Löschen gelöst sein und man müsste es gut für andere Datenbank-Typen testen.

                  liv-in-skyL 1 Reply Last reply
                  0
                  • GaspodeG Gaspode

                    @liv-in-sky said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

                    lief durch - hat gefunden und gelöscht - keine fehler -

                    Freut mich.

                    Evtl. könnte man etwas in der Form ja als "Purge" oder so in den SQL Adapter einbauen. Dafür müsste natürlich das Lastproblem beim Löschen gelöst sein und man müsste es gut für andere Datenbank-Typen testen.

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    wrote on last edited by
                    #66

                    @gaspode denke, da wäre apollon77 der ansprechpartner

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    GaspodeG 1 Reply Last reply
                    0
                    • liv-in-skyL liv-in-sky

                      @gaspode denke, da wäre apollon77 der ansprechpartner

                      GaspodeG Offline
                      GaspodeG Offline
                      Gaspode
                      wrote on last edited by
                      #67

                      @liv-in-sky said in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

                      @gaspode denke, da wäre apollon77 der ansprechpartner

                      Ja denke ich auch. Ich will ihn nur nicht damit belasten, solange das nicht etwas konkreter ist. 🙂

                      1 Reply Last reply
                      1
                      • A Offline
                        A Offline
                        andi2055
                        wrote on last edited by andi2055
                        #68

                        https://github.com/ioBroker/ioBroker.sql/issues/247

                        Ihr könnt ja nochmal genau beschreiben was wir möchten (nicht einzeln löschen) und "voten"...
                        Danke für die Updates!

                        PS: auch mal prüfen ob das hilft/mittlerweile funktioniert (bei mir zeitlich aktuell schwierig)
                        https://github.com/ioBroker/ioBroker.sql/issues/207

                        1 Reply Last reply
                        0
                        • P Offline
                          P Offline
                          PrinzEisenherz1
                          wrote on last edited by
                          #69

                          Hi zusammen, mal ne Frage.
                          Gibt es diese Möglichkeit auch für influxdb?

                          Gruß Johnny

                          Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                          1 Reply Last reply
                          0
                          • GaspodeG Gaspode

                            Hallo,

                            noch zwei Ergänzungen:

                            • Wenn ein Alias für einen Datenpunkt vergeben ist, wird das berücksichtigt
                            • Am Ende eines Trockenlaufs werden SQL Delete Statements zum manuellen Löschen ausgegeben

                            Dabei habe ich noch einen kleinen Fehler am Anfang korrigiert: sendTo kann nicht mit await verwendet werden, dafür gibt es inzwischen die Funktion sendToAsync. Da diese leider im Moment noch einen Fehler hat, hab ich dafür eine Ersatzfunktion eingefügt. Ein GitHub Issue dafür gibt es schon und der Fehler wird in der nächsten Version des Javascript Adapters korrigiert sein.
                            In der Praxis hat das Verwenden von sentTo wohl keine Probleme gemacht, da der erste SQL Befehl lange genug dauerte, sodass die Liste rechtzeitig gefüllt werden konnte.

                            // SQL_Delete_Dead_Objects
                            // V0.5
                            //
                            // Changelog:
                            // ----------
                            // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
                            // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
                            // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
                            // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
                            // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
                            // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
                            //                               anstelle des Datenpunktnamens verwendet.
                            // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
                            //                               ausgegeben.
                            
                            // Einstellungen:
                            // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
                            const activate_delete = false;
                            
                            // Name der SQL-Instanz, normalerweiser sql.0
                            const sql_instance = 'sql.0';
                            // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
                            const sql_dbname = 'iobroker';
                            
                            // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
                            async function mySendToAsync(_adapter, cmd, msg) {
                                return new Promise((resolve, reject) => {
                                    sendTo(_adapter, cmd, msg, res => {
                                        if (!res || res.error) {
                                            reject(res ? res.error : new Error('Unknown error'));
                                        } else {
                                            resolve(res);
                                        }
                                    });
                                });
                            }
                            
                            
                            // Funktion zum Suchen und Löschen
                            async function wartung() {
                                try {
                                    let sqlDeleteStatements = new Array();
                            
                                    // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                                    let datapointsActiveArray = new Array();
                                    const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
                            
                                    for (const i in result) {
                                        datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                                    }
                            
                                    // alle Datenpunkte aus Db holen
                                    let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                                    if (datapoints) {
                                        let count = 0;
                                        let sum = 0;
                            
                                        // Datenpunkte durchlaufen
                                        for (const datapoint of datapoints) {
                                            // prüfen ob kein Objekt in ioBroker existiert
                                            // if (!getObject(datapoint.name)) {
                            
                                            // prüfen ob SQL-Protokollierung nicht aktiv ist
                                            if (!datapointsActiveArray.includes(datapoint.name)) {
                                                count++;
                            
                                                // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                                                let countBool = 0;
                                                let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                                                if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                                    countBool = booleanTableItems[0].cnt;
                                                    if (activate_delete) {
                                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                                            if (result.error) {
                                                                console.error(result.error);
                                                            } else {
                                                                // show result
                                                                console.log('Rows: ' + JSON.stringify(result.result));
                                                            }
                                                        });
                                                    }
                                                    else {
                                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                                    }
                                                }
                            
                                                // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                                                let countNumber = 0;
                                                let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                                                if (numberTableItems && numberTableItems[0].cnt > 0) {
                                                    countNumber = numberTableItems[0].cnt;
                                                    if (activate_delete) {
                                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                                            if (result.error) {
                                                                console.error(result.error);
                                                            } else {
                                                                // show result
                                                                console.log('Rows: ' + JSON.stringify(result.result));
                                                            }
                                                        });
                                                    }
                                                    else {
                                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                                    }
                                                }
                            
                                                // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                                                let countString = 0;
                            
                                                let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
                            
                                                if (stringTableItems && stringTableItems[0].cnt > 0) {
                            
                                                    countString = stringTableItems[0].cnt;
                            
                                                    if (activate_delete) {
                                                        sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                                            if (result.error) {
                                                                console.error(result.error);
                                                            } else {
                                                                // show result
                                                                console.log('Rows: ' + JSON.stringify(result.result));
                                                            }
                                                        });
                                                    }
                                                    else {
                                                        sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                                    }
                                                }
                            
                                                if (activate_delete) {
                                                    sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                                        if (result.error) {
                                                            console.error(result.error);
                                                        } else {
                                                            // show result
                                                            console.log('Rows: ' + JSON.stringify(result.result));
                                                        }
                                                    });
                                                }
                                                else {
                                                    sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                                                }
                            
                                                console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                                                sum = sum + countBool + countNumber + countString;
                                            }
                                        }
                                        console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
                            
                                        if (!activate_delete) {
                                            console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                                            sqlDeleteStatements.forEach(element => console.log(element));
                                        }
                                    }
                                } catch (err) {
                                    console.error(`[wartung] error: ${err.message}`);
                                    console.error(`[wartung] stack: ${err.stack}`);
                                }
                            }
                            
                            async function getQueryResult(query) {
                                return new Promise((resolve, reject) => {
                                    sendTo(sql_instance, 'query', query, function (result) {
                                        if (!result.error) {
                                            resolve(result.result);
                                        } else {
                                            resolve(null);
                                        }
                                    });
                                });
                            }
                            
                            wartung();
                            
                            BananaJoeB Offline
                            BananaJoeB Offline
                            BananaJoe
                            Most Active
                            wrote on last edited by
                            #70

                            @gaspode Ich habe gerade bei mir 28 Shelly 1PM umorganisiert und dadurch jede Menge alter, verwaister SQL-Aufzeichnungen gehabt.

                            Und das Skript hat prima funktioniert - einfach noch mal Danke an dieser Stelle!

                            ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                            1 Reply Last reply
                            1
                            • T Offline
                              T Offline
                              thof69
                              wrote on last edited by
                              #71

                              Hallo zusammen,

                              erstmal danke für das Skript, so etwas habe ich gesucht! 👍

                              Leider erhalte ich aber beim ausführen des Skripts die Fehler

                              javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length') at wartung (script.js.th.DB_bereinigen:50:58) at processTicksAndRejections (node:internal/process/task_queues:95:5)

                              javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')

                              Hat jemand eine Idee, woran das liegen könnte?

                              GaspodeG BananaJoeB 2 Replies Last reply
                              0
                              • T thof69

                                Hallo zusammen,

                                erstmal danke für das Skript, so etwas habe ich gesucht! 👍

                                Leider erhalte ich aber beim ausführen des Skripts die Fehler

                                javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length') at wartung (script.js.th.DB_bereinigen:50:58) at processTicksAndRejections (node:internal/process/task_queues:95:5)

                                javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')

                                Hat jemand eine Idee, woran das liegen könnte?

                                GaspodeG Offline
                                GaspodeG Offline
                                Gaspode
                                wrote on last edited by
                                #72

                                @thof69
                                Hast du auch die neueste Version des Scriptes genommen, also die hier:
                                https://forum.iobroker.net/post/940051

                                Poste mal dein verwendetes Script in Code Tags, insbesondere den Anfang, wo ggfs. die Variablen angepasst werden müssen.

                                T 1 Reply Last reply
                                0
                                • GaspodeG Gaspode

                                  @thof69
                                  Hast du auch die neueste Version des Scriptes genommen, also die hier:
                                  https://forum.iobroker.net/post/940051

                                  Poste mal dein verwendetes Script in Code Tags, insbesondere den Anfang, wo ggfs. die Variablen angepasst werden müssen.

                                  T Offline
                                  T Offline
                                  thof69
                                  wrote on last edited by thof69
                                  #73

                                  Hallo @Gaspode,

                                  Hast du auch die neueste Version des Scriptes genommen, also die hier:
                                  https://forum.iobroker.net/post/940051

                                  Ja, das ist die Version, die ich genommen habe.

                                  Poste mal dein verwendetes Script in Code Tags, insbesondere den Anfang, wo ggfs. die Variablen angepasst werden müssen.

                                  // SQL_Delete_Dead_Objects
                                  // V0.5
                                  //
                                  // Changelog:
                                  // ----------
                                  // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
                                  // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
                                  // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
                                  // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
                                  // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
                                  // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
                                  //                               anstelle des Datenpunktnamens verwendet.
                                  // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
                                  //                               ausgegeben.
                                   
                                  // Einstellungen:
                                  // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
                                  const activate_delete = false;
                                   
                                  // Name der SQL-Instanz, normalerweiser sql.0
                                  const sql_instance = 'sql.0';
                                  // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
                                  const sql_dbname = 'iobroker';
                                   
                                  // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
                                  async function mySendToAsync(_adapter, cmd, msg) {
                                      return new Promise((resolve, reject) => {
                                          sendTo(_adapter, cmd, msg, res => {
                                              if (!res || res.error) {
                                                  reject(res ? res.error : new Error('Unknown error'));
                                              } else {
                                                  resolve(res);
                                              }
                                          });
                                      });
                                  }
                                   
                                   
                                  // Funktion zum Suchen und Löschen
                                  async function wartung() {
                                      try {
                                          let sqlDeleteStatements = new Array();
                                   
                                          // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                                          let datapointsActiveArray = new Array();
                                          const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
                                   
                                          for (const i in result) {
                                              datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                                          }
                                   
                                          // alle Datenpunkte aus Db holen
                                          let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                                          if (datapoints) {
                                              let count = 0;
                                              let sum = 0;
                                   
                                              // Datenpunkte durchlaufen
                                              for (const datapoint of datapoints) {
                                                  // prüfen ob kein Objekt in ioBroker existiert
                                                  // if (!getObject(datapoint.name)) {
                                   
                                                  // prüfen ob SQL-Protokollierung nicht aktiv ist
                                                  if (!datapointsActiveArray.includes(datapoint.name)) {
                                                      count++;
                                   
                                                      // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                                                      let countBool = 0;
                                                      let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                                                      if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                                          countBool = booleanTableItems[0].cnt;
                                                          if (activate_delete) {
                                                              sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                                                  if (result.error) {
                                                                      console.error(result.error);
                                                                  } else {
                                                                      // show result
                                                                      console.log('Rows: ' + JSON.stringify(result.result));
                                                                  }
                                                              });
                                                          }
                                                          else {
                                                              sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                                          }
                                                      }
                                   
                                                      // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                                                      let countNumber = 0;
                                                      let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                                                      if (numberTableItems && numberTableItems[0].cnt > 0) {
                                                          countNumber = numberTableItems[0].cnt;
                                                          if (activate_delete) {
                                                              sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                                                  if (result.error) {
                                                                      console.error(result.error);
                                                                  } else {
                                                                      // show result
                                                                      console.log('Rows: ' + JSON.stringify(result.result));
                                                                  }
                                                              });
                                                          }
                                                          else {
                                                              sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                                          }
                                                      }
                                   
                                                      // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                                                      let countString = 0;
                                   
                                                      let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
                                   
                                                      if (stringTableItems && stringTableItems[0].cnt > 0) {
                                   
                                                          countString = stringTableItems[0].cnt;
                                   
                                                          if (activate_delete) {
                                                              sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                                                  if (result.error) {
                                                                      console.error(result.error);
                                                                  } else {
                                                                      // show result
                                                                      console.log('Rows: ' + JSON.stringify(result.result));
                                                                  }
                                                              });
                                                          }
                                                          else {
                                                              sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                                          }
                                                      }
                                   
                                                      if (activate_delete) {
                                                          sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                                              if (result.error) {
                                                                  console.error(result.error);
                                                              } else {
                                                                  // show result
                                                                  console.log('Rows: ' + JSON.stringify(result.result));
                                                              }
                                                          });
                                                      }
                                                      else {
                                                          sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                                                      }
                                   
                                                      console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                                                      sum = sum + countBool + countNumber + countString;
                                                  }
                                              }
                                              console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
                                   
                                              if (!activate_delete) {
                                                  console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                                                  sqlDeleteStatements.forEach(element => console.log(element));
                                              }
                                          }
                                      } catch (err) {
                                          console.error(`[wartung] error: ${err.message}`);
                                          console.error(`[wartung] stack: ${err.stack}`);
                                      }
                                  }
                                   
                                  async function getQueryResult(query) {
                                      return new Promise((resolve, reject) => {
                                          sendTo(sql_instance, 'query', query, function (result) {
                                              if (!result.error) {
                                                  resolve(result.result);
                                              } else {
                                                  resolve(null);
                                              }
                                          });
                                      });
                                  }
                                   
                                  wartung();
                                  
                                  

                                  Edit: sql_instance und sql_dbname passen zu meiner Installation.

                                  GaspodeG 1 Reply Last reply
                                  0
                                  • T thof69

                                    Hallo zusammen,

                                    erstmal danke für das Skript, so etwas habe ich gesucht! 👍

                                    Leider erhalte ich aber beim ausführen des Skripts die Fehler

                                    javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length') at wartung (script.js.th.DB_bereinigen:50:58) at processTicksAndRejections (node:internal/process/task_queues:95:5)

                                    javascript.0 2023-06-24 09:00:47.962 error script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')

                                    Hat jemand eine Idee, woran das liegen könnte?

                                    BananaJoeB Offline
                                    BananaJoeB Offline
                                    BananaJoe
                                    Most Active
                                    wrote on last edited by BananaJoe
                                    #74

                                    @thof69 sagte in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

                                    javascript.0 2023-06-24 09:00:47.962	error	script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length') at wartung (script.js.th.DB_bereinigen:50:58) at processTicksAndRejections (node:internal/process/task_queues:95:5)
                                    javascript.0 2023-06-24 09:00:47.962	error	script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')
                                    

                                    Zeile 50 wäre nur eine } und Zeichen 58 finde ich da nicht
                                    also muss dein echtes Skript doch irgendwie anders sein.

                                    Sicher das Datenbankname etc. stimmt? Groß und Kleinschreibung beachtet?
                                    Das Log ist von der Weboberfläche? bzw. von unten da raus kopiert?
                                    Schau bitte mal in das richtige Log bzw. per SSH das Log an, da stehen dann noch mehr Details.

                                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                    T 1 Reply Last reply
                                    1
                                    • T thof69

                                      Hallo @Gaspode,

                                      Hast du auch die neueste Version des Scriptes genommen, also die hier:
                                      https://forum.iobroker.net/post/940051

                                      Ja, das ist die Version, die ich genommen habe.

                                      Poste mal dein verwendetes Script in Code Tags, insbesondere den Anfang, wo ggfs. die Variablen angepasst werden müssen.

                                      // SQL_Delete_Dead_Objects
                                      // V0.5
                                      //
                                      // Changelog:
                                      // ----------
                                      // 10.08.2019 V0.1   Scrounger   erste Version welche nicht mehr existierende Datenpunkte anzeigt           https://forum.iobroker.net/post/289821
                                      // 03.05.2022 V0.2   andi2055    erweitert das die Daten auch aus der Datenbank gelöscht werden             https://forum.iobroker.net/post/798291
                                      // 01.02.2023 V0.3   BananaJoe   umgestellt das nun Datenpunkte ohne SQL-Protokollierung gefunden werden    https://forum.iobroker.net/post/939101
                                      // 02.02.2023 V0.4   BananaJoe   SQL-Instanz Konfigurierbar / Datenbankname konfigurierbar
                                      // 03.02.2023 V0.5   Gaspode     Speicherverbrauch beim Zählen optimiert durch Verwendung von count(*)
                                      // 03.02.2023 V0.5   Gaspode     Wenn für einen Datenpunkt ein Alias vergeben ist, wird das
                                      //                               anstelle des Datenpunktnamens verwendet.
                                      // 03.02.2023 V0.5   Gaspode     Am Ende eines Trockenlaufs werden SQL Befehle zum manuellen Löschen 
                                      //                               ausgegeben.
                                       
                                      // Einstellungen:
                                      // Hier das löschen einschalten! false = nur anzeigen / true = anzeigen und wirklich löschen
                                      const activate_delete = false;
                                       
                                      // Name der SQL-Instanz, normalerweiser sql.0
                                      const sql_instance = 'sql.0';
                                      // Name der SQL-Datenbank - Groß und Kleinschreibung beachten!
                                      const sql_dbname = 'iobroker';
                                       
                                      // Ersatzfunktion, weil sendToAsync im Scripting-Adapter derzeit (6.1.4) buggy ist:
                                      async function mySendToAsync(_adapter, cmd, msg) {
                                          return new Promise((resolve, reject) => {
                                              sendTo(_adapter, cmd, msg, res => {
                                                  if (!res || res.error) {
                                                      reject(res ? res.error : new Error('Unknown error'));
                                                  } else {
                                                      resolve(res);
                                                  }
                                              });
                                          });
                                      }
                                       
                                       
                                      // Funktion zum Suchen und Löschen
                                      async function wartung() {
                                          try {
                                              let sqlDeleteStatements = new Array();
                                       
                                              // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                                              let datapointsActiveArray = new Array();
                                              const result = await mySendToAsync(sql_instance, 'getEnabledDPs', {});
                                       
                                              for (const i in result) {
                                                  datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                                              }
                                       
                                              // alle Datenpunkte aus Db holen
                                              let datapoints = await getQueryResult(`SELECT name, id, type FROM ${sql_dbname}.datapoints`);
                                              if (datapoints) {
                                                  let count = 0;
                                                  let sum = 0;
                                       
                                                  // Datenpunkte durchlaufen
                                                  for (const datapoint of datapoints) {
                                                      // prüfen ob kein Objekt in ioBroker existiert
                                                      // if (!getObject(datapoint.name)) {
                                       
                                                      // prüfen ob SQL-Protokollierung nicht aktiv ist
                                                      if (!datapointsActiveArray.includes(datapoint.name)) {
                                                          count++;
                                       
                                                          // Daten des Datenpunktes in Tabelle 'ts_bool' zählen
                                                          let countBool = 0;
                                                          let booleanTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`);
                                                          if (booleanTableItems && booleanTableItems[0].cnt > 0) {
                                                              countBool = booleanTableItems[0].cnt;
                                                              if (activate_delete) {
                                                                  sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id}`, function (result) {
                                                                      if (result.error) {
                                                                          console.error(result.error);
                                                                      } else {
                                                                          // show result
                                                                          console.log('Rows: ' + JSON.stringify(result.result));
                                                                      }
                                                                  });
                                                              }
                                                              else {
                                                                  sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_bool WHERE id = ${datapoint.id};`);
                                                              }
                                                          }
                                       
                                                          // Daten des Datenpunktes in Tabelle 'ts_number' zählen
                                                          let countNumber = 0;
                                                          let numberTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`);
                                                          if (numberTableItems && numberTableItems[0].cnt > 0) {
                                                              countNumber = numberTableItems[0].cnt;
                                                              if (activate_delete) {
                                                                  sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id}`, function (result) {
                                                                      if (result.error) {
                                                                          console.error(result.error);
                                                                      } else {
                                                                          // show result
                                                                          console.log('Rows: ' + JSON.stringify(result.result));
                                                                      }
                                                                  });
                                                              }
                                                              else {
                                                                  sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_number WHERE id = ${datapoint.id};`);
                                                              }
                                                          }
                                       
                                                          // Daten des Datenpunktes in Tabelle 'ts_string' zählen
                                                          let countString = 0;
                                       
                                                          let stringTableItems = await getQueryResult(`SELECT count(*) as cnt FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`);
                                       
                                                          if (stringTableItems && stringTableItems[0].cnt > 0) {
                                       
                                                              countString = stringTableItems[0].cnt;
                                       
                                                              if (activate_delete) {
                                                                  sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id}`, function (result) {
                                                                      if (result.error) {
                                                                          console.error(result.error);
                                                                      } else {
                                                                          // show result
                                                                          console.log('Rows: ' + JSON.stringify(result.result));
                                                                      }
                                                                  });
                                                              }
                                                              else {
                                                                  sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.ts_string WHERE id = ${datapoint.id};`);
                                                              }
                                                          }
                                       
                                                          if (activate_delete) {
                                                              sendTo(sql_instance, 'query', `DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id}`, function (result) {
                                                                  if (result.error) {
                                                                      console.error(result.error);
                                                                  } else {
                                                                      // show result
                                                                      console.log('Rows: ' + JSON.stringify(result.result));
                                                                  }
                                                              });
                                                          }
                                                          else {
                                                              sqlDeleteStatements.push(`DELETE FROM ${sql_dbname}.datapoints WHERE id = ${datapoint.id};`);
                                                          }
                                       
                                                          console.warn(`DB id: ${datapoint.id} (type: ${datapoint.type}) -> number: ${countNumber}, string: ${countString}, bool: ${countBool} | ioBroker id: '${datapoint.name}'`);
                                                          sum = sum + countBool + countNumber + countString;
                                                      }
                                                  }
                                                  console.warn(`${count} Objects found, that not exist anymore in ioBroker, sum of items in tables: ${sum.toLocaleString().replace(/,/g, ".")}`);
                                       
                                                  if (!activate_delete) {
                                                      console.log('Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:');
                                                      sqlDeleteStatements.forEach(element => console.log(element));
                                                  }
                                              }
                                          } catch (err) {
                                              console.error(`[wartung] error: ${err.message}`);
                                              console.error(`[wartung] stack: ${err.stack}`);
                                          }
                                      }
                                       
                                      async function getQueryResult(query) {
                                          return new Promise((resolve, reject) => {
                                              sendTo(sql_instance, 'query', query, function (result) {
                                                  if (!result.error) {
                                                      resolve(result.result);
                                                  } else {
                                                      resolve(null);
                                                  }
                                              });
                                          });
                                      }
                                       
                                      wartung();
                                      
                                      

                                      Edit: sql_instance und sql_dbname passen zu meiner Installation.

                                      GaspodeG Offline
                                      GaspodeG Offline
                                      Gaspode
                                      wrote on last edited by Gaspode
                                      #75

                                      @thof69
                                      Also ich werde aus der Fehlermeldung auch nicht so recht schlau. Kann es sein, dass du noch eine ziemlich alte JS-Controller bzw. des SQL Adapters Version verwendest?
                                      Ändere mal Zeile 49 von

                                      datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                                      

                                      in

                                      datapointsActiveArray.push(i);
                                      
                                      T 1 Reply Last reply
                                      0
                                      • BananaJoeB BananaJoe

                                        @thof69 sagte in Zurücksetzen einzelner Datenpunkte im SQL-Adapter:

                                        javascript.0 2023-06-24 09:00:47.962	error	script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length') at wartung (script.js.th.DB_bereinigen:50:58) at processTicksAndRejections (node:internal/process/task_queues:95:5)
                                        javascript.0 2023-06-24 09:00:47.962	error	script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')
                                        

                                        Zeile 50 wäre nur eine } und Zeichen 58 finde ich da nicht
                                        also muss dein echtes Skript doch irgendwie anders sein.

                                        Sicher das Datenbankname etc. stimmt? Groß und Kleinschreibung beachtet?
                                        Das Log ist von der Weboberfläche? bzw. von unten da raus kopiert?
                                        Schau bitte mal in das richtige Log bzw. per SSH das Log an, da stehen dann noch mehr Details.

                                        T Offline
                                        T Offline
                                        thof69
                                        wrote on last edited by
                                        #76

                                        Zeile 50 wäre nur eine } und Zeichen 58 finde ich da nicht
                                        also muss dein echtes Skript doch irgendwie anders sein.

                                        Nein, hier als Screenshot aus dem Editor:
                                        1.png

                                        Sicher das Datenbankname etc. stimmt? Groß und Kleinschreibung beachtet?

                                        Ja:
                                        2.png

                                        Schau bitte mal in das richtige Log bzw. per SSH das Log an, da stehen dann noch mehr Details.

                                        Leider nicht:

                                        2023-06-24 15:32:16.899 - info: javascript.0 (74994) Start javascript script.js.th.DB_bereinigen
                                        2023-06-24 15:32:16.908 - info: javascript.0 (74994) script.js.th.DB_bereinigen: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                        2023-06-24 15:32:16.917 - error: javascript.0 (74994) script.js.th.DB_bereinigen: [wartung] error: Cannot read properties of undefined (reading 'length')
                                        2023-06-24 15:32:16.918 - error: javascript.0 (74994) script.js.th.DB_bereinigen: [wartung] stack: TypeError: Cannot read properties of undefined (reading 'length')
                                        at wartung (script.js.th.DB_bereinigen:50:58)
                                        at processTicksAndRejections (node:internal/process/task_queues:95:5)
                                        2023-06-24 15:32:20.966 - info: javascript.0 (74994) Stop script script.js.th.DB_bereinigen
                                        
                                        1 Reply Last reply
                                        0
                                        • GaspodeG Gaspode

                                          @thof69
                                          Also ich werde aus der Fehlermeldung auch nicht so recht schlau. Kann es sein, dass du noch eine ziemlich alte JS-Controller bzw. des SQL Adapters Version verwendest?
                                          Ändere mal Zeile 49 von

                                          datapointsActiveArray.push(result[i].aliasId.length == 0 ? i : result[i].aliasId);
                                          

                                          in

                                          datapointsActiveArray.push(i);
                                          
                                          T Offline
                                          T Offline
                                          thof69
                                          wrote on last edited by
                                          #77

                                          @gaspode
                                          js-controller ist 5.04

                                          Mit der Änderung läuft er, gibt allerdings vieles als Warnung, keine Ahnung, ob das normal ist:

                                          2023-06-24 15:35:11.602 - info: javascript.0 (74994) Start javascript script.js.th.DB_bereinigen
                                          2023-06-24 15:35:11.612 - info: javascript.0 (74994) script.js.th.DB_bereinigen: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                          2023-06-24 15:35:11.677 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 6 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1338281.1.LEVEL'
                                          2023-06-24 15:35:11.686 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 12 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0864598.4.VALVE_STATE'
                                          2023-06-24 15:35:11.695 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 32 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0864261.4.VALVE_STATE'
                                          2023-06-24 15:35:11.704 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 47 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1018841.1.STATE'
                                          2023-06-24 15:35:11.715 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 52 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1018759.1.STATE'
                                          2023-06-24 15:35:11.725 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 54 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1018756.1.STATE'
                                          2023-06-24 15:35:11.735 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 61 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.FEQ0081691.1.STATE'
                                          2023-06-24 15:35:11.745 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 75 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0755679.1.STATE'
                                          2023-06-24 15:35:11.754 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 116 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1029117.1.LEVEL'
                                          2023-06-24 15:35:11.764 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 117 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026596.1.LEVEL'
                                          2023-06-24 15:35:11.777 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 118 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026577.1.LEVEL'
                                          2023-06-24 15:35:11.788 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 119 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026575.1.LEVEL'
                                          2023-06-24 15:35:11.797 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 120 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026451.1.LEVEL'
                                          2023-06-24 15:35:11.811 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 121 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026376.1.LEVEL'
                                          2023-06-24 15:35:11.820 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 122 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1026074.1.LEVEL'
                                          2023-06-24 15:35:11.829 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 123 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1025539.1.LEVEL'
                                          2023-06-24 15:35:11.837 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 131 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1338142.1.LEVEL'
                                          2023-06-24 15:35:11.847 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 132 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1337186.1.LEVEL'
                                          2023-06-24 15:35:11.855 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 137 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.MEQ0221301.1.STATE'
                                          2023-06-24 15:35:11.864 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 138 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0629029.1.STATE'
                                          2023-06-24 15:35:11.873 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 142 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0628988.1.STATE'
                                          2023-06-24 15:35:11.882 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 149 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1098038.1.STATE'
                                          2023-06-24 15:35:11.891 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 164 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1248256.1.STATE'
                                          2023-06-24 15:35:11.900 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 175 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rega.0.LEQ1010661.0.DUTY_CYCLE'
                                          2023-06-24 15:35:11.909 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 178 (type: 1) -> number: 0, string: 0, bool: 0 | ioBroker id: 'th.0.Sonstiges.EingangLetzteBewegung'
                                          2023-06-24 15:35:11.918 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 181 (type: 1) -> number: 0, string: 0, bool: 0 | ioBroker id: 'javascript.2.deviceCounter.on_lights.list'
                                          2023-06-24 15:35:11.928 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 183 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.OEQ1857754.1.LEVEL'
                                          2023-06-24 15:35:12.440 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 194 (type: 0) -> number: 456659, string: 0, bool: 0 | ioBroker id: 'javascript.2.co2sensor.co2'
                                          2023-06-24 15:35:12.448 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 201 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'ping.0.ioBroker-RasPi1.192_168_100_175'
                                          2023-06-24 15:35:12.461 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 202 (type: 2) -> number: 0, string: 0, bool: 4379 | ioBroker id: 'ping.0.192_168_100_170'
                                          2023-06-24 15:35:12.472 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 203 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rega.0.PEQ1947166.0.DUTY_CYCLE'
                                          2023-06-24 15:35:12.480 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 209 (type: 1) -> number: 0, string: 0, bool: 0 | ioBroker id: 'roomba.0.states.status'
                                          2023-06-24 15:35:12.488 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 210 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.QEQ0337755.1.ENERGY_COUNTER'
                                          2023-06-24 15:35:12.496 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 211 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.QEQ0337755.1.POWER'
                                          2023-06-24 15:35:12.504 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 248 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'roomba.0.states.battery'
                                          2023-06-24 15:35:12.512 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 263 (type: 0) -> number: 1891, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Passau.cases7_per_100k'
                                          2023-06-24 15:35:12.521 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 264 (type: 0) -> number: 1936, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Bundesland.Bayern.cases7_per_100k'
                                          2023-06-24 15:35:12.528 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 265 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Stadt.München.cases7_per_100k'
                                          2023-06-24 15:35:12.538 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 266 (type: 0) -> number: 1818, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Stadt.Passau.cases7_per_100k'
                                          2023-06-24 15:35:12.547 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 267 (type: 0) -> number: 1876, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Deggendorf.cases7_per_100k'
                                          2023-06-24 15:35:12.557 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 268 (type: 0) -> number: 1752, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Freyung-Grafenau.cases7_per_100k'
                                          2023-06-24 15:35:12.565 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 269 (type: 0) -> number: 1704, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Regen.cases7_per_100k'
                                          2023-06-24 15:35:12.575 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 270 (type: 0) -> number: 1723, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Rottal-Inn.cases7_per_100k'
                                          2023-06-24 15:35:12.584 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 271 (type: 0) -> number: 1838, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Kreis.Dingolfing-Landau.cases7_per_100k'
                                          2023-06-24 15:35:12.594 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 272 (type: 0) -> number: 9025, string: 0, bool: 0 | ioBroker id: 'tankerkoenig.0.stations.0.e5.feed'
                                          2023-06-24 15:35:12.610 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 273 (type: 0) -> number: 17085, string: 0, bool: 0 | ioBroker id: 'tankerkoenig.0.stations.1.e5.feed'
                                          2023-06-24 15:35:12.624 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 274 (type: 0) -> number: 18012, string: 0, bool: 0 | ioBroker id: 'tankerkoenig.0.stations.2.e5.feed'
                                          2023-06-24 15:35:12.633 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 275 (type: 2) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hue.0.Anna.on'
                                          2023-06-24 15:35:12.642 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 276 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hue.0.Anna.level'
                                          2023-06-24 15:35:12.651 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 278 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Bundesland.Bayern._Impfungen.rkiErstimpfungenImpfquote'
                                          2023-06-24 15:35:12.660 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 279 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Bundesland.Bayern._Impfungen.rkiZweitimpfungenImpfquote'
                                          2023-06-24 15:35:12.673 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 280 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany._Impfungen.rkiErstimpfungenImpfquote'
                                          2023-06-24 15:35:12.683 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 281 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany._Impfungen.rkiZweitimpfungenImpfquote'
                                          2023-06-24 15:35:12.693 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 287 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.1.00085BE9A3AC8F.7.POWER'
                                          2023-06-24 15:35:12.702 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 289 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Regen-Garten.Rain.Rain'
                                          2023-06-24 15:35:12.711 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 290 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Regen-Garten.Rain.SumRain24'
                                          2023-06-24 15:35:12.721 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 291 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Anna.CO2.CO2'
                                          2023-06-24 15:35:12.730 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 292 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Pergola.Temperature.Temperature'
                                          2023-06-24 15:35:12.740 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 293 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Anna.Noise.Noise'
                                          2023-06-24 15:35:12.748 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 294 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Regen-Garten.Rain.SumRain1'
                                          2023-06-24 15:35:12.756 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 295 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Wohnzimmer.CO2.CO2'
                                          2023-06-24 15:35:12.763 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 296 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Paul.CO2.CO2'
                                          2023-06-24 15:35:12.774 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 297 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'netatmo.0.Zuhause-(Anna).Schlafzimmer.CO2.CO2'
                                          2023-06-24 15:35:12.803 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 302 (type: 0) -> number: 11046, string: 0, bool: 0 | ioBroker id: 'tankerkoenig.0.stations.3.e5.feed'
                                          2023-06-24 15:35:12.825 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 303 (type: 0) -> number: 8900, string: 0, bool: 0 | ioBroker id: 'tankerkoenig.0.stations.4.e5.feed'
                                          2023-06-24 15:35:12.843 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 305 (type: 0) -> number: 7169, string: 0, bool: 0 | ioBroker id: 'coronavirus-statistics.0.Germany.Bundesland.Bayern.Hospital.faelleCovidAktuell'
                                          2023-06-24 15:35:12.853 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 313 (type: 0) -> number: 0, string: 0, bool: 0 | ioBroker id: 'hm-rpc.1.00111D899501D6.4.LEVEL'
                                          2023-06-24 15:35:12.866 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: DB id: 344 (type: 0) -> number: 2071, string: 0, bool: 0 | ioBroker id: 'pvforecast.0.plants.pv.power.now'
                                          2023-06-24 15:35:12.876 - warn: javascript.0 (74994) script.js.th.DB_bereinigen: 68 Objects found, that not exist anymore in ioBroker, sum of items in tables: 548.884
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: Löschen war bei diesem Durchlauf nicht aktiviert. Du kannst die Daten mit den folgenden Kommandos manuell in SQL löschen:
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 6;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 12;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 32;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 47;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 52;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 54;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 61;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 75;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 116;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 117;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 118;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 119;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 120;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 121;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 122;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 123;
                                          2023-06-24 15:35:12.876 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 131;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 132;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 137;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 138;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 142;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 149;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 164;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 175;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 178;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 181;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 183;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 194;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 194;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 201;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_bool WHERE id = 202;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 202;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 203;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 209;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 210;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 211;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 248;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 263;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 263;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 264;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 264;
                                          2023-06-24 15:35:12.877 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 265;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 266;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 266;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 267;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 267;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 268;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 268;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 269;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 269;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 270;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 270;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 271;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 271;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 272;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 272;
                                          2023-06-24 15:35:12.878 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 273;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 273;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 274;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 274;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 275;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 276;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 278;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 279;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 280;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 281;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 287;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 289;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 290;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 291;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 292;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 293;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 294;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 295;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 296;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 297;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 302;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 302;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 303;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 303;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 305;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 305;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 313;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.ts_number WHERE id = 344;
                                          2023-06-24 15:35:12.879 - info: javascript.0 (74994) script.js.th.DB_bereinigen: DELETE FROM iobroker.datapoints WHERE id = 344;
                                          2023-06-24 15:35:21.357 - info: javascript.0 (74994) Stop script script.js.th.DB_bereinigen
                                          
                                          GaspodeG 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          748

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe