Unplausible Werte von Log ausschließen

Begonnen von Knallfrosch, 02 September 2024, 03:05:54

Vorheriges Thema - Nächstes Thema

Knallfrosch

Hallo,

ich habe in einem MQTT-Device immer mal wieder unplausible Temp.Werte.

Diese müllen mir die Datenbank voll und als Kurve sieht das natürlich auch nicht schön aus.
Du darfst diesen Dateianhang nicht ansehen.
Plot über einen Monat.

Die Temp. nimmt zeitweise Werte mit -100 o.ä. an

Kann ich diese Werte hier <-15 (könnte ja im Winter tatsächlich mal so kalt werden) irgendwie "unterdrücken"?

Als Attr habe ich folgendes gesetzt:


DbLogExclude .*
DbLogInclude adc_0, 0_tC
event-min-interval 0_tC:3600,adc_0:3600
event-on-change-reading adc_0:0.2,0_tC:0.5

Natürlich würde ich gerne die Ursache angehen, aber ich kann mir auch nicht erklären, warum diese absurden Werte gesendet werden.

Die Werte kommen von einem Shelly Uni.

Vielen Dank.

Grüße

rabehd

Mit der Suchfunktion komme ich zu https://forum.fhem.de/index.php?topic=93690.0.

Die Verwendung von DbLogExclude und DbLogInclude ist für mich sinnfrei.

Die Frage sehe ich auch nicht als Automatisierungsthema.
Auch funktionierende Lösungen kann man hinterfragen.

Gisbert

Hallo Knallfrosch,

eine Symptombekämpfung beim SVG-Plot kann wie folgt aussehen. Im Feld function kannst du es damit probieren:
$fld[3]>-20?$fld[3]:""Voraussetzung ist, dass die Werte an 4. Position in der Datenbank stehen, ansonsten anpassen. Genau genommen kann ich es nur für Filelog sagen. Falls es nicht funktioniert, kannst du den Ausdruck wieder löschen und den Knopf "write .gplot file" betätigen.

Die Daten stehen nach wie vor in der Datenbank und die Ursache bei deinem Shelly ist auch noch da.

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

DS_Starter

Die Ursache zu beseitigen ist die Beste Variante.
Um zumindest die DB sauber zu halten bietet sich das Attr valueFn im DbLog an, z.B.:

attr <device> valueFn {if ($DEVICE eq "<Shelly>" && $READING eq "<Reading>") {
                         $IGNORE=1 if($VALUE < -15);
                       }
                      }

Das kann man beliebig erweitern und verfeinern.
Die SVG sieht dann auch wieder i.O. aus.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

frank

ich würde die plausibilität nicht durch einen vergleich mit einem festen, absoluten wert ermitteln, sondern eine differenz zum letzten "guten" wert als vergleich heranziehen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Knallfrosch

Hallo zusammen,

danke für eure Antworten.

Zitat von: DS_Starter am 02 September 2024, 08:58:34Die Ursache zu beseitigen ist die Beste Variante.

Hättest du einen Tipp für mich, wie ich die Ursachensuche angehen kann?
Mich wundert, dass es offensichtlich nur bei der Temp. zu solchen Sprüngen kommt.
Bei der Spannung, die auch logge, gibt es das nicht.


Zitat von: rabehd am 02 September 2024, 05:35:04Die Verwendung von DbLogExclude und DbLogInclude ist für mich sinnfrei.

Nunja, ich habe dbLogExclude global als attr gesetzt und nutze Include dann um nur gezielt das zu loggen, was ich benötige.
Welche sinnhafte Lösung gibt es denn?

Zitat von: rabehd am 02 September 2024, 05:35:04Die Frage sehe ich auch nicht als Automatisierungsthema.
Ich verschiebe das Thema gerne in einen passenderen Bereich, sag mir wohin es deiner Meinung nach besser passt.


Zitat von: frank am 02 September 2024, 09:36:12ich würde die plausibilität nicht durch einen vergleich mit einem festen, absoluten wert ermitteln, sondern eine differenz zum letzten "guten" wert als vergleich heranziehen.
Ja das klingt sogar viel besser.
Und vermeidet die Ausreißer um ein vielfaches und würde die Messung nicht beschneiden, falls es dann doch mal kälter als -15°C werden würde.

Kannst du mir zeigen, wie das dann aussehen müsste?


Vielen Dank.

Grüße

rabehd

Zitat von: Knallfrosch am 02 September 2024, 09:55:29
ZitatDie Verwendung von DbLogExclude und DbLogInclude ist für mich sinnfrei.

Nunja, ich habe dbLogExclude global als attr gesetzt und nutze Include dann um nur gezielt das zu loggen, was ich benötige.
Welche sinnhafte Lösung gibt es denn?

Es reicht
attr logdb DbLogSelectionMode IncludeDas hast Du doch wohl gesetzt?
Damit spartst Du dbLogExclude.
Auch funktionierende Lösungen kann man hinterfragen.

Knallfrosch

Zitat von: rabehd am 02 September 2024, 10:14:37Es reicht
attr logdb DbLogSelectionMode IncludeDas hast Du doch wohl gesetzt?
Damit spartst Du dbLogExclude.

