Autor Thema: fhem.pl -> sub Dispatch  (Gelesen 2277 mal)

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2617
fhem.pl -> sub Dispatch
« 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
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20323
Antw:fhem.pl -> sub Dispatch
« Antwort #1 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

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2617
Antw:fhem.pl -> sub Dispatch
« Antwort #2 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
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

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2617
Antw:fhem.pl -> sub Dispatch
« Antwort #3 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
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

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:fhem.pl -> sub Dispatch
« Antwort #4 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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20323
Antw:fhem.pl -> sub Dispatch
« Antwort #5 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2617
Antw:fhem.pl -> sub Dispatch
« Antwort #6 am: 07 Februar 2015, 15:55:51 »
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