FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: thiese am 05 Januar 2019, 10:38:48

Titel: [gelöst] event-on-change-reading nur bei Werten größer 0
Beitrag von: thiese am 05 Januar 2019, 10:38:48
Hallo,

ich messe mit einem Radarsensor die Wasserhöhe. Ab und an bekomme ich sehr große negative Werte in mein Reading übermittelt. Liegt vermutlich an der Kabellänge zum Sensor. Besteht die Möglichkeit, dass ich die negativen Werte über event-on-change-reading NICHT in das Log-File schreiben lasse?
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: CoolTux am 05 Januar 2019, 10:40:09
Nicht über event-on-change-reading. Aber über die Regex vom Logdevice
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: thiese am 05 Januar 2019, 11:03:29
Danke für den Hinweis. Funktioniert trotz mehreren Versuchen bei mir leider nicht. Vermutlich habe ich einen Fehler beim ">0".
defmod FileLog_SchHoehe FileLog ./log/SchHoehe-%Y.log SchHoehe:>0
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: CoolTux am 05 Januar 2019, 11:05:33
Zitat von: thiese am 05 Januar 2019, 11:03:29
Danke für den Hinweis. Funktioniert trotz mehreren Versuchen bei mir leider nicht. Vermutlich habe ich einen Fehler beim ">0".
defmod FileLog_SchHoehe FileLog ./log/SchHoehe-%Y.log SchHoehe:>0

Das ist auch keine RegEx und es wird wie beim Notify auch eine Regex erwartet.
Suche mal im Web nach Perl und Regex. Testen kannst Du Deine Regex hier
https://regex101.com
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: roedert am 05 Januar 2019, 11:14:42
Alternativ könntest du dem Radarsensor auch ein Userreading anlegen, welches die korrekten Werte übernimmt, die falschen negativen Werte aber ignoriert bzw auf 0 setzt.
Ausgewertet und geloggt wird dann nur noch das neue Userreading.
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: CoolTux am 05 Januar 2019, 11:15:53

(\d+(\.\d+)?)

Dieser Teil Regex liefert Dir ausschließlich positive Zahlen.

So als kleiner Anreiz.
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: thiese am 05 Januar 2019, 12:07:29
Ein UserReading hatte ich schon. Allerdings schaffe ich es nicht, dass die negativen Werte "ausgeblendet" werden.
WHoehe {ReadingsVal("$name","READING","(\d+(\.\d+)?)")}.
Jetzt erscheinen mir zwei Readings mit den gleichen Werten.
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: CoolTux am 05 Januar 2019, 12:08:54
Zitat von: thiese am 05 Januar 2019, 12:07:29
Ein UserReading hatte ich schon. Allerdings schaffe ich es nicht, dass die negativen Werte "ausgeblendet" werden.
WHoehe {ReadingsVal("$name","READING","(\d+(\.\d+)?)")}.
Jetzt erscheinen mir zwei Readings mit den gleichen Werten.
Und was genau ist das jetzt? Dein userReading oder Deine Log RegEx
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: thiese am 05 Januar 2019, 12:10:25
Das UserReading
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: CoolTux am 05 Januar 2019, 12:12:07
Das ist auch Unsinn was Du da geschrieben hast.
Gib mal ein list vom Logdevice. Also entweder FileLog oder dblog
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: roedert am 05 Januar 2019, 12:14:28
Beispiel für ein Userreading

neuesreading:altesreading.* { ReadingsVal($name,'altesreading',0)<0 ? 0 : ReadingsVal($name,'altesreading',0) }
Titel: Antw:event-on-change-reading nur bei Werten größer 0
Beitrag von: thiese am 05 Januar 2019, 12:22:04
Top. Das ist die Lösung. Allerbesten Dank und schöne Grüße.