patch um event-on-change-reading um einen threshold zu erweitern

Begonnen von justme1968, 07 Juni 2014, 15:28:48

Vorheriges Thema - Nächstes Thema

hexenmeister

ich sehe die jetzige Lösung als ein (akzeptabler) Kompromis.
Nicht ganz sauber, wenn man aus einem Elfenbeinturm runter schaut ;)
Aber auch sehr nützlich.
Also was wäre denn besser?
Gar nichts machen? Sicher nicht...
X-mal in jedem einzelnen Device/Modul implementieren? Das ist noch 'dreckiger'...
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

Zitat von: herrmannj am 08 Juni 2014, 11:48:22
Ich hatte Zweifel, daher hab ich (höflich) gefragt. Am Ende bin ich aber eher bestätigt:
...
again: das macht den Kohl nicht fett, aber um den Ball dann auch zurückzuspielen, da gibt es größere Baustellen.

*unterschreib*

(und es gibt wichtigere Baustellen, bei denen sich Änderungen wirklich "lohnen" würden!)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

hallo rudi,

du hattest in meinen ursprünglichen patch noch ein zeile eingebaut die den value auf zahlen beschränkt:$value =~ s/[^\d\.\-]//g; # We expect only numbers here.dies führt in manchen per versionen dazu das $1 aus der regex davor die den threshold wert extrahiert zurück gesetzt wird und der threshold nicht greift.

der folgende kleine patch behebt das problem:--- fhem.pl 2014-11-03 19:32:14.000000000 +0100
+++ fhem.pl 2014-11-03 19:32:22.000000000 +0100
@@ -3653,12 +3653,13 @@
     my $threshold_reached = 1;
     if( $eocr
         && $eocrv[0] =~ m/.*:(.*)/ ) {
+      my $threshold = $1;

       $value =~ s/[^\d\.\-]//g; # We expect only numbers here.
       my $last_value = $hash->{".attreocr-threshold$reading"};
       if( !defined($last_value) ) {
         $hash->{".attreocr-threshold$reading"} = $value;
-      } elsif( abs($value-$last_value) < $1 ) {
+      } elsif( abs($value-$last_value) < $threshold ) {
         $threshold_reached = 0;
       } else {
         $hash->{".attreocr-threshold$reading"} = $value;


da würde einige anwender glücklich machen :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Na dann will ich mal nicht im Weg stehen: habs eingecheckt.