ccu-historian icon indicating copy to clipboard operation
ccu-historian copied to clipboard

Option um Daten älter als x Monate/Jahre aus Datenbank automatisch zu entfernen

Open Wookbert opened this issue 3 years ago • 2 comments

NOOB-Frage/-Request: Falls noch nicht existent, wäre es schön eine Option zu haben, dass Daten die älter als x Monate/Jahre sind, automatisch aus der Datenbank entfernt werden, damit der USB-Stick nicht irgendwann überläuft.

Einstellbar global, evtl. aber auch für einzelne Datenpunkte mit unterschiedlichen Laufzeiten ... und das kombinierbar (globaler Wert, der durch einzeln gesetzte Werte für den entsprechenden Datenpunkt ersetzt wird).

Wookbert avatar Dec 25 '20 22:12 Wookbert

Siehe auch #159.

mdzio avatar Dec 29 '20 11:12 mdzio

Mit dem Skript "Alte Zeitreihendaten löschen" kann der Löschvorgang nun zumindest manuell ausgeführt werden.

Ein automatische Ausführung des Löschvorgangs, würde ich dann allgemein mit einer neuen Funktionalität für eine geplante Ausführung von Skripten erschlagen.

mdzio avatar Jan 26 '22 07:01 mdzio

Hallo Mathias! Danke für das Skript - dadurch laufen Diagramm Darstellungen wieder flot! Frage: Ich würde gerne Alte Zeitreihendaten löschen automatisch auf meinem RaspberryPI laufen lassen. Wie sollte das script dazu aussehen? etwa so: CCU Historian stop, Alte Zeitreihendaten löschen, CCU Historian start ?

#!/bin/bash
# MG

# stop ccu-historian
sudo bash /etc/init.d/ccu-historian stop
echo

# calculate expiration date
exp=$(date -d "-30 days" +%F)
echo "expiration date: " $exp

# start ccu-historian with option clean
sudo java -jar /opt/ccu-historian/ccu-historian.jar -clean $exp
echo

# start ccu-historian
sudo bash /etc/init.d/ccu-historian start
echo

the-other-martin avatar Aug 21 '22 12:08 the-other-martin

Ja, das sollte funktionierten. Eventuell kannst Du dann noch ein -compact ausführen, damit die Datenbankdatei auch kleiner wird. Das ganze Skript kann dann noch per cron-Job regelmäßig gestartet werden.

mdzio avatar Aug 25 '22 07:08 mdzio

Ich arbeite gerade daran, dass Skripte (s.a. Skriptumgebung) zyklisch automatisch ausgeführt werden können (ab V3.2.0). Die Aufgabenstellung könnte dann mit einem Skript in der ccu-historian.config gelöst werden:

database.tasks.clean.enable=true
database.tasks.clean.cron="0 0 2 * * ?"
database.tasks.clean.script={
	/*
	Alte Zeitreihendaten löschen V1.0.0
	Wichtig: Vor Anwendung des Skripts ein Backup der Datenbank erstellen!
	*/
	
	// *** Konfiguration ***
	
	// Anzahl der Tage, die in der Datenbank verbleiben sollen.
	def daysToKeep = 365
	
	// Testlauf durchführen? Bei einem Testlauf wird die Datenbank nicht verändert.
	// (Ja: true, Nein: false)
	def testRun = true
	
	// *** Skript ***
	
	log.info "Alte Zeitreihendaten werden gelöscht:"
	def deleteDate=new Date()-daysToKeep
	log.info "Löschdatum: ${deleteDate.format("dd.MM.YYYY")}"
	def totalCnt=0
	database.dataPoints.each { dp ->
	    def cnt
	    if (testRun) {
	        cnt=database.getCount(dp, null, deleteDate)
	    } else {
	        cnt=database.deleteTimeSeries(dp, null, deleteDate)
	    }
	    totalCnt+=cnt
	    log.info "$dp.displayName: $cnt Einträge"
	}
	log.info "Gesamtanzahl der gelöschten Einträge: $totalCnt"
}

Hinweis: Jeweils um 2 Uhr nachts werden alle Einträger älter als 365 Tage gelöscht. Damit das Skript auch die Datenbank verändert, die Zeile def testRun = true auf def testRun = false abändern.

mdzio avatar Aug 27 '22 09:08 mdzio

Hallo Mathias! Großartig! Vielen Dank! Ich habe heute auf V3.2.0 upgraded und das script oben auf 31 Tage gestellt. Schöne Grüße, Martin

the-other-martin avatar Sep 11 '22 13:09 the-other-martin