Hallo Zusammen,
so wie ich gelesen habe, ist es mit dem Attribut "suppressReading" möglich, bestimmte Readingwerte zu ignorieren.
Ich finde aber nichts wirklich brauchbares, die man mit dem Attribut "suppressReading" umgeht...?
Oder erreicht man damit gar nicht das von mir gewollte?
Hintergrund: auf meinem 1-wire Bus habe ich alle 7-10 Tage mal einen Wert von 85°. Ich habe nun alles probiert, um den Bus stabiler zu bekommen (dank der Hilfe hier im Forum). Ich finde den Fehler nicht. Darum will ich nicht weiter die Ursache bekämpfen, sondern die sehr seltene Auswirkung.
Da ich meine Temperaturen überwache, gibt es leider bei diesen Ausreißern einen kurzen Alarm (pushover), der auch zu einem niedrigeren WAF führt...
Ich habe Lösungen gefunden, die Plots von den 85° Problem zu bereinigen. Ich brauch aber eine Lösung, die das Reading bei einem Wert von 85° verwirft.
Danke für Anregungen. :)
Nimm ein userReading, dass den Wert verwirft/korrigiert und benutze dieses Reading dann zum Triggern...
Edit: readingsChange wäre noch eine Alternative dazu.
Hey, danke für die Antwort.
Frage zum readingsChange: wird hier nicht der Wert des Readings nur verändert? Er sollte bei einem Wert von 85° ignoriert werden. Oder hab ich das falsch verstanden?
userReading wäre eine gute Idee. Aber hier stellt sich mir die Frage: wie bekomme ich es hin, dass der Wert von 85° in dem userReading nicht geschrieben wird? Alles andere drunter und drüber aber schon?
Zitat von: M.Piet am 15 Mai 2017, 20:17:42userReading wäre eine gute Idee. Aber hier stellt sich mir die Frage: wie bekomme ich es hin, dass der Wert von 85° in dem userReading nicht geschrieben wird? Alles andere drunter und drüber aber schon?
In etwa...
attr <device> userReadings cleanTemp {my $temp = ReadingsNum("<device>","<orig-reading>",85);; return $temp unless($temp == 85);; return ReadingsNum("<device>","cleanTemp",-273) }
Gruß,
Thorsten
Super, danke. Das werde ich mal probieren. :)
Wenn's klappt, bitte auf [Gelöst] setzen (Subject des ersten Post editieren) ansonsten: Nochmal nachfragen :-)
Vielen Dank schon mal!
Das werde ich machen. Ich habe nun erstmal die Userreadings aller 15 1wire-Devices angelegt und schreibe die Werte in ein Log.
Die Plots habe ich erstmal so gelassen. Sobald ich wieder einen 85°-Ausreißer habe, schaue ich in die Logs. Dort dürften die dann nicht mehr sein.
Eine kleine Frage noch zu den Userreadings: kann ich die auch gleich auf 2 Stellen hinter dem Koma kürzen? Oder müsste ich da ein weiteres Userreading anlegen?
https://perldoc.perl.org/functions/sprintf.html
Zitat von: KernSani am 15 Mai 2017, 23:16:47
Wenn's klappt, bitte auf [Gelöst] setzen (Subject des ersten Post editieren) ansonsten: Nochmal nachfragen :-)
:-D
Zitat von: dev0 am 16 Mai 2017, 15:30:29
https://perldoc.perl.org/functions/sprintf.html
Dachte das geht nicht und mann muss mit readingsChange arbeiten. Oder ist das nur, wenn man Readings addiert?
ZitatDachte das geht nicht und mann muss mit readingsChange arbeiten. Oder ist das nur, wenn man Readings addiert?
Entweder verstehe ich nicht was Du meinst oder Du hast die Arbeitsweise von userReadings nicht verstanden:
userReadings erstellt ein neues Reading, dessen Wert durch die Ausführung von { <perl code> } bestimmt wird. Solange { <perl code> } ein gültiger Ausdruck ist, kannst Du zurückgeben was Du möchtest. readingsChange erstellt, im Gegensatz zu userReadings, kein neues Reading, sondern manipuliert ein Vorhandenes. Aber auch hier kannst Du zurückgeben was Du möchtest.
beide Funktionen sind mir bewusst was sie machen sollen, aber, wenn du dir die Diskussion anschaust, wie readingsChange entstanden ist, dann war es damals, weil ein user ein Reading in einem userReading gerundet haben wollte und dies nicht funktioniert hatte: https://forum.fhem.de/index.php/topic,60077.msg525953.html#msg525953 daher dachte ich, dass das Runden im userReading nicht funktioniert.
Zitat von: KernSani am 16 Mai 2017, 21:58:23
:-D
Noch weiß ich nicht, ob die Lösung klappt. Hatte geschrieben dass es durchaus 1-2 Wochen dauern kann, bis ich mal wieder ein 85° Wert habe. Dachte mir, dass ich es auf "gelöst" setzte, wenn ich weiß das es geht. Kann das aber gern schon vorher machen. :)
Zitat von: M.Piet am 17 Mai 2017, 08:34:23
Noch weiß ich nicht, ob die Lösung klappt. Hatte geschrieben dass es durchaus 1-2 Wochen dauern kann, bis ich mal wieder ein 85° Wert habe. Dachte mir, dass ich es auf "gelöst" setzte, wenn ich weiß das es geht. Kann das aber gern schon vorher machen. :)
Wenn du der Meinung bist, dass es gelöst ist, dann gerne machen. Nur nicht vergessen ;)
Alternativ kann man so etwas auch mal mit dem setreading Befehl testen.
Heute morgen gegen 6:30 Uhr hatte ich im Plott wieder ein 85° Messwert (siehe Screenshot).
Was sagt mein Log zum userReadings dazu:
2017-05-31_06:20:21 DS18S20_444E0C030800 cleanTemp: 61.375
2017-05-31_06:21:22 DS18S20_444E0C030800 cleanTemp: 61.375
2017-05-31_06:22:22 DS18S20_444E0C030800 cleanTemp: 61.3125
2017-05-31_06:23:23 DS18S20_444E0C030800 cleanTemp: 61.3125
2017-05-31_06:24:23 DS18S20_444E0C030800 cleanTemp: 61.3125
2017-05-31_06:25:23 DS18S20_444E0C030800 cleanTemp: 61.3125
2017-05-31_06:26:24 DS18S20_444E0C030800 cleanTemp: 61.25
2017-05-31_06:27:24 DS18S20_444E0C030800 cleanTemp: 61.25
2017-05-31_06:28:24 DS18S20_444E0C030800 cleanTemp: 61.25
2017-05-31_06:29:25 DS18S20_444E0C030800 cleanTemp: 61.25
2017-05-31_06:30:25 DS18S20_444E0C030800 cleanTemp: 61.25
2017-05-31_06:31:26 DS18S20_444E0C030800 cleanTemp: 61.1875
2017-05-31_06:32:26 DS18S20_444E0C030800 cleanTemp: 61.1875
2017-05-31_06:33:27 DS18S20_444E0C030800 cleanTemp: 61.125
2017-05-31_06:34:27 DS18S20_444E0C030800 cleanTemp: 61.125
2017-05-31_06:35:27 DS18S20_444E0C030800 cleanTemp: 61.0625
2017-05-31_06:36:28 DS18S20_444E0C030800 cleanTemp: 61.0625
2017-05-31_06:37:28 DS18S20_444E0C030800 cleanTemp: 61.0625
2017-05-31_06:38:28 DS18S20_444E0C030800 cleanTemp: 61
2017-05-31_06:39:29 DS18S20_444E0C030800 cleanTemp: 61
2017-05-31_06:40:30 DS18S20_444E0C030800 cleanTemp: 60.9375
2017-05-31_06:41:30 DS18S20_444E0C030800 cleanTemp: 60.9375
2017-05-31_06:42:30 DS18S20_444E0C030800 cleanTemp: 60.875
2017-05-31_06:43:31 DS18S20_444E0C030800 cleanTemp: 60.875
2017-05-31_06:44:31 DS18S20_444E0C030800 cleanTemp: 60.875
2017-05-31_06:45:32 DS18S20_444E0C030800 cleanTemp: 60.875
2017-05-31_06:46:32 DS18S20_444E0C030800 cleanTemp: 60.8125
2017-05-31_06:47:33 DS18S20_444E0C030800 cleanTemp: 60.8125
2017-05-31_06:48:33 DS18S20_444E0C030800 cleanTemp: 60.8125
2017-05-31_06:49:34 DS18S20_444E0C030800 cleanTemp: 60.75
2017-05-31_06:50:34 DS18S20_444E0C030800 cleanTemp: 60.75
2017-05-31_06:51:34 DS18S20_444E0C030800 cleanTemp: 60.75
2017-05-31_06:52:34 DS18S20_444E0C030800 cleanTemp: 60.75
2017-05-31_06:53:35 DS18S20_444E0C030800 cleanTemp: 60.6875
2017-05-31_06:54:36 DS18S20_444E0C030800 cleanTemp: 60.6875
2017-05-31_06:55:36 DS18S20_444E0C030800 cleanTemp: 60.6875
2017-05-31_06:56:37 DS18S20_444E0C030800 cleanTemp: 60.6875
2017-05-31_06:57:37 DS18S20_444E0C030800 cleanTemp: 60.625
2017-05-31_06:58:37 DS18S20_444E0C030800 cleanTemp: 60.625
2017-05-31_06:59:37 DS18S20_444E0C030800 cleanTemp: 60.625
Wie man sieht: es funktioniert!!!! Ich baue nun alle Plots und notifys auf das userReadings um und meine Probleme sind weg.
Vielen Dank an allen die mir geholfen haben!!!