FHEM Forum

FHEM => Sonstiges => Thema gestartet von: JoWiemann am 06 Februar 2015, 17:17:28

Titel: fhem.pl -> sub Dispatch
Beitrag von: JoWiemann am 06 Februar 2015, 17:17:28
Hallo,

ich versuche nun den ganzen Tag herauszufinden warum folgende Matches immer nur auf 00_IT.pm lenken:


my %matchListFHEMduino = (
    ....
    "5:FHEMduino_PT2262"   => "^IR.*\$",
    ....
    "13:IT"                => "^i......\$",
);


Am Ende bin ich auf folgendes in der fhem.pl gestoßen:
sub
Dispatch($$$)
{
  my ($hash, $dmsg, $addvals) = @_;
  my $module = $modules{$hash->{TYPE}};
  my $name = $hash->{NAME};

  Log3 $hash, 5, "$name dispatch $dmsg";

  my ($isdup, $idx) = CheckDuplicate($name, $dmsg, $module->{FingerprintFn});
  return rejectDuplicate($name,$idx,$addvals) if($isdup);

  my @found;
  my $clientArray = $hash->{".clientArray"};
  $clientArray = computeClientArray($hash, $module) if(!$clientArray);

  foreach my $m (@{$clientArray}) {
    # Module is not loaded or the message is not for this module
    next if($dmsg !~ m/$modules{$m}{Match}/i);

....


Nach meinem Verständnis wird durch m/  /i nicht mehr case sensitiv gesucht. Damit wird i. genauso behandelt, wie IR. Verstehe ich da etwas falsch, oder wird bewusst ein im Modul definierter Match nicht mehr case sensitiv abgeprüft?

Grüße Jörg
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: rudolfkoenig am 06 Februar 2015, 17:53:04
Ich meine die Ursache ist unterschiedlichen Case bei Hex-Zahlen zu akzeptieren. Da FHEM seine Urspruenge bei FHZ hat, war das der einfachere Weg um die Daten von CUL an die FS20/HMS/FHT Module zu verteilen. Man koennte ueberall von %x auf %X umstellen, aber das muesste jemand sorgfaeltig pruefen, insofern bleibt erstmal der Match mit i
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: JoWiemann am 06 Februar 2015, 18:01:49
Ok, danke für die Info. Dann müssen halt die regulär expressions in den Modulen schärfer formuliert werden.

Grüße Jörg


Gesendet von iPhone mit Tapatalk
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: JoWiemann am 06 Februar 2015, 21:15:44
Hallo Rudolph,

und wie wäre es mit einem optionalen Parameter, mit dem man bei Bedarf auf case sensitiv umschalten kann?

Grüße Jörg
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: Reinerlein am 07 Februar 2015, 01:21:05
Hi Jörg,

du kannst mittels eines "embedded pattern match modifiers" das auch wieder abschalten:

(?-i)


Das muss am Anfang deines Ausdrucks stehen, so dass folgender Konstrukt am Ende "herauskommt":

/(?-i)test/i
Das match nur Case-Sensitive auf "test".

Grüße
Reinerlein
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: rudolfkoenig am 07 Februar 2015, 07:28:33
Einen besseren (d.h. nicht so allgemein gueltigen) regexp kann man auch anders schreiben, z.Bsp. als "^i[0-9A-H|]{6}\$"
Weiterhin ist "13" als Schluessel vermutlich nicht im Sinne des Autors: die Liste wird alphabetisch sortiert.
Titel: Antw:fhem.pl -> sub Dispatch
Beitrag von: JoWiemann am 07 Februar 2015, 15:55:51
OK, schon wieder was dazu gelernt  :)

Grüße Jörg