FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Tobias am 23 April 2013, 13:13:14

Titel: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 23 April 2013, 13:13:14
Hi,
ich habe einen Tür/Fensterkontakt (1wire, DS2413) den ich alle 10sek abfrage.
Ziel ist es nur dann ein event zu generieren, falls sich der Zustand ändert oder aber alle 30min einmal.
Dazu habe ich folgendes definiert:
attr tuer event-on-change-reading A,B
attr tuer event-min-interval A:1800,B:1800


Aber irgendwie klappts nicht, es wird, falls die Tür zu bleibt, nach 30min kein event generiert.
Wo ist mein Denkfehler?
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Carsten am 23 April 2013, 14:10:01
Hallo,

wenn ich mich nicht irre, ist event-min-interval nicht dafür gedacht. Ich glaube, das hat Rudi eingebaut, um bei den Fritz!Dect200 Schaltern, die relativ häufig ihre Werte melden, zu verhindern, dass diese Meldungen das Protokoll vollmüllen. Daher wird defaultmäßig nur alle 2 Minuten ein Wert akzeptiert. Werte, die weniger als <event-min-interval> Sekunden nach dem letzten Wert gesendet werden, werden ignoriert. In deinem Fall würde eine Änderung von A oder B nur dann verarbeitet, wenn die letzte Änderung mindestens 30 Minuten her ist.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 23 April 2013, 18:56:33
hmm, schade... gibts Alternativen? Oder muss ich ein Attribut "event-max-interval" im fhem.pl erfinden?
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Rohan am 23 April 2013, 21:01:33
Hi Tobias,

ist zwar evtl. von hinten durch das Knie ins Auge, aber vlt. kann man das hier (//www.fhemwiki.de/wiki/E-Mail_per_notify_nach_Zeitablauf_erneut_senden) von der Grundidee entsprechend umwandeln:

1. Loggen bei Änderungen
2. Spätestens nach XYZ Sekunden

Umwandeln geht bestimmt; Frage ist nur, ob es nicht mit fhem-eigenen Mitteln einfacher geht, aber da sind andere gefragt.

Gruß
Thomas

Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 24 April 2013, 12:37:53
von der grundidee nicht schlecht, funktioniert aber nur mit einem(!) Sensor da es nur eine(!) globale Variable ist. Es wird merkwüdige Effekte Geben wenn mehrere Sensoreren dieselbe VAriable nutzen ;) ;)
Aber ich überleg mir noch etwas. Am besten wird es wohl sein die FnFunctions mit event-max-interval zu erweitern. Dann hat man etwas fhem-übergreifendes
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig am 25 April 2013, 10:27:21
Ich meine ich habe das Problem (hoffentlich ohne Nebenwirkungen) behoben.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 25 April 2013, 13:12:51
Zitat von: rudolfkoenig schrieb am Do, 25 April 2013 10:27Ich meine ich habe das Problem (hoffentlich ohne Nebenwirkungen) behoben.
kannst du das etwas genauer beschreiben? Was hast du wo und wann behoben?
gruss
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Bochi am 07 Mai 2013, 09:29:07
Zitatkannst du das etwas genauer beschreiben? Was hast du wo und wann behoben?

Das würde mich auch sehr interessieren :-)

Ich habe ein ähnliches Szenario, bei dem sich Dummy-Devices die Values für die userReadings per GetFileFromURL holen, und das würde ich auch gerne automatisiert ohne das Device togglen zu müssen alle 5 Minuten abfragen lassen. Ich habe ewig gegoogled etc aber leider keine Lösung dafür gefunden...

Danke und Gruß
Stefan
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig am 07 Mai 2013, 10:04:57
Das ist mir zu hoch: dummy generiert keine events, hat dementsprechend auch kein event-min-interval/etc. als Attribut.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Bochi am 07 Mai 2013, 10:34:36
Zitat von: rudolfkoenig schrieb am Di, 07 Mai 2013 10:04Das ist mir zu hoch: dummy generiert keine events, hat dementsprechend auch kein event-min-interval/etc. als Attribut.

Hmm, dann habe ich möglicherweise etwas missverstanden. Ich lege meinen Plan mal genau dar:

Ich habe einen kleinen Serverschrank, in welchem ich Temperaturgesteuert die Lüfter mittels FS20 Steckdosen steuere.
Jeder Rechner in dem Schrank hat einen httpd laufen und liefert über

 http://<server>/temp.txt

die aktuelle Temperatur.

Bislang habe ich einen cronjob + shellscript, welches alle 5 Minuten die Temperatur checkt und dementsprechend die Lüfter an/ausschält.

Jetzt hab ich mir gedacht ich könnte mal versuchen, das innerhalb von FHEM abzubilden. Also hab ich dummies für die verschienenden Rechner angelegt und denen mittels

 # attr <server> userReadings temp { GetFileFromURL("http://<server>/temp.txt") }

ein Reading für die Temperatur hinzugefügt.

Jetzt habe ich jedoch offenbar event-on-change-reading falsch verstanden. Ich dachte, damit könnte man eine Regel erstellen, bei der zB. wenn die Temperatur (das Reading) sich ändert ein Script ausführen... Mist.

