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
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
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
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
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
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.
OK, schon wieder was dazu gelernt :)
Grüße Jörg