Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Zurücksetzen einzelner Datenpunkte im SQL-Adapter

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Zurücksetzen einzelner Datenpunkte im SQL-Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • BananaJoe
      BananaJoe Most Active @metaxa last edited by BananaJoe

      @metaxa probiere mal meine Modifikation mit dem Limit oben aus.
      Wenn die klappt schreibe ich dir hier eine kleine Anleitung rein wie du die Datenpunkte von Hand in MySQL bereinigen kannst.
      Basis wäre halt das du die Namen der Datenpunkte hast die es betrifft.

      Ich würde das Log auf der Shell nehmen

      tail -F /opt/iobroker/log/iobroker.current.log
      

      Nach dem Durchlauf des Skripts beenden und die Zeilen aus dem Skript in eine Textdatei kopieren.
      Die Logzeilen enthalten alle Informationen die man dafür braucht:

      23:30:27.648	warn	javascript.1 (1701654) script.js.Tools.SQL_Verwaiste2: DB id: 132 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: '0_userdata.0.tasmota.Blitzwolf182-Loetstation.Energy-Power'
      
      metaxa 1 Reply Last reply Reply Quote 1
      • metaxa
        metaxa @BananaJoe last edited by

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

        Ich würde das Log auf der Shell nehmen

        Da kriege ich nicht alle Informationen wie im Log direkt unter ioB logs. Das schaut so aus:

        
        javascript.0
        2023-02-02 23:33:13.444	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: 83 Objects found, that not exist anymore in ioBroker, sum of items in tables: 7 776
        
        javascript.0
        2023-02-02 23:33:13.397	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 106 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1315252.2.CURRENT'
        
        javascript.0
        2023-02-02 23:33:13.245	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 105 (type: 0) -> number: 3, string: 0, bool: 0 | ioBroker id: 'alias.0. nordtemp.ACTUAL'
        
        javascript.0
        2023-02-02 23:33:13.199	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 104 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'squeezeboxrpc.0.Players.Moode-Bad.cmdPlayFavorite'
        
        javascript.0
        2023-02-02 23:33:13.117	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 103 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'device-reminder.0.Brauchwasserpumpe.messageDP'
        
        javascript.0
        2023-02-02 23:33:12.902	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 102 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'device-reminder.0.Dishwasher.messageDP'
        
        javascript.0
        2023-02-02 23:33:12.804	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 100 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Kueche-LED-Power-32.ENERGY_Yesterday'
        
        javascript.0
        2023-02-02 23:33:12.729	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 99 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Kueche-LED-Power-32.ENERGY_Total'
        
        javascript.0
        2023-02-02 23:33:12.571	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 98 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'g-homa.0.1E493A.state'
        
        javascript.0
        2023-02-02 23:33:12.523	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 97 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Gosund01-POW-Dishwasher.ENERGY_ApparentPower'
        
        javascript.0
        2023-02-02 23:33:12.480	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 96 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Gosund01-POW-Dishwasher.ENERGY_Power'
        
        javascript.0
        2023-02-02 23:33:12.342	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 95 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Gosund01-POW-Dishwasher.ENERGY_Current'
        
        javascript.0
        2023-02-02 23:33:12.213	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 94 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'javascript.0.Wetterstation.Info.Letzte_Regenmenge'
        
        javascript.0
        2023-02-02 23:33:12.022	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 92 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'javascript.0.Wetterstation.Regenrate'
        
        javascript.0
        2023-02-02 23:33:11.922	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 90 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'javascript.0.Junkers.Solar.solarPump'
        
        javascript.0
        2023-02-02 23:33:11.762	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 89 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'javascript.0.Wetterstation.Regenstatus'
        
        javascript.0
        2023-02-02 23:33:11.579	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 88 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'javascript.0.Wetterstation.Regen_Tag'
        
        javascript.0
        2023-02-02 23:33:11.425	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 87 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.0.LEQ0073059.1.WORKING'
        
        javascript.0
        2023-02-02 23:33:11.340	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 86 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP1-Garage-Poolsteuerung.status.LWT'
        
        javascript.0
        2023-02-02 23:33:11.221	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 85 (type: 1) -> number: 0, string: 7, bool: 0 | ioBroker id: 'hm-rpc.2.CUX2800001.12.TIMER_SET'
        
        javascript.0
        2023-02-02 23:33:11.173	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 84 (type: 1) -> number: 0, string: 7, bool: 0 | ioBroker id: 'hm-rpc.2.CUX2800001.14.TIMER_SET'
        
        javascript.0
        2023-02-02 23:33:11.111	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 83 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_32_POW.ENERGY_Total'
        
        javascript.0
        2023-02-02 23:33:11.005	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 82 (type: 0) -> number: 78, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_32_POW.ENERGY_Yesterday'
        
        javascript.0
        2023-02-02 23:33:10.832	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 81 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.KEQ0965973.2.CURRENT'
        
        javascript.0
        2023-02-02 23:33:10.745	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 80 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.KEQ0965973.2.POWER'
        
        javascript.0
        2023-02-02 23:33:10.536	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 79 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.KEQ0968518.2.CURRENT'
        
        javascript.0
        2023-02-02 23:33:10.380	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 75 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1275993.2.CURRENT'
        
        javascript.0
        2023-02-02 23:33:10.279	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 74 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ1275993.2.POWER'
        
        javascript.0
        2023-02-02 23:33:09.943	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 73 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0532863.2.CURRENT'
        
        javascript.0
        2023-02-02 23:33:09.838	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 72 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.LEQ0532863.2.POWER'
        
        javascript.0
        2023-02-02 23:33:09.674	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 70 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.0.IEQ0168663.4.STATE'
        
        javascript.0
        2023-02-02 23:33:09.617	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 69 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'a_andreas.0.eigene_dp.Bewegung.Aqara_01_Bewegung'
        
        javascript.0
        2023-02-02 23:33:09.543	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 66 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'weatherunderground.0.forecast.0d.state'
        
        javascript.0
        2023-02-02 23:33:09.469	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 64 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_31.ENERGY_Power'
        
        javascript.0
        2023-02-02 23:33:09.310	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 63 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_30.ENERGY_Power'
        
        javascript.0
        2023-02-02 23:33:09.026	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 62 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'proxmox.0.qemu_ioBroker-Prod.mem_lev'
        
        javascript.0
        2023-02-02 23:33:08.735	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 61 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'g-homa.0.1BBAC0.state'
        
        javascript.0
        2023-02-02 23:33:08.587	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 60 (type: 0) -> number: 1, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_30.ENERGY_Today'
        
        javascript.0
        2023-02-02 23:33:08.332	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 59 (type: 0) -> number: 97, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_30.ENERGY_Yesterday'
        
        javascript.0
        2023-02-02 23:33:08.223	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 58 (type: 0) -> number: 1, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_31.ENERGY_Today'
        
        javascript.0
        2023-02-02 23:33:08.041	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 57 (type: 0) -> number: 78, string: 0, bool: 0 | ioBroker id: 'sonoff.0.SONOFF_31.ENERGY_Yesterday'
        
        javascript.0
        2023-02-02 23:33:07.783	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 56 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.1.JEQ0148994.13.STATE'
        
        javascript.0
        2023-02-02 23:33:07.642	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 55 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.KEQ0968518.2.POWER'
        
        javascript.0
        2023-02-02 23:33:07.452	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 54 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'a_andreas.0.eigene_dp.MatrixDisplay.Matrix'
        
        javascript.0
        2023-02-02 23:33:07.022	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 53 (type: 2) -> number: 0, string: 4, bool: 100 | ioBroker id: 'g-homa.0.22604E.state'
        
        javascript.0
        2023-02-02 23:33:06.663	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 52 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP1-Garage-Poolsteuerung.Poolwasser.Beckentemperatur'
        
        javascript.0
        2023-02-02 23:33:06.579	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 51 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP0-Kueche-ext-Eiskasten.Gefrierteil.Temperatur'
        
        javascript.0
        2023-02-02 23:33:06.470	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 50 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP0-Kueche-ext-Eiskasten.Kühlschrank.Temperatur'
        
        javascript.0
        2023-02-02 23:33:06.351	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 49 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP-Kueche-ext-Eiskasten.Gefrierteil.Temperatur'
        
        javascript.0
        2023-02-02 23:33:06.219	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 48 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP-Kueche-ext-Eiskasten.Kühlschrank.Temperatur'
        
        javascript.0
        2023-02-02 23:33:06.136	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 47 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'fullybrowser.0.192_168_0_121.Info.batteryLevel'
        
        javascript.0
        2023-02-02 23:33:06.032	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 46 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'fullybrowser.0.192_168_0_121.Info.motionDetectorState'
        
        javascript.0
        2023-02-02 23:33:05.962	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 45 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0194157.1.HUMIDITY'
        
        javascript.0
        2023-02-02 23:33:05.867	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 44 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'mqtt.0.ESP-Garage-Poolsteuerung.Poolwasser.Beckentemperatur.neustarts_anzahl'
        
        javascript.0
        2023-02-02 23:33:05.794	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 43 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'mqtt.0.ESP-Garage-Poolsteuerung.status.LWT'
        
        javascript.0
        2023-02-02 23:33:05.661	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 42 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'mqtt.0.ESP-Garage-Poolsteuerung.Poolwasser.Beckentemperatur'
        
        javascript.0
        2023-02-02 23:33:05.605	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 40 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'mqtt.0.WM_D1_M_Pool.Poolsteuerung.Temperatur_Pool_Mitte'
        
        javascript.0
        2023-02-02 23:33:05.509	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 38 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'paw.0.TabAKarli.info.battery.level'
        
        javascript.0
        2023-02-02 23:33:05.258	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 37 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'paw.0.TabAKarli.info.info.lcd'
        
        javascript.0
        2023-02-02 23:33:05.015	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 36 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'landroid-s.0.mower.status'
        
        javascript.0
        2023-02-02 23:33:04.937	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 35 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'landroid-s.0.calendar.mowTimeExtend'
        
        javascript.0
        2023-02-02 23:33:04.711	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 34 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'landroid-s.0.mower.batteryCharging'
        
        javascript.0
        2023-02-02 23:33:04.625	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 33 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'landroid-s.0.mower.batteryState'
        
        javascript.0
        2023-02-02 23:33:04.423	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 32 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'yamaha.0.Realtime.raw'
        
        javascript.0
        2023-02-02 23:33:03.996	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 28 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.1.JEQ0310843.16.STATE'
        
        javascript.0
        2023-02-02 23:33:03.850	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 26 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'paw.0.Susi_Tab3.info.battery.level'
        
        javascript.0
        2023-02-02 23:33:03.788	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 25 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.OEQ0301876.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.616	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 22 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.MEQ1598807.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.427	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 18 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0393036.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.231	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 17 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0231719.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.154	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 16 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0194157.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.092	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 15 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0035658.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:03.021	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 14 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.HEQ0510329.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:02.964	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 12 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'broadlink2.0.RM:.Temperature'
        
        javascript.0
        2023-02-02 23:33:02.858	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 11 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.FEQ0030851.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:02.709	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 10 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0686511.1.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:02.514	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 9 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.OEQ0301876.2.SET_TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:02.381	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 8 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.OEQ0301876.2.ACTUAL_TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:02.319	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 7 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.0.NEQ0114995.1.STATE'
        
        javascript.0
        2023-02-02 23:33:02.200	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 6 (type: 2) -> number: 0, string: 0, bool: 100 | ioBroker id: 'hm-rpc.0.IEQ0168663.1.STATE'
        
        javascript.0
        2023-02-02 23:33:01.779	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 5 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.MEQ1598807.2.TEMPERATURE'
        
        javascript.0
        2023-02-02 23:33:01.537	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 4 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'weatherunderground.0.forecast.3h.temp'
        
        javascript.0
        2023-02-02 23:33:01.230	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 3 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'weatherunderground.0.current.temp_c'
        
        javascript.0
        2023-02-02 23:33:01.039	warn	script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 1 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'hm-rpc.0.JEQ0268366.1.HUMIDITY'
        

        Hab gleich paar DP kontrolliert, die Ausgabe deines Scripts stimmt zu 100% 👍

        Was ist dies Zahl 83 am Ende deines adaptierten (Limit 100) Skripts?

        metaxa 1 Reply Last reply Reply Quote 0
        • metaxa
          metaxa @metaxa last edited by

          Habe heute Abend meine ioBroker DB einmal direkt aus mySQL exportiert (unkomprimiert):
          79066b54-0813-4372-aff6-66407a3b3077-image.png
          Wird wirklich Zeit da etwas zu unternehmen 😰

          metaxa BananaJoe 2 Replies Last reply Reply Quote 0
          • metaxa
            metaxa @metaxa last edited by metaxa

            617c1a65-5b6a-436d-8461-fe1f47edc4c5-image.png

            Ich habe jetzt über diese Oberfläche paar Datenpunkte gelöscht. Werden nun bei "löschen" auch die vielen Detaileinträge in sources, ts_bool, ts_counter, ts_number, ts_string gelöscht?

            Ich habe jetzt dein Skript nochmals durchlaufen lassen, ja die ersten gelöschten Datenpunkte werden nicht mehr gefunden 👍

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

            Ich habe jetzt über diese Oberfläche paar Datenpunkte gelöscht. Werden nun bei "löschen" auch die vielen Detaileinträge in sources, ts_bool, ts_counter, ts_number, ts_string gelöscht?

            Ich antworte mir mal selbst: Nein, werden nicht gelöscht. Im Falle der ID 1 bleiben sämtliche Einträge in ts_number bestehen.

            Ich warte bitte auf deine Anweisung, wie ich z.B. alle Einträge der ID lösche.

            Lieben Dank

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

              @metaxa was du mit der 83 meinst weis ich nicht - es sind 83 Datenpunkte ohne Fahrschein.
              Das dein Export 1,2GB groß ist heißt auch nicht viel - die SQL Datei ist eine Textdatei welche die Anweisungen zum Import enthält. Die ist dadurch schon mal größer als die eigentlichen Daten.
              Allerdings sehe ich da Datenpunkte vom Typ String - das könnten Platzfresser sein wenn diese viele lange Einträge haben.

              javascript.0 2023-02-02 23:33:12.902 warn script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 102 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'device-reminder.0.Dishwasher.messageDP'
              
              javascript.0 2023-02-02 23:33:12.804 warn script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 100 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Kueche-LED-Power-32.ENERGY_Yesterday'
              

              So, die beiden Datenpunkte dort nehme ich als Beispiel.
              Du musst auf die Shell / in die Bash / per puTTY auf den ioBroker.

              Dort musst du die Eingabeaufforderung von MySQL starten:

              mysql -uandreas -p ioBroker
              

              -uandreas = Benutzername andreas
              -p = du willst ein Passwort eingeben
              ioBroker = Name der Datenbank mit der du dich verbinden willst.
              Er fragt nach dem Passwort, danach hast du einen Prompt:

              Welcome to the MariaDB monitor.  Commands end with ; or \g.
              Your MariaDB connection id is 64731
              Server version: 10.6.11-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
              
              Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
              
              Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
              
              MariaDB [iobroker]>
              

              Bei mir steht MariaDB, bei dir eventuell auch oder MySQL, die funktionieren beide gleich.
              [iobroker] heisst das die Datenbank ausgewählt ist.

              Kleiner Test:

              MariaDB [iobroker]> show tables;
              +--------------------+
              | Tables_in_iobroker |
              +--------------------+
              | datapoints         |
              | sources            |
              | ts_bool            |
              | ts_counter         |
              | ts_number          |
              | ts_string          |
              +--------------------+
              6 rows in set (0,001 sec)
              

              Das sind die Tabellen in denen die Daten liegen. Aus denen können wir die Daten mit den obigen Informationen aus dem Log löschen:

              javascript.0 2023-02-02 23:33:12.902 warn script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 102 (type: 1) -> number: 0, string: 100, bool: 0 | ioBroker id: 'device-reminder.0.Dishwasher.messageDP'
              

              device-reminder.0.Dishwasher.messageDP hat in der Datenbank die id 102 (DB id: 102 (type: 1))
              Und Daten in der ts_string Tabelle (number: 0, string: 100, bool: 0)

              kurze Kontrolle:

              MariaDB [iobroker]> select * from datapoints where id=102;
              +-----+----------------------------------------+------+
              | id  | name                                   | type |
              +-----+----------------------------------------+------+
              | 102 | device-reminder.0.Dishwasher.messageDP |    1 |
              +-----+----------------------------------------+------+
              1 row in set (0,001 sec)
              

              Ok, stimmt, also löschen der Werte aus ts_string und aus datapoints:

              delete from ts_bool where id=102;
              delete from datapoints where id=102; 
              

              Beim ersten Befehl sollte in der Zusammenfassung stehen wie viele Datensätze er gelöscht hat,
              beim 2. Befehl sollte es immer 1 (einer) sein weil es ja nur einen Eintrag gibt.

              Der erste Befehl ist es der dein System in die Knie zwingen kann wenn er dort viel löschen muss.
              Dazu komme ich weiter unten noch einmal.

              javascript.0 2023-02-02 23:33:12.804 warn script.js.010_Testen.SQL_Datenpunkte_löschen: DB id: 100 (type: 0) -> number: 100, string: 0, bool: 0 | ioBroker id: 'sonoff.0.Kueche-LED-Power-32.ENERGY_Yesterday'
              

              sonoff.0.Kueche-LED-Power-32.ENERGY_Yesterday hat in der Datenbank die id 100 (DB id: 100 (type: 01))
              Und Daten in der ts_number Tabelle (number: 100, string: 0, bool: 0)

              Beim löschen eben die andere Tabelle:

              delete from ts_number where id=100;
              delete from datapoints where id=100; 
              

              und bei bool wäre es eben ts_bool
              Wenn du mit allen fertig bist kannst du per exit die Konsole wieder verlassen.

              So, nun zu dem "in die Knie gehen".
              Variante 1 ist den ioBroker vorher zu stoppen

              sudo systemctl stop iobroker
              

              Dann das löschen machen. Wenn es länger dauert, dauert es eben länger - Abwarten bis der Prompt wiederkommt. Das wird meist recht flott gehen - aber du wirst da ein oder mehrere Monster haben wo es dauern wird.

              Variante 2 ist das löschen zu limitieren:

              delete from ts_number where id=100 limit 5000;
              

              würde nur die ersten 5.000 Datensätze löschen. Dabei wird das System / ein oder mehrere CPU-Kerne kurz auf Anschlag gehen und der Prompt kommt dann wieder. Als Ergebnis sollte da so etwas stehen:

              5000 row in set (4,321 sec)
              

              Ist die Zahl kleiner als dein Limit oder sogar 0 hast du alles gelöscht in der Tabelle. Ansonsten musst du das wiederholen.

              Ob 5000 oder 50 so der 100.000 die richtige Zahl für dein System ist kann ich dir nicht sagen. Vermutlich kannst du bei ts_number eher höher greifen, bei ts_string erst einmal niedriger.
              Meine Geräte die einmal die Minute liefern mit 6 Monate Aufzeichnung haben 42.000 Datensätze.
              Einer der Temperaturfühler hat alle 5 Sekunden gemeldet ... 280.000
              der Shelly 3EM liefert alle 3 Sekunden und hat bei mir 2.673.105 Datensätze - pro Phase.

              Beim Abfragen des letzteren ging bei mir die CPU für einen Moment auf 100%. (aber nicht auf allen Kernen)
              Wie viele es sind könntest du mit dem Befehl hier testen, der ging schon schneller:

              MariaDB [iobroker]> select COUNT(*) from ts_number where id=58;
              +----------+
              | COUNT(*) |
              +----------+
              |  2673128 |
              +----------+
              1 row in set (3,609 sec)
              

              Halt 4 Sekunden vollgas. Wenn ich die Abfrage wie im Skript mache (select COUNT(*) from ts_number where id=58;) dann sind es schon ca. 11 Sekunden, also 3 mal so "schlimm"

              metaxa 1 Reply Last reply Reply Quote 1
              • metaxa
                metaxa @BananaJoe last edited by metaxa

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

                Wahnsinn der und vor allem dein Aufwand!

                Ich hatte nach einer Lösung direkt auf meiner Syno im Web-UI gesucht. iO für paar Stunden lahm zu legen macht Stress zu Hause.

                1 MyAdmin öffnen und die gewünschte DB auswählen
                d67403bd-056c-4627-860e-5762c045927f-image.png
                2 Rechts den Reiter SQL wählen
                7071a611-ee03-405a-b144-ef3fe849b165-image.png

                3 Hier kommt dann deine Arbeit nach deinem Skript voll zum Tragen!

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

                delete from ts_number where id=100;
                delete from datapoints where id=100;
                

                4 Trockentraining
                482af665-cf3c-460d-b244-1ef77672509c-image.png

                5 Ergebnis
                ea242999-803a-4fad-8bdf-c6c9abf503d6-image.png

                6 Wenn das Ergebnis plausibel erscheint, anstelle simulieren, rechts mit "OK" löschen.
                dd874b67-6a59-40cf-ad12-4c41b0de8bc0-image.png

                1 Reply Last reply Reply Quote 0
                • Gaspode
                  Gaspode last edited by Gaspode

                  @bananajoe

                  Erst noch mal vielen Dank für dein Engagement!

                  Ich hab das Zählen bzw. Ermitteln optimiert, ich hoffe es ist OK, wenn ich in dem Script Änderungen mache. Ich lade jetzt zum Zählen nicht mehr alle Records, sondern nutze count(*) zum Zählen. Dann muss ioBroker intern keine riesigen Dictionaries aufbauen. Bei mir dauert das Ermitteln so nur noch ein paar Sekunden und es scheint zu stimmen.

                  // 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(*)
                  
                  // 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';
                  
                  // Funktion zum Suchen und Löschen
                  async function wartung() {
                      try {
                          // Alle Datenpunkte holen bei welchen die SQL-Protokollierung aktiv ist:
                          let datapointsActiveArray = new Array();
                          let datapointsActiceStrings = "";
                          await sendTo(sql_instance, 'getEnabledDPs', {}, function (result) {
                              Object.entries(result).forEach((entry) => {
                                  const [key, value] = entry;
                                  //console.log(`${key}`);
                                  datapointsActiceStrings = datapointsActiceStrings + `${key}` + ";";
                              });
                              //console.log(datapointsActiceStrings);
                              datapointsActiveArray = datapointsActiceStrings.split(';');
                          });
                  
                          // 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));
                                                  }
                                              });
                                          }
                                      }
                  
                                      // 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));
                                                  }
                                              });
                                          }
                                      }
                  
                                      // 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));
                                                  }
                                              });
                                          }
                                      }
                  
                                      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));
                                              }
                                          });
                                      }
                  
                                      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, ".")}`);
                          }
                      } 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();
                  

                  Jetzt wäre es noch toll, wenn man einbeziehen könnte, ob für ein State ein Alias vergeben wurde.

                  metaxa BananaJoe 2 Replies Last reply Reply Quote 2
                  • metaxa
                    metaxa @Gaspode last edited by metaxa

                    @gaspode Cool!
                    Das Trockentraining dauert bei mir ca. 3 Minuten. Löschen traue ich mich nicht wirklich aus dem iO heraus.

                    @BananaJoe & @Gaspode
                    Wäre es möglich am Ende des Trockendurchlaufs eine Liste auszugeben, z.B.:

                    delete from ts_number where id=10;
                    delete from datapoints where id=10;
                    delete from ts_number where id=11;
                    delete from datapoints where id=11;
                    delete from ts_string where id=14;
                    delete from datapoints where id=14;
                    delete from ts_bool where id=17;
                    delete from datapoints where id=17;
                    

                    LG, mxa

                    Gaspode 1 Reply Last reply Reply Quote 0
                    • Gaspode
                      Gaspode @metaxa last edited by

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

                      Das Trockentraining dauert bei mir ca. 3 Minuten. Löschen traue ich mich nicht wirklich aus dem iO heraus.

                      Das Löschen wird durch meine Änderung auch nicht beeinflusst.

                      metaxa 1 Reply Last reply Reply Quote 1
                      • BananaJoe
                        BananaJoe Most Active @Gaspode last edited by

                        @gaspode Cool. Hatte ich auch schon dran gedacht, war mir dann aber zeitlich schon zu spät.
                        Wir so von mir übernommen

                        1 Reply Last reply Reply Quote 0
                        • metaxa
                          metaxa @Gaspode last edited by

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

                          BananaJoe Gaspode 2 Replies Last reply Reply Quote 0
                          • BananaJoe
                            BananaJoe Most Active @metaxa last edited by

                            @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

                            metaxa 1 Reply Last reply Reply Quote 1
                            • Gaspode
                              Gaspode @metaxa last edited by

                              @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 Reply Quote 1
                              • metaxa
                                metaxa @BananaJoe last edited by metaxa

                                @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 Reply Quote 0
                                • Gaspode
                                  Gaspode last edited by 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();
                                  
                                  metaxa liv-in-sky BananaJoe 3 Replies Last reply Reply Quote 3
                                  • metaxa
                                    metaxa @Gaspode last edited by 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!

                                    Gaspode 1 Reply Last reply Reply Quote 0
                                    • Gaspode
                                      Gaspode @metaxa last edited by Gaspode

                                      @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 Reply Quote 1
                                      • liv-in-sky
                                        liv-in-sky @Gaspode last edited by

                                        @gaspode
                                        @BananaJoe

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

                                        Gaspode 1 Reply Last reply Reply Quote 0
                                        • Gaspode
                                          Gaspode @liv-in-sky last edited by

                                          @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-sky 1 Reply Last reply Reply Quote 0
                                          • liv-in-sky
                                            liv-in-sky @Gaspode last edited by

                                            @gaspode denke, da wäre apollon77 der ansprechpartner

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

                                            Support us

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

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            16
                                            87
                                            9237
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo