FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Gisbert am 22 Februar 2022, 15:39:28

Titel: [gelöst] Werte unter/oberhalb einer Schwelle nicht in logfile schreiben
Beitrag von: Gisbert am 22 Februar 2022, 15:39:28
Hallo zusammen,

wahrscheinlich gibt es zu meiner Frage bereits eine Antwort, ich bin dann zu dumm (nicht zu faul), um die Antwort selbst zu finden. Mein alter Chef meinte gelegentlich, man kann sich ja mal dumm stellen, umgekehrt ist schwieriger ;D. Ich überlasse dem Leser zu beurteilen, welche Variante (echte oder vorgetäuschte Ahnungslosigkeit) hier vorliegt.
Bisher hatte ich bis auf sehr wenige Ausnahmen keinen Bedarf nach solch einem Tool. In letzter Zeit häufigen sich allerdings die Aussetzer diverser Temperaturmessungen, aus den verschiedensten Gründen. Gestern gab es hier einen Stromausfall, der in vielen Plots einen senkrechten Strich zur Folge hatte.

Es würde mir schon reichen, dass ich es im Plot nicht anschauen müsste, aber wenn es gar nicht ins logfile geschrieben würde, wäre es noch besser.

Viele Grüße Gisbert
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: rudolfkoenig am 22 Februar 2022, 18:45:34
Ich fuerchte das gibts weder fuer FileLog, noch fuer SVG so direkt.

Natuerlich kann man in beiden Faellen einen Regexp zusammenbasteln, aber das ist mehr Krampf als Loesung.
Es wird auch nicht einfacher dadurch, dass FileLog pro Zeile auch mehrere Werte schreiben kann.

Ich koennte ein FileLog Attribut wie "acceptedRange colNum1:min:max  colNum2:min:max ..." vorstellen.
Meinungen?
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Frank_Huber am 22 Februar 2022, 19:02:56
Hallo Gisbert,

Es entspricht nicht zu 100% deiner Frage, aber falls Du auch mal an dbLog denken möchtest, da gibt es das Attribut DbLogValueFn,
z.B.:attr Aussen_rH DbLogValueFn {\
  if ($READING eq "rH" && $VALUE > 115){$IGNORE=1;;}\
  if ($READING eq "rH" && $VALUE < 15){$IGNORE=1;;}\
}

so wird alles über 115 und unter 15 nicht geloggt.

Grüße
Frank
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: rudolfkoenig am 22 Februar 2022, 19:34:27
Im SVG/FileLog/Function Spalte kann man die Daten auch filtern:
$fld[4]<-9999||$fld[4]>9999?0:$fld[4]
Oder man macht daraus eine Funktion, und ruft sie an dieser Stelle auf.
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Gisbert am 22 Februar 2022, 19:59:57
Zitat von: rudolfkoenig am 22 Februar 2022, 19:34:27
Im SVG/FileLog/Function Spalte kann man die Daten auch filtern:
$fld[4]<-9999||$fld[4]>9999?0:$fld[4]
Oder man macht daraus eine Funktion, und ruft sie an dieser Stelle auf.

Hallo Rudi,
könntest du ein Beispiel (Werte kleiner 10 und größer 50 sollen nicht gezeigt werden) spendieren, denn so wie es dasteht, verstehe ich es nicht.

Viele​ Grüße​ Gisbert​
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: rudolfkoenig am 22 Februar 2022, 20:07:32
Das waere
$fld[4]<10||$fld[4]>50?0:$fld[4]

wobei $fld[4] in der Zeile das fuenfte "Wort" ist ($fld[0] ist die Datumsspalte, usw)
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Gisbert am 22 Februar 2022, 20:53:20
Hallo Rudi,

