FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dreizehn am 19 Juni 2023, 19:59:18

Titel: userReadings um Werte zu filtern?
Beitrag von: dreizehn am 19 Juni 2023, 19:59:18
Hallo Zusammen!

Kontext:
Ich habe einen Temperatursensor der hin und wieder unsinnige Werte liefert. Meist -100 (°C). Diese Werte möchte ich einfach weg filtern.

Idee:
Wenn der Wert Sinnvoll ist soll er in ein neues Reading geschrieben werden. Der Originalwert ist "temperature" der neue, gefilterte soll "temperatureFilter" sein.

Ausführung:
Ich habe folgendes userReadings angefügt:

temperatureFilter {if (ReadingsNum($name,"temperature",-101) > -99) {return ReadingsNum($name,"temperature",0);}}

Problem:
temperatureFilter ist im Fehlerfall nicht bei -100 sondern bei 0. Es wird anscheinend ein else interpretiert, ich möchte aber den Wert nicht schreiben.

Frage;
Gibt es eine schöne, elegante Lösung?

Liebe Grüße
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: betateilchen am 19 Juni 2023, 20:03:57
temperatureFilter {(ReadingsNum($name,"temperature",-101) > -99) ? ReadingsNum($name,"temperature",0) : undef}
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: frober am 22 Juni 2023, 12:22:02
Falls du das Reading weiter verarbeitest, setze ein
attr <Device> oldreadings temperature
und geben diesen Wert zurück (OldReadingsNum()).
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: betateilchen am 22 Juni 2023, 13:58:00
Was hat das oldreading mit der gestellten Frage zu tun?
Da würde doch auch nur ein falscher Wert landen.

Wenn beim Setzen des userReading ein undef zurückkommt, wird der im reading vorhandene Wert nicht angetastet. Der neue (unsinnige) Wert wird ignoriert und es kann immer noch auf den vorherigen Wert zugegriffen werden.
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: Beta-User am 22 Juni 2023, 14:31:53
Evtl. sollte es auch gehen, mit einer readingsChange-Instanz die "falschen" Events ganz zu löschen.
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: betateilchen am 22 Juni 2023, 15:01:17
Dann geh ich jetzt Popcorn holen, setze mich auf meine Couch und bin gespannt, wer letztendlich den kompliziertesten Lösungvorschlag hier reinschreibt...

Den gewünschten (!!!) Lösungsweg hatte der Fragesteller ja in seinem ersten Beitrag eindeutig beschrieben, er wusste lediglich nicht genau, wie man das umsetzt.
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: frober am 22 Juni 2023, 15:51:10
Zitat von: betateilchen am 22 Juni 2023, 13:58:00Was hat das oldreading mit der gestellten Frage zu tun?
Da würde doch auch nur ein falscher Wert landen.

Wenn beim Setzen des userReading ein undef zurückkommt, wird der im reading vorhandene Wert nicht angetastet. Der neue (unsinnige) Wert wird ignoriert und es kann immer noch auf den vorherigen Wert zugegriffen werden.

Bei undef wird der vorhandene Wert nicht angetastet, wusste ich nicht.
Danke für die Aufklärung.

Sollte nur ein Tip sein, sorry.
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: dreizehn am 24 Juni 2023, 16:47:54
Vielen Dank!
Die Lösung von betateilchen funktioniert für mich perfekt. Es hat aber etwas gedauert bis der Sensor wieder "falsche" Werte lieferte. undef war mir bisher noch nicht bekannt, wieder etwas gelernt.
Titel: Aw: userReadings um Werte zu filtern?
Beitrag von: frober am 24 Juni 2023, 19:48:36
Zitat von: frober am 22 Juni 2023, 12:22:02Falls du das Reading weiter verarbeitest, setze ein
attr <Device> oldreadings temperature
und geben diesen Wert zurück (OldReadingsNum()).


...und sorry nochmals, ich benutze natürlich (noch, zukünftig undef) das Zielreading (hier temperatureFilter) als OldReading...