Frage zu notifyRegexpChanged() in fhem.pl

Begonnen von Markus Bloch, 26 April 2015, 15:23:32

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zuammen,

ich war gerade dabei mal meine notify's etwas aufzuräumen bzw. zu vereinfachen. Dabei ist mir aufgefallen das einige notify's in den Internals ein NOTIFYDEV gesetzt haben. Ist soweit auch richtig. Nun hatte ich aber auch ein paar notify's die kein NOTIFYDEV gesetzt hatten, obwohl es dort durchaus funktionieren würde. Da habe ich mal im Code rumgegraben und habe folgenden if-Block in notifyRegexpChanged() als Grund dafür ausmachen können:

Zitat von: fhem.pl ab Zeile 4043
  $dev = $1 if(($re =~ m/^([^:]*)$/ || $re =~ m/^([^:]*):(.*)$/));

  if($dev && defined($defs{$dev}) && $re !~ m/\|/) {
    $hash->{NOTIFYDEV} = $dev;
  } else {
    delete($hash->{NOTIFYDEV}); # when called by modify
  }


Hier mal ein paar Regex-Ausdrücke aus meinen notify's die aktuell kein NOTIFYDEV setzen:

- Fernbedienung_Wohnzimmer_Btn_12_virtuell:(ON|OFF)
- Fenster_Wohnzimmer:(tilted|closed)
- ...

Jetzt frage ich mich, warum die fett markierte Bedingung in dem IF-Block vorhanden ist, da ja die vorab durchgeführten Bedinungen (insbesondere defined($defs{$dev}) ) doch bereits hinreichend prüft ob der erste Teil bis zum Doppelpunkt ein einzelner Gerätename ist. Ausdrücke wie (Device_A|Device_B):reading oder (Device_A:reading_a|Device_B:reading_b)würden hier eh nicht als gültig erkannt werden, da ja aufgrund der Klammern die dann in $dev mit enthalten sind, dieser Name so eh nicht in $defs gefunden werden kann.

Was ist der Grund für die Prüfung auf eine Pipe? Falls sie wirklich notwendig ist, kann man die Prüfung auf die Pipe nicht auf $dev machen?

Damit würden entsprechende notify-Definitionen auch ein NOTIFYDEV gesetzt bekommen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Da ich jetzt auch keinen Problemfall konstruieren kann, habe ich den markierten Teil der Pruefung entfernt.

rudolfkoenig

Ok, jetzt (nach diversen Meldungen) kann ich Problemfaelle konstruiren, habe deswegen den Patch zurueckgedreht.

Beispiel fuer Problemfall:  device1:on|device2:off

Noch schlimmer: diese Art von Regexp wird von dem notify und FileLog Wizards in FHEMWEB generiert. Vermutlich kann man eine Pruefung einbauen, damit sowohl dein Fall, wie auch dieser Fall funktioniert, wenn jemand was getestetes hat, soll sich melden.