Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)

Begonnen von DS_Starter, 19 Mai 2016, 22:52:13

Vorheriges Thema - Nächstes Thema

DS_Starter

#2250
Hallo cotecmania,

ZitatIch hab mir (fast) alle Werte der DB gelöscht mit :
fhem("set DB_Rep delEntries 7 DI_Autarkie:Autarkie_day_ongoing");
Dachte damit loesche ich nur die Daten von DI_Autarkie:Autarkie_day_ongoing aber genau das Gegenteil war der Fall
Sicherlich hattest du vorher die Commandref oder Online-Hilfe zum Befehl gelesen und dir war bewußt, dass die Ausführung in dieser Form schief gehen wird, denn nur:
delEntries [<no>[:<nn>]]
ist über den Kommandoaufruf möglich und dokumentiert. Weitere Eingrenzungen sind über die entsprechenden Attribute vorzunehmen.

ZitatGott sei Dank konnte ich die MariaDB-VM vom Vortag wieder herstellen
"Gott sei Dank" ist in dem Kontext der falsche Ansatz. Wenn man wichtige Daten in einer Datenbank hält, ist ein valides Backup immer Pflicht, unabhängig von Manipulationen mit DbRep. Für die Backups plant man ein Regime, welches den maximalen Datenverlust berücksichtigt den man im Worst Case Fall gewillt ist zu akzeptieren. Kannst dazu mal RPO / RTO googeln.

ZitatGibt es eine Möglichkeit, nur bestimmte Readings in der DB in einem Befehl zu loeschen, oder muss ich jedesmal über Attribute gehen ?
Aktuell geht das nur über Attributeinstellungen bzw. natürlich immer via SQL-Kommando (sqlCmd) wenn man das beherrscht. Die von dir versuchte Ausführung müßte ich erst implementieren.

Zitat... was ist der einfachste Backup und Restore der DB.
Da gibt es viele Wege und im Auge des Betrachters was "einfach" ist. MariaDB ist auf jeden Fall eine robuste und gut zu handhabende DB.
Wenn man das Backup via FHEM machen möchte, bietet sich "... dumpMySQL serverside" im DbRep an. Das ist sehr schnell und einfach einzuplanen. Über DbRep geht dann auch der Restore. Beides ist  im Wiki beschrieben.
Ansonsten gibt es die eingebauten Methoden in MariaDB via CLI aufzurufen oder eingebaut in ein Management Tool deiner Wahl (z.B. phpMyAdmin).

LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Zitat von: cotecmania am 05 April 2026, 12:19:25Gibt es eine Möglichkeit, nur bestimmte Readings in der DB in einem Befehl zu loeschen, oder muss ich jedesmal über Attribute gehen ?
Das wäre sehr umständlich, wenn ich einzelne unterschiedliche Readings säubern will ...

Ein at-Device (entsprechend deiner Wünsche anpassen) und ein DBRep-Device (mit deinen Wünschen der attr-Zeitgrenzen) dir könnte etwas helfen  ???
(wenn du oftmals gleiches machen willst)
defmod at.DelEmptyValue.Rep at *01:00:00 set DoMySQLcmdInRangeLast10Day.DbRepMySQL sqlCmd DELETE FROM `fhem`.`history` WHERE (`VALUE` = '' AND `EVENT` LIKE '%: 0' OR `Reading` = 'state' OR `DEVICE` = 'Dum.Energy' );;
attr at.DelEmptyValue.Rep group 002_DoMySQLcmd
attr at.DelEmptyValue.Rep room 000_Datenbank

defmod DoMySQLcmdInRangeLast10Day.DbRepMySQL DbRep myDbLog
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL comment da es nach Mitternacht passiert 2te - 11te Tag
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL group 002_DoMySQLcmd
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL room 000_Datenbank
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL timeDiffToNow d:11 FullDay
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL timeOlderThan d:2 FullDay
attr DoMySQLcmdInRangeLast10Day.DbRepMySQL verbose 2

Für einzelne Daten oder Datensätze zu löschen / ändern dazu rauszupicken, ist es aber sehr sinnvoll direkt auf der SQL-Datenbank mit irgendeinem Tool deiner Wahl zu arbeiten, da hat DS_Start vollkommen recht.
-> phpMyAdmin in vielen Welten (per Browser)
-> oder in der MAC-Welt geht dafür auch gut TablePlus (kostenlose eingeschränkte Version nutzen - reicht dafür)
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.

