Ist es möglich, dass reguläre Ausdrücke im Eventmonitor (Event-Filter) anders ausgewertet werden, als ein RegEx für ein notify??
Bei mir scheint das so zu sein: Ich möchte nur auf Ereignisse reagieren, welche von Geräten ausgelöst werden,
deren Namen mit ra_ beginnen und bei denen der Motor steht.
Der RegEx ra_.*motor:.stop:* funktioniert beim Eventmonitor zuverlässig, aber ein notify, das auf dem selben Ausdruck basiert, löst den zugeordneten Code nicht aus.
Weiß jemand Rat?
define n_getLevel notify ra_.*motor:.stop:* {getLevel($NAME)}
sub getLevel($) {
my $device = shift;
my $debugging = 1;
if ($debugging) { debug("setLevel $device"); }
}
Die zu filternden Events (von Rolladenaktoren) sehen übrigens z.B. so aus:
2016-11-15 17:42:01 CUL_HM ra_3 level: set_95
2016-11-15 17:42:01 CUL_HM ra_3 set_95
2016-11-15 17:42:01 CUL_HM ra_3 deviceMsg: on (to HM_CFG_LAN)
2016-11-15 17:42:01 CUL_HM ra_3 level: 100
2016-11-15 17:42:01 CUL_HM ra_3 motor: down:on
2016-11-15 17:42:01 CUL_HM ra_3 pct: 100
2016-11-15 17:42:01 CUL_HM ra_3 on
2016-11-15 17:42:01 CUL_HM ra_3 timedOn: off
2016-11-15 17:42:05 CUL_HM ra_3 deviceMsg: 95 (to HM_CFG_LAN)
2016-11-15 17:42:05 CUL_HM ra_3 level: 95
2016-11-15 17:42:05 CUL_HM ra_3 motor: stop:95
2016-11-15 17:42:05 CUL_HM ra_3 pct: 95
2016-11-15 17:42:05 CUL_HM ra_3 95
2016-11-15 17:42:05 CUL_HM ra_3 timedOn: off
würde sagen, an Ende muss ein '.*' anstelle eines '*'
danke für deinen Input.
Klappt damit aber leider auch nicht.
Habe jetzt mal ra_\d\smotor:\sstop:* probiert. Auch dieser Ausdrcuk funktioniert im Eventmonitor, nicht aber im notify.
probier mal
define n_getLevel notify ra_.*:motor:stop:.* {getLevel($NAME)}
Wäre schön wenn man wüsste was genau, geht nicht, bedeutet.
Wird das Notify nicht getriggert?
define n_getLevel notify ra_[1-9].motor:.stop.* {getLevel($NAME)}
Das sollte funktionieren.
Das hier funzt nicht, weil bei regexp ein * alleine nicht funzt, nur zusammen mit dem Punkt gehts.
define n_getLevel notify ra_.*motor:.stop:* {getLevel($NAME)}
das hier geht aber mit sicherheit:
define n_getLevel notify ra_.*motor:.stop:.* {getLevel($NAME)}
bei diesem Event:
ra_3 motor: stop:95
und wenn das bei dir nicht das gewünschte Ergebnis liefert, dann wird das mMn an deiner Funktion
{getLevel($NAME)}
liegen.
[quhttps://forum.fhem.de/Smileys/default/wink.gifote author=CoolTux link=topic=60821.msg522165#msg522165 date=1479231892]
define n_getLevel notify ra_[1-9].motor:.stop.* {getLevel($NAME)}
Das sollte funktionieren.
[/quote]
und damit hast du auch Recht! :)
Ich habe zwar noch nicht so recht verstanden warum, aber das ist mir wurscht - zumindest im Moment.
Danke euch allen!
Man beachte bitte die Einschränkung der Zahl. Nur Devices mit dem Namen ra_1 bis ra_9 werden akzeptiert.
Hast Du also 10 Rolläden wird die 10 nicht klappen.
Grüße
Zitat von: CoolTux am 15 November 2016, 20:39:43
Nur Devices mit dem Namen ra_1 bis ra_9 werden akzeptiert.
Hast Du also 10 Rolläden wird die 10 nicht klappen.
Schon klar...
Ich verstehe nur noch immer nicht, warum meine Lösungen nicht funktionierten...
Zitat von: automatisierer am 15 November 2016, 19:59:28
Das hier funzt nicht, weil bei regexp ein * alleine nicht funzt, nur zusammen mit dem Punkt gehts.
define n_getLevel notify ra_.*motor:.stop:* {getLevel($NAME)}
Moooooment, das * macht genau das, was es in einem RegEx tun soll. Es wird eine Wiederholung des vorherigen Ausdrucks beliebig oft, auch Null-mal definiert. Bei dir ist der letzte Ausdruck das ":".
Zitat von: RadioJames am 18 November 2016, 07:23:07
Moooooment, das * macht genau das, was es in einem RegEx tun soll. Es wird eine Wiederholung des vorherigen Ausdrucks beliebig oft, auch Null-mal definiert. Bei dir ist der letzte Ausdruck das ":".
Ja,
so isses... deswegen der . davor, dann wird ein beliebiges Zeichen 0 bis beliebig oft definiert
Oh, sorry, hab dich mit dem TO verwechselt und dein Posting nur halb gelesen.