Ja, attr logdb DbLogSelectionMode Include
habe ich gesetzt.

Danke für den Hinweis und die Lösung dazu.

Grüße

JudgeDredd

So einen Sensor habe ich bei mir auch. Da ich aber keinen Bedarf habe diesen zu tauschen, ist das Problem bei mir mit einem Userreading beim MQTT-Device gelöst:
aussentemperatur_corr:aussentemperatur.* {
  # Abfangen von fehlerhaften Temperaturwerten
  my $maxdiff = 2;
  my $val = ReadingsNum( $name, 'aussentemperatur', undef );
  my $oldval = ReadingsNum( $name, 'aussentemperatur_corr', undef );
  if( abs( $val - $oldval ) > $maxdiff ) {
    $val = $oldval;
  }
  $val;
}
Ich logge dann einfach das Reading "aussentemperatur_corr" anstatt "aussentemperatur".
Vielleicht ist das ja eine Alternative für Dich.
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

Knallfrosch

Danke dir für den weiteren Lösungsweg.

Ich habe jetzt erstmal die Variante von DS_Starter eingebaut und werde das mal beobachten.

Sollte das nicht funktionieren, teste ich noch deinen Vorschlag.

Grüße

betateilchen

Zitat von: Knallfrosch am 02 September 2024, 17:32:00Ich habe jetzt erstmal die Variante von DS_Starter eingebaut und werde das mal beobachten.
Sollte das nicht funktionieren, teste ich noch deinen Vorschlag.

Du kannst auch beide Vorschläge kombinieren und den Vergleich in die valueFn() einbauen.

Zitat von: rabehd am 02 September 2024, 05:35:04Die Verwendung von DbLogExclude und DbLogInclude ist für mich sinnfrei.

Zitat von: Knallfrosch am 02 September 2024, 09:55:29Nunja, ich habe dbLogExclude global als attr gesetzt und nutze Include dann um nur gezielt das zu loggen, was ich benötige.

Für mich sind all diese include / exclude Attribute sinnfrei.

Zitat von: Knallfrosch am 02 September 2024, 09:55:29Welche sinnhafte Lösung gibt es denn?

Im define des DbLog-device eine gut überlegte, sinnvolle regex angeben. Damit muss man auch später nur noch an einer einzigen Stelle Änderungen vornehmen, wenn man zusätzliche (oder weniger) readings loggen möchte.

Funktioniert bei mir seit vielen Jahren in allen meinen FHEM Installationen perfekt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rabehd

Zitat von: betateilchen am 02 September 2024, 18:08:19Damit muss man auch später nur noch an einer einzigen Stelle Änderungen vornehmen, wenn man zusätzliche (oder weniger) readings loggen möchte.
Das mache ich über das Include-Attribut im jeweiligen Device. Ist für mich die sinnvolle Dokumentation.
Auch funktionierende Lösungen kann man hinterfragen.

betateilchen

Zitat von: rabehd am 02 September 2024, 18:11:32Das mache ich über das Include-Attribut im jeweiligen Device. Ist für mich die sinnvolle Dokumentation.

Kann man so machen, ist für mich aber komplett sinnfrei, weil man das dann bei jedem device einstellen muss.

Außerdem stamme ich aus einer Zeit, in der FHEM / DbLog diese sinnfreien Attribute noch gar nicht kannte.
Damals lernte man in FHEM noch, "vor dem Machen zu Denken"...



Zitat von: Knallfrosch am 02 September 2024, 09:55:29Ich verschiebe das Thema gerne in einen passenderen Bereich, sag mir wohin es deiner Meinung nach besser passt.

Es geht nicht darum, wohin es nach irgendeiner Meinung passt, sondern darum, wohin der Thread aufgrund des darin diskutierten Moduls gehört.

https://forum.fhem.de/index.php?topic=13092.0
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rabehd


Zitat von: betateilchen am 02 September 2024, 18:23:15Kann man so machen, ist für mich aber komplett sinnfrei, weil man das dann bei jedem device einstellen muss.

Außerdem stamme ich aus einer Zeit, in der FHEM / DbLog diese sinnfreien Attribute noch gar nicht kannte.
Damals lernte man in FHEM noch, "vor dem Machen zu Denken"...
Das war mir irgendwann zu unübersichtlich. Wahrscheinlich waren Leute wie ich der Auslöser für die Attribute.
Für jede Variante gibt es Für und Wider. Genau das finde ich auch gut an fhem.
Gegen die Attribute spricht die merkwürdige Verwendung beider Attribute, bei Deiner Lösung kann das nicht passieren.
Letztendlich ist es wie immer wildes Kopieren und Probieren ist die schlimmste Variante.
Auch funktionierende Lösungen kann man hinterfragen.

Knallfrosch

Zitat von: betateilchen am 02 September 2024, 18:23:15Es geht nicht darum, wohin es nach irgendeiner Meinung passt, sondern darum, wohin der Thread aufgrund des darin diskutierten Moduls gehört.

https://forum.fhem.de/index.php?topic=13092.0

Da ich über diese Variante hier gelandet bin, sollte es ja also passen.