FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tweak am 14 September 2017, 18:50:20

Titel: Reading ausreißer filtern
Beitrag von: Tweak am 14 September 2017, 18:50:20
Hallo,
ich würde gerne Ausreißer von Reading filtern. Hab da ein Gerät was ich mittels HTTPMOD auslesen, wenn das Gerät einen Neustart macht vom Strom getrennt wird habe ich einen Wert von z.b. 1.000.000 im Reading. Der Wert ist nicht immer gleich daher auch der Thread für anderes habe ich eine Lösung durch suchen gefunden.

Der theoretisch maximale Wert ist jedoch 5.000, meine Frage daher, wie kann ich verhindern das Werte über 5000 in die DB geloggt werden und meine SVG Grafik zerstören?

Danke!

Mfg
Titel: Antw:Reading ausreißer filtern
Beitrag von: DeeSPe am 14 September 2017, 19:02:41
Das Modul readingsChange könnte hier weiterhelfen.

Gruß
Dan
Titel: Antw:Reading ausreißer filtern
Beitrag von: Tweak am 17 September 2017, 12:52:23
Hallo,
könntest du eventuell ein Beispiel hierfür nennen?

Danke!
mfg
Titel: Antw:Reading ausreißer filtern
Beitrag von: Wzut am 17 September 2017, 15:05:45
Ich habe auch den einen oder anderen Sensor der gerne mal aus der Reihe tanzt.
Um die im Zaum zu halten definiere ich dort immer ein userReading das entweder den Wert 1:1 spiegelt wenn er ok ist oder eine Konstante wenn er ausserhalb liegt.
In den Plots verwende ich dann nur das userReading bzw. logge den Ur Wert auch erst gar nicht.

Edit :
um der Nachfrage nach einem Beispiel zuvor zu kommen :
Das Reading sei temperature und soll nicht über 100 gehen , wenn doch wird auf 100 begernzt, der Name des neuen Readings ist mytemp
attr <name-des_device> userReadings mytemp {if (ReadingsNum($name,"temperature",101) > 100){return 100;} else {return ReadingsNum($name,"temperature",0);}}
Titel: Antw:Reading ausreißer filtern
Beitrag von: andre070 am 17 September 2017, 19:03:14
Zitat von: Wzut am 17 September 2017, 15:05:45
Ich habe auch den einen oder anderen Sensor der gerne mal aus der Reihe tanzt.


Ah klasse, ich habe auch so einen Fall. Wie kann ich denn pro Device ein zweites userreadings definieren?
Aktuell habe ich mal Ausreißer bei "energy" und "temperature" des gleichen Device.

Reicht es hier den veränderten Befehl erneut abzusetzen?

Danke!

Andre
Titel: Antw:Reading ausreißer filtern
Beitrag von: Wzut am 17 September 2017, 19:28:12
das Attribut heisst nicht umsonst userReadings und nicht userReading :)
D.h. wenn es mehr als ein eigenes Reading sein soll so sind diese durch Komma getrennt zu definieren
Bsp 
attr <name-des_device> userReadings mytemp {mache_was} , mypower {mache_nochwas} , usw.
Titel: Antw:Reading ausreißer filtern
Beitrag von: andre070 am 17 September 2017, 19:48:38
Super, danke!!

Das hilft mir ungemein bei der Ausreißer Problematik :-)

Andre
Titel: Aw: Reading ausreißer filtern
Beitrag von: holle75 am 03 Oktober 2024, 16:57:36
Perlen in den Anfängerfragen von Wzut! Auch nach 100 Jahren. Ich freu mich ;)
Titel: Aw: Reading ausreißer filtern
Beitrag von: Wzut am 04 Oktober 2024, 08:55:34
Danke für die Blumen, allerdings merkt man doch das die Beiträge schon ein "paar Tage" alt sind :o
Ich würde heute niemand mehr raten userReadings ohne Trigger anzulegen 8)
Titel: Aw: Reading ausreißer filtern
Beitrag von: holle75 am 04 Oktober 2024, 11:40:59
wie meinst du das?
Titel: Aw: Reading ausreißer filtern
Beitrag von: Wzut am 05 Oktober 2024, 08:50:55
ei genau so wie ich geschrieben habe, statt :
userReadings mytemp bla blaeher so
userReadings mytemp:temperature.* blub blub
Titel: Aw: Reading ausreißer filtern
Beitrag von: betateilchen am 05 Oktober 2024, 09:28:39
Ich würde das Filtern heute per valueFn in DbLog umsetzen.
Titel: Aw: Reading ausreißer filtern
Beitrag von: holle75 am 06 Oktober 2024, 10:19:19
Zitat von: Wzut am 05 Oktober 2024, 08:50:55ei genau so wie ich geschrieben habe, statt :
userReadings mytemp bla blaeher so
userReadings mytemp:temperature.* blub blub

ich ging von deinem

attr <name-des_device> userReadings mytemp {if (ReadingsNum($name,"temperature",101) > 100){return 100;} else {return ReadingsNum($name,"temperature",0);}}
aus, und bei mir somit

PV_Power_W {ReadingsNum("Studer485_VT","PV_Power_KW_RAW",0)*1000},PV_Power_KW {if (ReadingsNum($name,"PV_Power_KW_RAW",4) > 3){return 3;} else {return ReadingsNum($name,"PV_Power_KW_RAW",0);}}
was sich auf das Reading "PV_Power_KW_RAW" "als Trigger" bezieht. Von daher habe ich nicht ganz verstanden was du meinst.

@betateilchen. Ich bin noch immer mit Logs unterwegs ... das einzig und alleine weils trotz der offenkundigen Nachteile seit "Jahrzehnten" funktioniert und ich mich scheue/zu faul bin, eine Datenbank aufzusetzen und die ganzen Verknüpfungen zu modifizieren. Auch meine uralte ftui Implementierung und Grafiken würde ich nicht auf Anhieb easy umbauen können. Irgendwann werde aber auch ich mich der Aufgabe stellen.
Titel: Aw: Reading ausreißer filtern
Beitrag von: Wzut am 06 Oktober 2024, 13:02:12
Zitat von: holle75 am 06 Oktober 2024, 10:19:19was sich auf das Reading "PV_Power_KW_RAW" "als Trigger" bezieht.
nein du hast leider noch nicht verstanden was ich mit trigger sagen will, daher wirf bitte einen Blick in die command.ref zum Thema userReadings :
ZitatA comma-separated list of definitions of user-defined readings. Each definition has the form:

    <reading>[:<trigger>] [<modifier>] { <perl code> }

Titel: Aw: Reading ausreißer filtern
Beitrag von: holle75 am 06 Oktober 2024, 17:01:39
Ok, war mir nicht bewußt, dass es überhaupt "einen Trigger" geben kann und dachte, das Userreadings wird nur aktualisiert, wenn sich das definierte Reading bewegt. Dankeschön, was gelernt.

PV_Power_W:PV_Power_KW_RAW.* {ReadingsVal("Studer485_VT","PV_Power_KW_RAW",0)*1000},PV_Power_KW:PV_Power_KW_RAW.* {if (ReadingsNum($name,"PV_Power_KW_RAW",4) > 3){return 3;} else {return ReadingsNum($name,"PV_Power_KW_RAW",0);}}