die Vorgehensweise habe ich verstanden und ich habe auch die richtige Spalte gefunden.
Wenn die Bedingung erfüllt ist, bekomme ich den Wert 0 (Null), bzw. den Wert, den ich dort eintrage.
Das hilft mir aber nicht sonderlich weiter, denn Wert=0 würde auch einen "senkrechten Strich" ergeben, und ein Wert von 21 (z.B.) wäre schon besser, letztlich aber auch falsch.
Gibt es die Möglichkeit mit diesem Konstrukt keinen Wert anzuzeigen?
Ich hab's damit ('' - 2 einfache Anführungszeichen oder "" - 2 Anführungszeichen statt 0) versucht, weiß aber nicht, ob dies sinnvoll ist, oder es etwas besseres gibt:
$fld[3]<10||$fld[3]>50?'':$fld[3]
$fld[3]<10||$fld[3]>50?"":$fld[3]


Viele Grüße Gisbert
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Guybrush am 22 Februar 2022, 21:12:48
ohne fixe Werte vorzugeben, bleibt dir eigentlich nur logproxy über eine postprocessing funktion (jedenfalls soweit ich mir das mal anschaute) oder eine 90/95% Methode, bei der du die werte in der db filterst und ausreißer löscht, was aber ohne weiteres nur über DbLog geht. natürlich könnte man auch fixe werte vorgeben, aber das hätte andere nachteile

@Rudolf: was toll wäre, wäre nicht nur ein absoluter min/max wert, sondern auch eine %angabe. zb. das max 100% dafür sorgt, dass werte die 100% über den avg werte der letzten 24h liegen, nicht ins filelog/db geschrieben würden. Ich weiß aber nicht, ob das für FileLog ohne weiteres umsetzbar ist (performance).
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: rudolfkoenig am 26 Februar 2022, 12:52:01
Ich habe das acceptedRange Attribut wie oben beschrieben hinzugeufegt.
Das Bestimmen eines Durchschnittwertes fuer die Prozentrechnung war mir zu aufwendig.
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Gisbert am 26 Februar 2022, 14:44:39
Hallo Rudi,

im Prinzip funktioniert das Attribut acceptedRange schon. Mir ist jedoch aufgefallen, dass ich z.B. für den folgenden Eintrag im logfile:
2022-02-26_14:32:22 Temp.EG EZ: 23.4
das Attribut wie folgt definieren muss:
1:10:40

Es gibt aber noch eine Schwierigkeit bei den Minimal- und Maximalwerten, wenn diese sehr unterschiedlich sein können, wie z.B. RSSI-Werte typischerweise -90 bis -40, uptime typischerweise 0 bis sehr groß, und eben Temperaturen in Innenräumen typischerweise deutlich über Null und kleiner als 40.

Könnte man das Schreiben in den logfile eventuell auch nach dem Reading:
Temp.EG EZ:
mit/ohne Doppelpunkt (das Reading selbst hat ja keinen Doppelpunkt) selektieren, anstelle oder zusätzlich zu col1 selektieren?

Viele​ Grüße​ Gisbert​
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: rudolfkoenig am 27 Februar 2022, 11:32:55
ZitatEs gibt aber noch eine Schwierigkeit bei den Minimal- und Maximalwerten, wenn diese sehr unterschiedlich sein können.

Ich habe einen optionalen Regexp zu den Parameter hinzugefuegt, also in etwa
attr fl acceptedRange 1:5:35:[Tt]emperature 1:-90:-40:RSSI
Die min:max Pruefung wird nur nur bei passenden Regexp angewendet.
Titel: Antw:Werte unter/oberhalb einer Schwelle nicht in logfile (oder plot) schreiben, wie?
Beitrag von: Gisbert am 27 Februar 2022, 15:42:53
Hallo Rudi,

vielen Dank, du bist der Beste (aber auch all die anderen, die gerne helfen).
Folgende Definition habe ich erfolgreich getestet:
attr device acceptedRange 1:10:35:EG.Flur|Gaeste-WC|HWR|Kueche|WZ|EZ 1:-95:-35:EG.Wifi

Viele​ Grüße​ Gisbert​
Titel: Antw:[gelöst] Werte unter/oberhalb einer Schwelle nicht in logfile schreiben
Beitrag von: thor3 am 01 Mai 2022, 15:17:58
Hallo,
Danke dafür, sowas habe ich schon ewig gesucht.
Dann kann ich jetzt endlich die ganzen externen Scripte deaktivieren die über die Logfiles rennen um die fehlerhaften Werte z.B. vom COE zu entfernen.

Gruß Nico