Ein herzerfrischendes "Moin" vom achtern Diek vorweg!
Ich habe ein wiederholtes Problem dessen Antwort ich hier im Forum trotz Suchfunktion nicht mehr wiederfinde.
Ich bin mir sicher ich hätte diese Frage nach einem entsprechenden SQL - Befehl schon mal gestellt und auch eine Antwort bekommen.
Leider bin ich in SQL eine absolute Niete.
Das Device "CH_ElectricityCalculator" enthält ein Reading mit dem Namen "CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" welches fleißig die Werte in die Datenbank "myDbLog" schreibt.
Nur manchmal kommt es aufgrund von Aussetzern und Offset-Justierungen zu seltsamen Ausreißern wonach ich zum Teil Leistungswerte von -300000W habe und manchmal auch +150000W.
Diese versauen mir die graphische Darstellung im Chart.
Frage:
Wie lautet der userCommand wenn ich folgende Werte aus der Datenbank löschen will:
a) Alle Werte kleiner 0W
b) Alle Werte größer 27000W
Danke
Gruß
Sailor
Moin,
gleich vorweg ... benutze besser DbRep für die Datenbankpflege. Die Funktion in DbLog ist nur noch "historisch" und ist spartanisch implementiert.
Die SQL wäre:
delete from history where device="CH_ElectricityCalculator" and reading="CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" and (value > 27000 or value < 0);
Mit einem select vorab kannst du dir erstmal einen Überblick verschaffen was gelöscht werden würde:
select value from history where device="CH_ElectricityCalculator" and reading="CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" and (value > 27000 or value < 0);
Im DbRep nutzt du dafür den Setter "sqlCmd".
Im DbLog kannst du aber grundsätzlich verhindern dass solche Ausreißer geloggt werden. Das Attr valueFn bietet dir diese Möglichkeit:
{
if ($DEVICE eq "CH_ElectricityCalculator" && $READING eq "CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" && ($VALUE > 27000 || $VALUE < 0 )) {
$IGNORE=1;
}
}
Den Code kann man vermutlich straffen. Soll nur das Prinzip verdeutlichen.
Grüße,
Heiko
Moin Heiko
Zitat von: DS_Starter am 20 November 2021, 13:22:57
gleich vorweg ... benutze besser DbRep für die Datenbankpflege. Die Funktion in DbLog ist nur noch "historisch" und ist spartanisch implementiert.
OK
Zitat von: DS_Starter am 20 November 2021, 13:22:57
Mit einem select vorab kannst du dir erstmal einen Überblick verschaffen was gelöscht werden würde:
select value from history where device="CH_ElectricityCalculator" and reading="CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" and (value > 27000 or value < 0);
Auweia, plötzlich 13000 Readings! :o
Zitat von: DS_Starter am 20 November 2021, 13:22:57
Die SQL wäre:
delete from history where device="CH_ElectricityCalculator" and reading="CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" and (value > 27000 or value < 0);
Im DbRep nutzt du dafür den Setter "sqlCmd".
Hat geklappt, Danke!
Zitat von: DS_Starter am 20 November 2021, 13:22:57
Im DbLog kannst du aber grundsätzlich vernindern dass solche Ausreißer geloggt werden. Das Attr valueFn bietet dir diese Möglichkeit:
{
if ($DEVICE eq "CH_ElectricityCalculator" && $READING eq "CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent" && ($VALUE > 20000 || $VALUE < 0 ) {
$IGNORE=1;
}
}
Habe ich eingerichtet, aber mit 27000 und einer ")" - Klammer mehr.
DANKE!
Gruß
Sailor
Moin,
habe es oben korrigiert falls mal jemand liest und auch verwenden will.
LG,
Heiko