Hauptmenü

Reading ausreißer filtern

Begonnen von Tweak, 14 September 2017, 18:50:20

Vorheriges Thema - Nächstes Thema

Tweak

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

DeeSPe

Das Modul readingsChange könnte hier weiterhelfen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Tweak

Hallo,
könntest du eventuell ein Beispiel hierfür nennen?

Danke!
mfg

Wzut

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

andre070

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

Wzut

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

andre070

Super, danke!!

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

Andre

holle75

Perlen in den Anfängerfragen von Wzut! Auch nach 100 Jahren. Ich freu mich ;)

Wzut

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

holle75


Wzut

ei genau so wie ich geschrieben habe, statt :
userReadings mytemp bla blaeher so
userReadings mytemp:temperature.* blub blub
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

betateilchen

Ich würde das Filtern heute per valueFn in DbLog umsetzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

holle75

#12
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.

Wzut

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> }

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

holle75

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);}}