[gelöst] Werte unter/oberhalb einer Schwelle nicht in logfile schreiben

Begonnen von Gisbert, 22 Februar 2022, 15:39:28

Vorheriges Thema - Nächstes Thema

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

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?

Frank_Huber

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

rudolfkoenig

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.

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

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)

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Guybrush

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).

rudolfkoenig

Ich habe das acceptedRange Attribut wie oben beschrieben hinzugeufegt.
Das Bestimmen eines Durchschnittwertes fuer die Prozentrechnung war mir zu aufwendig.

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

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.

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

thor3

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
FHEM auf RPI, diverse Sensoren ESP8266 mit ESPEasy am Strom-, Gas- , Wasserzähler, Signalduino, 7 FHT Heizkörperthermostate, Jarolift Jalousien mit AutoShutter, CAN-Bus Anbindung CoE, SMA Inverter, FBDECT