Autor Thema: Zusammenspiel von event-on-change-reading und event-min-interval?  (Gelesen 23357 mal)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20470
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #15 am: 25 Mai 2013, 09:02:06 »
Ich mag Leute, die sich im Not selbst helfen :)

Kann ich davon ausgehen, dass diese Loesung ausreichend ist?

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3640
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #16 am: 25 Mai 2013, 19:42:24 »
hmm, zu früh gefreut... doch nicht. Ich geh davon aus das ich in fhem.pl etwas anpassen muss. Komme aber das WE nicht dazu
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, TrashCal, MediaList
Meine Projekte auf https://github.com/tobiasfaust

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3640
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #17 am: 28 Mai 2013, 15:19:46 »
kurze Bitte an alle weiteren betroffenen, und Rudi.
Könnt ihr bitte mal folgenden Patch in fhem.pl testen?
Damit sollte ein Event nur nur dann generiert werden wenn
MinIntervall abgelaufen ist und keine Wertänderung stattgefunden hat sowie innerhalb von MinInterval eine Wertänderung stattfindet.
Es muss das Reading sowohl in "Event-on-change" als auch in "Event-on-update" als auch in "event-min-intervall" enthalten sein.
--- fhem.pl.org 2013-05-28 14:42:35.000000000 +0200
+++ fhem.pl     2013-05-28 15:15:23.000000000 +0200
@@ -3244,7 +3244,7 @@
     $changed= !($attreocr || $attreour)
               || $eour
               || ($eocr && ($value ne $readings->{VAL}));
-    #Log 1, "EOCR:$eocr EOUR:$eour CHANGED:$changed";
+    #Log 3, "Reading:$reading, Value:$value,EOCR:$eocr EOUR:$eour CHANGED:$changed";

     my @v = grep { my $l = $_;
                    $l =~ s/:.*//;
@@ -3254,10 +3254,18 @@
       my $now = $hash->{".updateTime"};
       my $le = $hash->{".lastTime$reading"};
       if($le && $now-$le < $minInt) {
-        $changed = 0 if(!$eocr);
+        if(!$eocr || ($eocr && $value eq $readings->{VAL})){
+          $changed = 0;
+        } else {
+          $hash->{".lastTime$reading"} = $now;
+        }
+        #Log 3, "Test 1";
+        #Log 3, "Reading:$reading, LastTimeReading:$reading $le, Now:$now, MinInt:$minInt, EOCR:$eocr, changed:$changed";
       } else {
         $hash->{".lastTime$reading"} = $now;
         $changed = 1 if($eocr);
+        #Log 3, "Test 2";
+        #Log 3, "Reading:$reading, LastTimeReading:$reading $le, Now:$now, MinInt:$minInt, EOCR:$eocr, changed:$changed";
       }
     }
   }

FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, TrashCal, MediaList
Meine Projekte auf https://github.com/tobiasfaust

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20470
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #18 am: 29 Mai 2013, 13:00:08 »
Meiner Ansicht nach ist das ok so, ich habe es auch eingecheckt.

Ich meine aber, dass in diesem Fall das Attribut event-on-update-reading irrelevant ist, es betrifft nur die beiden anderen, was mAn verstaendlich ist.

Offline locodriver

  • Full Member
  • ***
  • Beiträge: 400
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #19 am: 03 Juni 2013, 12:43:31 »
@Rudolf:
Danke für die aktuellen Änderungen für die 3 Attribute. Ich hätte noch eine Bitte/Anregung, um die Handhabung der 3 Attribute zu erleichtern.

Ich habe z.Z. die Readings eines HM-TCs mit allen 3 Attributen maskiert:

attr BD_Regler event-min-interval actuator:900,measured-temp:900,desired-temp:900,humidity:900
attr BD_Regler event-on-change-reading actuator,measured-temp,desired-temp,humidity
# attr BD_Regler event-on-update-reading actuator,measured-temp,desired-temp,humidity


Das Log wird dadurch übersichtlicher und es gehen auch keine für den Plot notwendigen Daten verloren. Allerdings werden ja jetzt nur noch die Readings geloggt, welche explizit in den Attributen genannt werden. Dazu hätte ich einen Vorschlag: Ist es möglich, zu den gerätespezifischen Readings noch zwei allgemein gültige Argumente zu implementieren - z.B. "all" (ist ja jetzt als Default gesetzt, wenn die Attribute nicht definiert werden) und "nothing"? Dann könnte man z.B. die wichtigen Readings in der genannten Art loggen und andere nur bei Veränderungen, um Tipp- und Kopierfehler zu vermeiden, die bei vielen Argumenten auftreten können:

attr BD_Regler event-on-change-reading all

Beim TC z.b. Batterie, Betriebsart, Anzeigeart usw.?

Oder kann man in der jetzigen Implementierung die Argumentliste als String übergeben? So in der Art:

Logliste=actuator,measured-temp,desired-temp,humidity
attr BD_Regler event-on-change-reading Logliste


Danke Uwe
fhem 5.8 auf Rpi3
HM-LAN-CFG (FW 0.961) - Yahoowetter
2x HM-TC-IT-WM-W-EU mit je 1x HM-Sec-RHS und 1x/2x HM-CC-RT-DN
6x HM-LC-Bl1-FM mit je 1x Somfy-Motor
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20470
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #20 am: 03 Juni 2013, 13:14:43 »
> noch zwei allgemein gültige Argumente zu implementieren

Verstehe nicht wieso und wozu, aber:
- all kann man als .* schreiben (beide Attribute nehmen eine Liste von regexps!)
- nothing kann man als solches hinschreiben, ich kenne kein Reading mit dem Namen nothing


>  Oder kann man in der jetzigen Implementierung die Argumentliste als String übergeben?

Nicht wirklich.
WENN mann auf save (inkl autocreate) verzichtet, dann kann man defaultattr verwenden, das ist mAn noch eleganter.

Offline locodriver

  • Full Member
  • ***
  • Beiträge: 400
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #21 am: 03 Juni 2013, 13:19:50 »
Zitat
- all kann man als .* schreiben (beide Attribute nehmen eine Liste von regexps!)


Werde ich mal probieren, habe ich mit diesen Attributen noch nicht in Zusammenhang gebracht.

Zitat
>  Oder kann man in der jetzigen Implementierung die Argumentliste als String übergeben?

Nicht wirklich.
WENN mann auf save (inkl autocreate) verzichtet, dann kann man defaultattr verwenden, das ist mAn noch eleganter.


Autocreate habe ich deaktiviert; wie würde sowas aussehen?
fhem 5.8 auf Rpi3
HM-LAN-CFG (FW 0.961) - Yahoowetter
2x HM-TC-IT-WM-W-EU mit je 1x HM-Sec-RHS und 1x/2x HM-CC-RT-DN
6x HM-LC-Bl1-FM mit je 1x Somfy-Motor
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20470
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #22 am: 03 Juni 2013, 13:38:15 »
> wie würde sowas aussehen?

Siehe http://fhem.de/commandref.html#setdefaultattr
Ein bisschen Mitdenken ist hier wirklich erwuenscht.

Offline Willi

  • Sr. Member
  • ****
  • Beiträge: 594
Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
« Antwort #23 am: 27 August 2013, 13:55:12 »
Ich muss mal ein großes Lob loswerden (@Rudi, @Tobias, und wen ich sonst noch vergessen habe).
Das Zusammenspiel von event-on-change-reading und event-min-interval finde ich phantastisch!

Damit kann ich meine gesprächigen Oregon-Sensoren beibringen weniger zu loggen (bzw. Events zu generieren) und andererseits bekomme ich aber sofort Änderungen mit.

So definiere ich jetzt die Oregon-Sensoren wie folgt:

define Alte_Garage TRX_WEATHER BTHR918
attr Alte_Garage event-min-interval state:600
attr Alte_Garage event-on-change-reading state
attr Alte_Garage event-on-update-reading .*


Im Zusammenspiel mit folgendem Filelog, der nur die T:-Zeilen loggt:
define FileLog_Alte_Garage FileLog /var/log/fhem/Alte_Garage-%Y.log Alte_Garage:T\x3a.*
attr FileLog_Alte_Garage logtype temp4press8:Temp/Press,temp4hum6dew10:Temp/Hum,text


Damit habe ich jetzt folgendes im Log:
Zitat

2013-08-27_12:21:29 Alte_Garage T: 19.9 H: 69 P: 1005 D: 14.0 BAT: low RSSI: 5
2013-08-27_12:31:37 Alte_Garage T: 19.9 H: 69 P: 1005 D: 14.0 BAT: low RSSI: 5
2013-08-27_12:41:45 Alte_Garage T: 19.9 H: 69 P: 1005 D: 14.0 BAT: low RSSI: 5
2013-08-27_12:47:27 Alte_Garage T: 20 H: 68 P: 1005 D: 13.9 BAT: low RSSI: 5
2013-08-27_12:57:35 Alte_Garage T: 20 H: 68 P: 1005 D: 13.9 BAT: low RSSI: 5


Wie man sieht wird normalerweise alle 10 Minuten geloggt. Um 12:47:27 hat sich die Temperatur verändert und damit wurde ausserhalb der Reihe sofort ein Event generiert.

Grüße

Willi
FHEM@Q600(debian) mit DS9490R (1Wire) | FHEM@Sheevaplug(debian) mit RFXCOM-Receiver(80002), CULv3 & USB-WDE1 | FHEM@odroid mit CULv2 & RFXtrx433

 

decade-submarginal