Ich habe es allein herausgefunden.
Ich bin zwar nicht vertraut mit Groovy, dafür aber mit C# und allgemeinen Programmiertechniken. Ich habe gesehen, dass es ein ReplaceTimeSeries gibt. Dann habe ich mir überlegt, eine neue TimeSeries aufzubauen mit den geänderten Werten und dann diese TimeSeries zurückzuschreiben.
Das war dann erfolgreich. Der Rest ist Kosmetik. Ich habe das ganze - weil ich zwei Tiefkühler und zwei solche Sensoren habe - in eine Funktion gepackt, die ich jeweils für jeden der beiden Datenpunkte aufrufe. Da die Werte vom Sensor nur ungefähr alle drei Minuten kommen, habe ich sicherheitshalber das Abfrageintervall auf die letzten 20 Minuten gesetzt und führe das Script alle 10 Minuten aus.
Hier der Code:
Code: Alles auswählen
def end=new Date() // aktueller Zeitpunkt
// 20 Minuten = 1200 Sekunden zurück in Millisekunden
// (Task soll alle 10 Minuten laufen)
def duration=1200*1000
def begin=new Date(end.time-duration)
println "Beginn: $begin, Ende: $end"
def AdjustFreezerTemperature(String name, int datapoint_id, Date begin, Date end)
{
def dp = database.getDataPoint(datapoint_id)
def ts = database.getTimeSeries(dp, begin, end)
println "Anzahl Einträge $name: $ts.size"
// neue Zeitreihe erzeugen
def tsnew = []
ts.each { pv ->
print pv
if (pv.value < -21)
{
print " zu kalt"
pv.value = -21.0
println " korrigiert auf -21"
}
else
{
println " ok"
}
// Process Value in neue Zeitreihe einfügen
tsnew << pv
}
database.replaceTimeSeries(dp, tsnew, begin, end)
}
//
// Einmal für den Hauswirtschaftsraum
//
AdjustFreezerTemperature("Hauswirtschaftsraum", 115, begin, end)
//
// Einmal für die Küche
//
AdjustFreezerTemperature("Küche", 226, begin, end)
Das mit der Funktion hat zwar in der Script-Umgebung funktioniert, nicht aber in der ccu-historian.config. Der ccu-historian ist einfach nicht mehr gestartet. Dort musste ich die Funktion wieder entfernen und durch duplizierten Code ersetzen. Unschön.
Code: Alles auswählen
database.tasks.adjustfreezertemps.enable=true
database.tasks.adjustfreezertemps.cron="* 0/10 0 ? * * *"
database.tasks.adjustfreezertemps.script={
def end=new Date() // aktueller Zeitpunkt
// 20 Minuten = 1200 Sekunden zurück in Millisekunden
// (Task soll alle 10 Minuten laufen)
def duration=1200*1000
def begin=new Date(end.time-duration)
println "Beginn: $begin, Ende: $end"
def dp = database.getDataPoint(115)
def ts = database.getTimeSeries(dp, begin, end)
println "Anzahl Einträge Hauswirtschaftsraumm: $ts.size"
// neue Zeitreihe erzeugen
def tsnew = []
ts.each { pv ->
print pv
if (pv.value < -21)
{
print " zu kalt"
pv.value = -21.0
println " korrigiert auf -21"
}
else
{
println " ok"
}
// Process Value in neue Zeitreihe einfügen
tsnew << pv
}
database.replaceTimeSeries(dp, tsnew, begin, end)
dp = database.getDataPoint(226)
ts = database.getTimeSeries(dp, begin, end)
println "Anzahl Einträge Küche: $ts.size"
// neue Zeitreihe erzeugen
tsnew = []
ts.each { pv ->
print pv
if (pv.value < -21)
{
print " zu kalt"
pv.value = -21.0
println " korrigiert auf -21"
}
else
{
println " ok"
}
// Process Value in neue Zeitreihe einfügen
tsnew << pv
}
database.replaceTimeSeries(dp, tsnew, begin, end)
}