Wenn ein Dummy keine Events kann, dann ist der Weg, den ich hier einschlagen wollte von Anfang an zum Scheitern verurteilt, oder?

Gruß
Stefan
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Bochi am 07 Mai 2013, 10:42:23
Hmm, und nochwas, laut xmllist:

<dummy name="xbmc" state="76" sets="*" attrs="room group comment alias eventMap userReadings loglevel:0,1,2,3,4,5,6 setList event-on-change-reading event-on-update-reading event-min-interval stateFormat devStateIcon group_map icon sortby structexclude webCmd">
  <INT key="NAME" value="xbmc"/>
  <INT key="NR" value="92"/>
  <INT key="STATE" value="76"/>
  <INT key="TYPE" value="dummy"/>
  <ATTR key="room" value="hidden"/>
  <STATE key="temp" value="76" measured="2013-05-07 09:05:15"/>
</dummy>


hat mein Dummy (das ist einer der Rechner, die ich angelegt hab) sehr wohl event-on-change/update-reading?

Gruß
Stefan
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig am 07 Mai 2013, 11:06:17
Ok, da muss ich wohl klein beigeben: dummy generiert beim "set" doch ein Event, und in diesem Zusammenhang kann man diese Attribute verwenden. Die Attribute filtern anderweitig ausgeloeste Events, und erzeugen selbst keine. D.h. deine Loesung ist vmtl. praktikabel, die Ausfuehrung muss nur explicit durch irgendein set der dummy angestossen werden.

UserReading ist aber mAn umstaendlich: ich wuerde in einem at alle Daten abholen, und die Ergebnisse den unterschiedlichen dummys zuweisen.
Da diese Zuweisung ein event generiert, kann man das auch per FileLog einfangen und plotten.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 24 Mai 2013, 10:13:35
Hi,
ich möchte nochmal meinen "Wunsch"/Sollzustand formulieren.
1. jede Änderung des vorherigen wertes soll auf jeden Fall ein event auslösen
2. Bleibt der Wert bei Folgemessungen identisch, so soll nur alle 15min ein event generiert werden.
Ich habe jetzt testweise so gelöst. Zumindest funktioniert nun Punkt 2
event-min-interval -> temperature:900,humidity:900,battery:3600
event-on-update-reading  -> humidity,temperature,battery

Allerdings scheint Punkt 1 nicht zu funktionieren. Ich habe "event-min-interval" so interpretiert, das Wertänderungen bezogen auf die letzte Messung unabhängig des eingestellten Intervalls sofort ein Event auslösen.
Hier mal das Log. Änderungen der Temperatur treffen auch nur im 15min Raster ein. Erwartet hätte ich die ÄnderungsWerte außerhalb des 15min Rasters
Logeinträge anzeigen
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: justme1968 am 24 Mai 2013, 10:48:04
wenn man einen dummy zusammen mit den user readings einsetzt ist es wichtig nicht per set den state zu setzen sondern seinen wert wirklich in ein reading zu schreiben. wenn man state verwendet wird das user reading immer ein event zeitversetzt zu spät aktualisiert weil fhem zuerst die userReadings aktualisiert und dann erst set aktualisiert. wärend die user readings aktualisiert werden hat state und damit Value() noch den alten wert! wenn man richtige readings stat state verwendet kann man dann auch ohne probleme mehr als nur ein reading in einem dummy haben.

wenn man statt set readingsSingleUpdate() verwendet gibt es das problem nicht. einen schönen STATE für die weboberfläche kann man sich dann mit stateFormat bauen.

Beispiel anzeigen
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias am 24 Mai 2013, 14:52:44
ich glaube ich habe die Lösung.
Nach etwas längerem "lesen" der fhem.pl im Abschnitt der "ReadingsUpdate*" Funktionen muss man sowohl event-on-update als auch event-on-change definieren.
event-min-interval -> temperature:900,humidity:900,battery:3600
event-on-update-reading  -> humidity,temperature,battery
event-on-change-reading  -> humidity,temperature,battery


Damit sieht es bei mir so aus:2013-05-24_12:16:42 19.9
2013-05-24_12:31:23 19.9
2013-05-24_14:39:10 20

Man sieht, das die 20°C genau 8min nach den letzten 19°C geloggt wurden, trotz einem MinInterval von 15min

Da müssen wir die commandref noch detaillieren ;)
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig 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?
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias 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
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Tobias 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";
       }
     }
   }

Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig 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.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: locodriver 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
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig 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.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: locodriver 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?
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: rudolfkoenig am 03 Juni 2013, 13:38:15
> wie würde sowas aussehen?

Siehe http://fhem.de/commandref.html#setdefaultattr (//fhem.de/commandref.html#setdefaultattr)
Ein bisschen Mitdenken ist hier wirklich erwuenscht.
Titel: Aw: Zusammenspiel von event-on-change-reading und event-min-interval?
Beitrag von: Willi 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:
Zitat2013-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