FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: M_Trader am 07 Februar 2018, 20:41:52

Titel: Suppressreading!?
Beitrag von: M_Trader am 07 Februar 2018, 20:41:52
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
Titel: Antw:Suppressreading!?
Beitrag von: dev0 am 07 Februar 2018, 21:02:15
https://fhem.de/commandref.html#readingsChange wäre eine Möglichkeit.
Titel: Antw:Suppressreading!?
Beitrag von: M_Trader am 13 Februar 2018, 16:01:24
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
Titel: Antw:Suppressreading!?
Beitrag von: Wzut am 13 Februar 2018, 17:55:22
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$/);
Titel: Antw:Suppressreading!?
Beitrag von: dev0 am 15 Februar 2018, 06:51:34
@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.
Titel: Antw:Suppressreading!?
Beitrag von: frank am 15 Februar 2018, 14:43:38
wenn man bei userreadings oder in der plotfunktion "undef" zurückgibt werden keine werte geschrieben.

vielleicht kann man das auch bei readingsChange nutzen.
Titel: Antw:Suppressreading!?
Beitrag von: kadettilac89 am 15 Februar 2018, 16:07:14
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. ä.?