Hi,
es passiert von Zeit zu Zeit, dass ein Device (letztens mein DHT22) einen völlig unmögliche Wert als reading hat (-2.270 Grad!!)
Wie kann man diese automatisch löschen? Suppressreading?
Wie würde man das einsetzen?
Danke
M
https://fhem.de/commandref.html#readingsChange wäre eine Möglichkeit.
Danke für den Vorschlag, ich möchte das reading allerdings wirklich verwerfen (und nich durch einen anderen Wert ersetzen).
Hatt niemand einen Idee, wie man das Attribut suppressreading verwendet!?
Commandref -> suppressReading: Used to eliminate unwanted readings. The value is a regular expression, with ^ and $ added. Only necessary in exceptional cases.
Vielleicht weiß jemand, wie an eine RegExp mit ^und $ für z.B. Werte > 100 "schreibt".
Danke
M_TRader
Ich denke du bist auf dem Holzweg, suppressReading bezieht sich nicht auf den Wert eines Readings sondern auf ein komplettes Reading,
siehe fhem.pl :
my $sp = AttrVal($name, "suppressReading", undef);
return if($sp && $reading =~ m/^$sp$/);
@M_Trader: Du könntest auch über ein notify, dass auf das originale Reading triggert, ein zusätzliches Reading akualisieren lassen, wenn der Wert Deinen Vorstellungen entspricht. Sinnvoller wäre es mMn aber die Ursache für den falschen Wert zu eliminieren.
wenn man bei userreadings oder in der plotfunktion "undef" zurückgibt werden keine werte geschrieben.
vielleicht kann man das auch bei readingsChange nutzen.
Wenn du dbLog im Einsatz hast ... valueFn in Verbindung mit IGNORE = 1.
--> damit hast du zwar die Readings noch, aber deine Plot sind sauber da der Wert nicht auf die DB kommt. Ich denke deine Anfordung kommt da du in den Plots die Peaks in den negativen Bereich hast.
Beispiele
attr <device> valueFn {if ($DEVICE eq "living_Clima" && $VALUE eq "off" ){$VALUE=0;} elsif ($DEVICE eq "e-power"){$VALUE= sprintf "%.1f", $VALUE;}}
# ändert den Reading-Wert des Gerätes "living_Clima" von "off" zu "0" und rundet den Wert vom Gerät "e-power"
attr <device> valueFn {if ($DEVICE eq "SMA_Energymeter" && $READING eq "state"){$IGNORE=1;}}
# der Datensatz wird nicht geloggt wenn Device = "SMA_Energymeter" und das Reading = "state" ist
Ansonsten schließe ich mich dev0 an. Woher kommt der schiefe Wert? Selbst gebastelter Sensor? Modul von dir selber? --> direkt in der Sendelogig filtern möglich? Überlauf einer Variable o. ä.?