Hauptmenü

Suppressreading!?

Begonnen von M_Trader, 07 Februar 2018, 20:41:52

Vorheriges Thema - Nächstes Thema

M_Trader

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

dev0


M_Trader

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

Wzut

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$/);
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dev0

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

frank

wenn man bei userreadings oder in der plotfunktion "undef" zurückgibt werden keine werte geschrieben.

vielleicht kann man das auch bei readingsChange nutzen.
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

kadettilac89

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. ä.?