cotecmania

#2252
Leider hat mir google den Vorschlag so ausgespuckt mit delEntries und ich habe dann zuerst nicht weiter nachgelesen.
phpmyadmin habe ich und sql-Befehle kann ich mir zusammenbauen
Meine VMs werden nach festgelegtem Plan gesichert

Da ich von FileLog auf DBLog langsam partiell umstelle, dachte ich, dass Werte, die das Logfile immer aufblähen und ständig kommen nun auch in die DB zu verlagern, aber regelmässig mit einem DoIf zu begrenzen, so dass nur die letzten x Tage für Graphen vorhanden sind.
Deshalb wäre es cool, wenn man delEntries auch nur auf bestimmte readings begrenzen könnte.

Und ich möchte das "innerhalb" Fhem erledigen und automatisieren, nicht mit externen Tools.

Ich muss mal schauen wie ich das in sql hinbekommen. Wird auf sowas rauslaufen :
DELETE FROM history
WHERE reading_name = 'Autarkie_day_ongoing'
  AND TIMESTAMP < NOW() - INTERVAL 7 DAY;

Ob das mit dem Datum so klappt muss ich testen in phpmyadmin ...

So ein kurzer lesbarer Einzeiler im DoIf mit DBRep wäre natürlich eleganter, da das ja an vielen Stellen dann zum Einsatz kommen wird.

@DS_Starter
Du hast nicht Zeit und Lust das zu erweitern ?

Danke für den Support
Joe

Edith : eben mit phpmyadmin simuliert, so wuerds gehen (aelter als 1 Tag) :
DELETE FROM 'history'
WHERE READING = 'Autarkie_day_ongoing'
AND TIMESTAMP < NOW() - INTERVAL 1 DAY;
FHEM auf Debian 13 in Proxmox VM
MAX!/HM/Sonoff-Thermostate, HM-Rolladenschalter, Shellys aller Art, LevelJet-Ölstandsmessung, KM271, IPCAM, TAB13" FTUI3

DS_Starter

#2253
ZitatDu hast nicht Zeit und Lust das zu erweitern ?
Lust ja, mit der Zeit ist es nicht so pralle weil ich gerade stark mit SolarForecast befasst bin.
Leider ist auch meine damals (DbRep gibt es schon sehr lange) gewählte Form:

delEntries [<no>[:<nn>]]
unfreundlich zu parsen bzw. zu erweitern. Heute würde ich so eine Form wählen die leicht zu erweitern wäre:

delEntries no=<Zahl> nn=<Zahl> reading=....
Vllt. setze ich mich mal dran. So eine Umstellung ist auch nicht so trivial zu managen wenn sich die User bereits daran gewöhnt haben und die Dokus auch umgestellt werden müssen. Da kommt dann eins zum anderen.

LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Zitat von: cotecmania am 06 April 2026, 09:23:26Edith : eben mit phpmyadmin simuliert, so wuerds gehen (aelter als 1 Tag) :
Denke auch an die korrekte SQL-Schreibweise  -->>'"`´<<-- die bei dir einzusetzen ist... ;)
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.

cotecmania

#2255
Bisschen aufbereitet um die Parameter leicht aendern zu koennen und erfolgreich getestet (MariaDB) in einem DoIf im PERL-Mode:
DOELSEIF ([10:00])
{
  my $Reading = 'Autarkie_day_ongoing';
  my $KeepNDays = 1;
 
  ## in DB die laufenden Tageswerte auf die letzten $KeepNDays Tage begrenzen
  fhem("set DB_Rep sqlCmd DELETE FROM history WHERE READING = '$Reading' AND TIMESTAMP < NOW() - INTERVAL $KeepNDays DAY;;");
}

Wie gesagt ein Einzeiler wäre Top  O:-)
FHEM auf Debian 13 in Proxmox VM
MAX!/HM/Sonoff-Thermostate, HM-Rolladenschalter, Shellys aller Art, LevelJet-Ölstandsmessung, KM271, IPCAM, TAB13" FTUI3