fhem.pl -> sub Dispatch

Begonnen von JoWiemann, 06 Februar 2015, 17:17:28

Vorheriges Thema - Nächstes Thema

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

rudolfkoenig

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

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Reinerlein

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

rudolfkoenig

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.

JoWiemann

OK, schon wieder was dazu gelernt  :)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM