FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: bjoernh am 25 Oktober 2015, 13:17:53

Titel: Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 13:17:53
Hallo,

folgendes Problem:
Ich habe in der a-culfw die Empfangsroutine so erweitert, dass diese die Oregon2 empfängt.
Die funktioniert auch so weit.
Nun möchte ich das Rad nicht nochmal neu erfinden und habe mir gedacht ich leite die Empfangenen Daten an das Oregon Modul weiter.
Hierzu habe ich das 00_CUL Modul testweise um den Prefix o..... erweitert.
Diese Pakete werden anschließend an mein neues Modul CUL_OTHER (ist angehängt) weitergeleitet.
Das CUL_OTHER Modul bereitet die Daten auf und bringt die Empfangene Daten in das Format wie es das Oregon Modul erwartet.
So weit funktioniert alles.
Nun soll das CUL_OTHER Modul per "dispatch" die Daten an das Oregon Modul weiterreichen.
(Siehe CUL_OTHER Zeile 129)

Leider funktioniert dies nicht. Der Dispatch wird an das 00_CUL Modul weiter geleitet und das CUL Modul sagt anschließend Unknown code.

Wie kann ich am einfachsten diese Weiterleitung an das Oregon Modul erreichen?

Vorab schon mal vielen Dank für die Hilfe

Gruß
Björn
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: rudolfkoenig am 25 Oktober 2015, 13:42:12
Damit Dispatch funktioniert, muessen die Clients/MatchList und Match Felder in den beiden Modulen (Aufrufer/Aufgerufene) gepflegt werden.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: herrmannj am 25 Oktober 2015, 13:48:33
Hi,

geht aber auch "hacky", schau mal in das TechemHKV Modul. Da hab ich das gerade gemacht.

Im Prinzip die Clients des CUL zur Laufzeit erweitert und im Client die Matchlist gesetzt. In Deinem Fall wäre das die middleware. Von da aus könntest Du die _parse vom Oregon direkt aufrufen ohne über dispatch zu gehen.

Btw, Orgeon wird von Oregon und TRX_Weather bedient.

vg
joerg

Nebenwirkung: kein autocreate.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 13:49:04
Zitat von: rudolfkoenig am 25 Oktober 2015, 13:42:12
Damit Dispatch funktioniert, muessen die Clients/MatchList und Match Felder in den beiden Modulen (Aufrufer/Aufgerufene) gepflegt werden.
Hallo Rudi,

das habe ich soweit ich es im Forum gelesen habe auch verstanden,  aber mir fehlt ein konkretes Beispiel.
Ich stehe irgendwie auf dem Schlauch wie das du funktionierten soll.

Gruß Björn
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 13:56:10
Zitat von: herrmannj am 25 Oktober 2015, 13:48:33
Nebenwirkung: kein autocreate.
Genau das ist ja eigentlich doof, bei den Orgeon 2 Temp/Hum Sensoren würde ich mir schon ein Autocreate wünschen.

Irgendwie muss das doch einfach gehen  :-\
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: rudolfkoenig am 25 Oktober 2015, 14:01:57
Warum?

Versuch mal MatchList und Clients in deinem Modul zu fuellen.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: herrmannj am 25 Oktober 2015, 14:05:49
Naja schon. Wenn Du über dispatch gehst musst Du den Absender "fälschen". Oregon erwartet ja einen TRX als IO.

Deine Middleware müsste also gleichzeitig logisches device sein (um die Daten vom CUL zu bekommen) und als physikalisches device auftreten (um an Oregon weiterzuleiten). Sollte doch gehen. Schönder ist es - ob das einfacher ist ;-) ?

vg
joerg
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 14:08:55
Zitat von: rudolfkoenig am 25 Oktober 2015, 14:01:57
Warum?

Versuch mal MatchList und Clients in deinem Modul zu fuellen.
Geht leider nicht:
Habe jetzt im Initialize

$hash->{MatchList} = \%matchList_CUL_OTHER,
$hash->{Clients} = ":OREGON:";
---------------------------
## default regex match List for dispatching message to logical modules, can be updated during runtime because it is referenced
my %matchList_CUL_OTHER = (
     "1:OREGON"                  => "^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*",                           
);

Aber er macht es nicht.

2015.10.25 14:06:10 1: CUL_OTHER: OSV2 protocol converted to hex: (501A2D20CB201120053400) with length (88) bits

2015.10.25 14:06:10 1: converted Data to (501A2D20CB201120053400)
2015.10.25 14:06:10 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.25 14:06:10 5: Loading ./FHEM/10_UNIRoll.pm
2015.10.25 14:06:10 5: Triggering CUL1 (1 changes)
2015.10.25 14:06:10 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.25 14:06:10 3: CUL1: Unknown code 501A2D20CB201120053400, help me!


Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: Sidey am 25 Oktober 2015, 14:23:03
Also für mich sieht das so aus, also ob in der matchlist vom 00 CUL Modul keine passende Weiterleitung gefunden wird.
Deshalb geht es nicht.

Grüße Sidey
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 15:00:03
So, ich glaube jetzt habe ich es, zwar nicht so sauber aber es geht.
Ich erweitere jetzt die Clients und die MatchList vom 00_CUL dynamisch:

my $OregonClientMatch=index($hash->{Clients},"OREGON");
if ($OregonClientMatch == -1) {
    # Patch clients
    $hash->{Clients} = $hash->{Clients}.":OREGON:";
    $hash->{MatchList}{"1:OREGON"} = "^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*";
}


Jetzt habe ich nur noch ein Problem. Das 00_CUL Modul meint noch
CUL1: Unknown code 501A2D20CB201120053400, help me!

2015.10.25 14:58:19 5: OSV2 protocol detected (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAF1)
2015.10.25 14:58:19 5: CUL_OTHER: OSV2 protocol converted to hex: (501A2D20CB201120053400) with length (88) bits

2015.10.25 14:58:19 5: converted Data to (501A2D20CB201120053400)
2015.10.25 14:58:19 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.25 14:58:19 5: OREGON: decoding delay=15 hex=501A2D20CB201120053400
2015.10.25 14:58:19 5: Triggering THGR228N_cb_2 (4 changes)
2015.10.25 14:58:19 5: Notify loop for THGR228N_cb_2 temperature: 11.2
2015.10.25 14:58:19 5: Triggering CUL1 (1 changes)
2015.10.25 14:58:19 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.25 14:58:19 3: CUL1: Unknown code 501A2D20CB201120053400, help me!
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: rudolfkoenig am 25 Oktober 2015, 15:25:30
Du darfst nicht undef in deiner ParseFn zurueckliefern, sonst sucht Dispatch weiter nach Abnehmer. Ueblich ist der Name des betroffenen Endgeraetes als return-Wert, da aber die Nachricht schon von dem OREGON erfolgreich verarbeitet wurde, musst du "" zurueckliefern.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 16:04:06
Zitat von: rudolfkoenig am 25 Oktober 2015, 15:25:30
Du darfst nicht undef in deiner ParseFn zurueckliefern, sonst sucht Dispatch weiter nach Abnehmer. Ueblich ist der Name des betroffenen Endgeraetes als return-Wert, da aber die Nachricht schon von dem OREGON erfolgreich verarbeitet wurde, musst du "" zurueckliefern.

Geht leider nicht:
2015.10.25 16:01:16 5: CUL1 Dispatch now to Oregon Module.
2015.10.25 16:01:16 5: converted Data to (501A2D20CB201120053400)
2015.10.25 16:01:16 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.25 16:01:16 5: OREGON: decoding delay=0 hex=501A2D20CB201120053400
2015.10.25 16:01:16 5: Triggering THGR228N_cb_2 (4 changes)
2015.10.25 16:01:16 5: Notify loop for THGR228N_cb_2 temperature: 11.2
2015.10.25 16:01:16 5: Loading ./FHEM/10_UNIRoll.pm
2015.10.25 16:01:16 5: Triggering CUL1 (1 changes)
2015.10.25 16:01:16 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.25 16:01:16 3: CUL1: Unknown code 501A2D20CB201120053400, help me!
2015.10.25 16:01:16 5: Return ""


Das Unknown vom CUL kommt bereits bevor ich aus meinem Modul mit "" zurückkehre.


Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 16:53:00
Noch ein Problem,

wenn ich den Sensor wieder lösche funktioniert das Autocreate nicht:

2015.10.25 16:50:52 5: CUL1 Dispatch now to Oregon Module.
2015.10.25 16:50:52 5: converted Data to (501A2D20CB201120053400)
2015.10.25 16:50:52 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.25 16:50:52 5: OREGON: decoding delay=46 hex=501A2D20CB201120053400
2015.10.25 16:50:52 3: OREGON: Unknown device THGR228N_cb_2, please define it
2015.10.25 16:50:52 5: Triggering CUL1 (1 changes)
2015.10.25 16:50:52 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.25 16:50:52 3: CUL1: *********Unknown code 501A2D20CB201120053400, help me!
2015.10.25 16:50:52 5: Return ""


Irgendetwas passt da noch nicht, noch einen Tipp?
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: betateilchen am 25 Oktober 2015, 16:54:39
Auch nach einem Neustart nicht?
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 16:57:14
Zitat von: betateilchen am 25 Oktober 2015, 16:54:39
Auch nach einem Neustart nicht?
Nein, leider auch nicht.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 19:23:42
Also ich bin bis jetzt kein Stück weiter.

Mir scheint es so, dass der anschließende Undefined im Nirwana versinkt.

Hier mal der Log Auszug:
Zitat2015.10.25 19:00:37 4: CUL_Parse: CUL1 oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37
2015.10.25 19:00:37 5: CUL1 ++++++++ dispatch oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37
2015.10.25 19:00:37 5: Loading ./FHEM/14_CUL_OTHER.pm
2015.10.25 19:00:37 1: PERL WARNING: Using a hash as a reference is deprecated at ./FHEM/14_CUL_OTHER.pm line 133.
2015.10.25 19:00:37 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37) length: 44 RSSI: -46.5
2015.10.25 19:00:37 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37) match Oregon 2 length: 44
2015.10.25 19:00:37 5: CUL_OTHER decode Oregon 2 (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37)
2015.10.25 19:00:37 5: OSV2 protocol detected (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAA37)
2015.10.25 19:00:37 5: CUL_OTHER: OSV2 protocol converted to hex: (501A2D20CB201120053400) with length (88) bits
2015.10.25 19:00:37 5: CUL1 Dispatch now to Oregon Module.
2015.10.25 19:00:37 5: converted Data to (501A2D20CB201120053400)
2015.10.25 19:00:37 5: CUL1 ++++++++ dispatch 501A2D20CB201120053400
2015.10.25 19:00:37 5: Loading ./FHEM/41_OREGON.pm
2015.10.25 19:00:37 5: OREGON: decoding delay=0 hex=501A2D20CB201120053400
2015.10.25 19:00:37 3: OREGON: Unknown device THGR228N_cb_2, please define it
2015.10.25 19:00:37 5: Loading ./FHEM/10_UNIRoll.pm
2015.10.25 19:00:37 3: CUL1: Trigger now UNKNOWNCODE Unknown code 501A2D20CB201120053400, help me!
2015.10.25 19:00:37 5: Triggering CUL1 (1 changes)
2015.10.25 19:00:37 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.25 19:00:37 3: CUL1: *********Unknown code 501A2D20CB201120053400, help me!
2015.10.25 19:00:37 5: Return ""

So sollte es bei einem funktionierenden Modul aussehen:
2015.10.25 18:55:14 4: CUL_Parse: CUL1 s6380DEF470F2
2015.10.25 18:55:14 5: CUL1 ++++++++ dispatch s6380DEF470F2
2015.10.25 18:55:14 4: CUL_TCM97001 Unknown 99 (6380DEF470F2) length: 12 RSSI: -81
2015.10.25 18:55:14 2: CUL_TCM97001 Unknown EAS800 device 99, please define it
2015.10.25 18:55:14 5: Triggering global (1 changes)
2015.10.25 18:55:14 5: Notify loop for global UNDEFINED CUL_TCM97001_99 CUL_TCM97001 99
2015.10.25 18:55:14 2: autocreate: define CUL_TCM97001_99 CUL_TCM97001 99
2015.10.25 18:55:14 5: Triggering global (2 changes)
2015.10.25 18:55:14 2: autocreate: define FileLog_CUL_TCM97001_99 FileLog ./log/CUL_TCM97001_99-%Y.log CUL_TCM97001_99
2015.10.25 18:55:14 5: Triggering global (3 changes)
2015.10.25 18:55:14 2: autocreate: define SVG_CUL_TCM97001_99 SVG FileLog_CUL_TCM97001_99:temp4hum4:CURRENT
2015.10.25 18:55:14 5: Triggering global (4 changes)
2015.10.25 18:55:14 5: Triggering SVG_CUL_TCM97001_99 (1 changes)
2015.10.25 18:55:14 5: Notify loop for SVG_CUL_TCM97001_99 copyGplotFile
2015.10.25 18:55:14 5: Triggering global (5 changes)


Was kann ich denn jetzt noch probieren? (Bin echt langsam ratlos)

Anbei auch noch der Stand des jetzigen Moduls.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 25 Oktober 2015, 20:14:52
So, jetzt habe ich die fhem.pl mit Debugs vollgepflastert und habe das Problem gefunden.

Das Problem war mein match:
$hash->{MatchList}{"0:OREGON"} = "^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*";

Eigentlich bin ich davon ausgegangen, dass beim Match-Key (0:OREGON) die 0 die Reihenfolge vorgibt.
Dies mag ja auch so sein. Doch eine 0: gibt es ja bereits.

Im fhem.pl wird beim Dispatch bei if($dmsg =~ m/$h->{$m}/) { jeder Match der MatchList mit dem Code verglichen.
Genau hier in dieser Matchliste fehlte dann aber mein 0:OREGON.

Wenn ich es nun auf Z:OREGON andere funktioniert es.

@Rudi: Soll dass wirklich so dein, dass das Zeichen vor dem : nur 1x vorhanden sein darf? Ebenso darf es nicht mehr wie ein Zeichen sein, sonst geht es auch nicht.
Das ist meiner Meinung nach ja auch etwas schlecht, zumal erstens aufgepasst werden muss was bereits vergeben ist und zweitens sind nur 0-9 bzw. a-z möglich.
Sollte das nicht irgendwie verbessert werden?
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: rudolfkoenig am 26 Oktober 2015, 11:55:38
Zitat@Rudi: Soll dass wirklich so dein, dass das Zeichen vor dem : nur 1x vorhanden sein darf? Ebenso darf es nicht mehr wie ein Zeichen sein, sonst geht es auch nicht.

Beides ist sehr merkwuerdig. MatchList wird mWn nur im folgenden Code verwendet:
    my $h = $hash->{MatchList}; $h = $module->{MatchList} if(!$h);
    if(defined($h)) {
      foreach my $m (sort keys %{$h}) {
        if($dmsg =~ m/$h->{$m}/) {
          my ($order, $mname) = split(":", $m);

danach waere sowohl die Doppelbelegung, als auch mehr als ein Zeichen kein Problem.
Es wird halt nicht numerisch sortiert, aber das ist eie andere Baustelle.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 26 Oktober 2015, 20:04:15
Zitat von: rudolfkoenig am 26 Oktober 2015, 11:55:38
Beides ist sehr merkwuerdig. MatchList wird mWn nur im folgenden Code verwendet:
    my $h = $hash->{MatchList}; $h = $module->{MatchList} if(!$h);
    if(defined($h)) {
      foreach my $m (sort keys %{$h}) {
        if($dmsg =~ m/$h->{$m}/) {
          my ($order, $mname) = split(":", $m);

danach waere sowohl die Doppelbelegung, als auch mehr als ein Zeichen kein Problem.
Es wird halt nicht numerisch sortiert, aber das ist eie andere Baustelle.

So wie ich es lese ist das mit der Doppelbelgung schon ein Problem, bzw. eine Eigenheit von den Perl HASH.
Laut Doku ist das der Key und dieser muss Eindeutig sein.

Ich habe jetzt auch noch ein wenig probiert, aber ich verstehe es immer noch nicht.


Wenn ich als Match
$hash->{MatchList}{"CUL_OTHER:OREGON"} = "^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*";
eintrage geht es nicht.

Wenn ich aber
$hash->{MatchList}{"ZCOLOTHER:OREGON"} = "^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*";
eintrage geht es.

Mit scheint so als ob das Problem irgendwie mit der Reihenfolge zu tun hat. Erklären kann ich es mir aber immer noch nicht.

Hier mal der Output.

Geht nicht:
2015.10.26 19:52:55 5: CUL/RAW: /oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB

2015.10.26 19:52:55 4: CUL_Parse: CUL1 oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 5: CUL1 dispatch oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 1:USF1000 *** ^81..(04|0c)..0101a001a5ceaa00.... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 2:BS *** ^81..(04|0c)..0101a001a5cf *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 3:FS20 *** ^81..(04|0c)..0101a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 4:FHT *** ^81..(04|09|0d)..(0909a001|83098301|c409c401).. *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 5:KS300 *** ^810d04..4027a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 6:CUL_WS *** ^K..... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 7:CUL_EM *** ^E0.................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 8:HMS *** ^810e04....(1|5|9).a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: 9:CUL_FHTTK *** ^T[A-F0-9]{8} *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: A:CUL_RFR *** ^[0-9A-F]{4}U. *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: B:CUL_HOERMANN *** ^R.......... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: C:ESA2000 *** ^S................................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: D:CUL_IR *** ^I............ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: E:CUL_TX *** ^TX[A-F0-9]{10} *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: F:Revolt *** ^r......................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: G:IT *** ^i...... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: H:STACKABLE_CC *** ^\* *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: J:SOMFY *** ^Y[r|t|s]:?[A-F0-9]+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: K:CUL_TCM97001 *** ^s[A-F0-9]+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: SEARCH MATCH: key: L:CUL_OTHER *** ^o+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: ***** FOUND: L:CUL_OTHER *** ^o+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB
2015.10.26 19:52:55 0: 11111111111111111111111
2015.10.26 19:52:55 5: Loading ./FHEM/14_CUL_OTHER.pm
2015.10.26 19:52:55 0: 222222222222222222222
2015.10.26 19:52:55 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB) length: 44 RSSI: -76.5
2015.10.26 19:52:55 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB) match Oregon 2 length: 44
2015.10.26 19:52:55 5: CUL_OTHER decode Oregon 2 (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB)
2015.10.26 19:52:55 5: bitdata: 100110010110101001100101100110101010101010011010010110011010010110101010100110100110101001101010101010101001101001100110101010101010011001011010101010101010101011111011
2015.10.26 19:52:55 5: OSV2 protocol detected (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFB)
2015.10.26 19:52:55 5: CUL_OTHER: OSV2 protocol converted to hex: (501A2D20CB201120053400) with length (88) bits

2015.10.26 19:52:55 5: CUL1 Dispatch now to Oregon Module.
2015.10.26 19:52:55 5: converted Data to (501A2D20CB201120053400)
2015.10.26 19:52:55 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 1:USF1000 *** ^81..(04|0c)..0101a001a5ceaa00.... *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 2:BS *** ^81..(04|0c)..0101a001a5cf *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 3:FS20 *** ^81..(04|0c)..0101a001 *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 4:FHT *** ^81..(04|09|0d)..(0909a001|83098301|c409c401).. *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 5:KS300 *** ^810d04..4027a001 *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 6:CUL_WS *** ^K..... *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 7:CUL_EM *** ^E0.................$ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 8:HMS *** ^810e04....(1|5|9).a001 *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: 9:CUL_FHTTK *** ^T[A-F0-9]{8} *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: A:CUL_RFR *** ^[0-9A-F]{4}U. *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: B:CUL_HOERMANN *** ^R.......... *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: C:ESA2000 *** ^S................................$ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: COLOTHER:OREGON *** ^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).* *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: ***** FOUND: COLOTHER:OREGON *** ^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).* *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: 11111111111111111111111
2015.10.26 19:52:55 0: 222222222222222222222
2015.10.26 19:52:55 5: OREGON: decoding delay=0 hex=501A2D20CB201120053400
2015.10.26 19:52:55 3: OREGON: Unknown device THGR228N_cb_2, please define it
2015.10.26 19:52:55 0: SEARCH MATCH: key: D:CUL_IR *** ^I............ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: E:CUL_TX *** ^TX[A-F0-9]{10} *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: F:Revolt *** ^r......................$ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: G:IT *** ^i...... *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: H:STACKABLE_CC *** ^\* *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: ***** FOUND: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: 11111111111111111111111
2015.10.26 19:52:55 5: Loading ./FHEM/10_UNIRoll.pm
2015.10.26 19:52:55 0: 222222222222222222222
2015.10.26 19:52:55 0: SEARCH MATCH: key: J:SOMFY *** ^Y[r|t|s]:?[A-F0-9]+ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: K:CUL_TCM97001 *** ^s[A-F0-9]+ *** 501A2D20CB201120053400
2015.10.26 19:52:55 0: SEARCH MATCH: key: L:CUL_OTHER *** ^o+ *** 501A2D20CB201120053400
2015.10.26 19:52:55 5: Triggering CUL1 (1 changes)
2015.10.26 19:52:55 5: Notify loop for CUL1 UNKNOWNCODE 501A2D20CB201120053400
2015.10.26 19:52:55 3: CUL1: Unknown code 501A2D20CB201120053400, help me!



Geht:
2015.10.26 19:55:14 5: CUL/RAW: /oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD

2015.10.26 19:55:14 4: CUL_Parse: CUL1 oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 5: CUL1 dispatch oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 1:USF1000 *** ^81..(04|0c)..0101a001a5ceaa00.... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 2:BS *** ^81..(04|0c)..0101a001a5cf *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 3:FS20 *** ^81..(04|0c)..0101a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 4:FHT *** ^81..(04|09|0d)..(0909a001|83098301|c409c401).. *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 5:KS300 *** ^810d04..4027a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 6:CUL_WS *** ^K..... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 7:CUL_EM *** ^E0.................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 8:HMS *** ^810e04....(1|5|9).a001 *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: 9:CUL_FHTTK *** ^T[A-F0-9]{8} *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: A:CUL_RFR *** ^[0-9A-F]{4}U. *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: B:CUL_HOERMANN *** ^R.......... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: C:ESA2000 *** ^S................................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: D:CUL_IR *** ^I............ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: E:CUL_TX *** ^TX[A-F0-9]{10} *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: F:Revolt *** ^r......................$ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: G:IT *** ^i...... *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: H:STACKABLE_CC *** ^\* *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: J:SOMFY *** ^Y[r|t|s]:?[A-F0-9]+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: K:CUL_TCM97001 *** ^s[A-F0-9]+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: SEARCH MATCH: key: L:CUL_OTHER *** ^o+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: ***** FOUND: L:CUL_OTHER *** ^o+ *** oo2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD
2015.10.26 19:55:14 0: 11111111111111111111111
2015.10.26 19:55:14 5: Loading ./FHEM/14_CUL_OTHER.pm
2015.10.26 19:55:14 0: 222222222222222222222
2015.10.26 19:55:14 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD) length: 44 RSSI: -75.5
2015.10.26 19:55:14 5: CUL_OTHER (o2996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD) match Oregon 2 length: 44
2015.10.26 19:55:14 5: CUL_OTHER decode Oregon 2 (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD)
2015.10.26 19:55:14 5: bitdata: 100110010110101001100101100110101010101010011010010110011010010110101010100110100110101001101010101010101001101001100110101010101010011001011010101010101010101011111101
2015.10.26 19:55:14 5: OSV2 protocol detected (996A659AAA9A59A5AA9A6A6AAA9A66AAA65AAAAAFD)
2015.10.26 19:55:14 5: CUL_OTHER: OSV2 protocol converted to hex: (501A2D20CB201120053400) with length (88) bits

2015.10.26 19:55:14 5: CUL1 Dispatch now to Oregon Module.
2015.10.26 19:55:14 5: converted Data to (501A2D20CB201120053400)
2015.10.26 19:55:14 5: CUL1 dispatch 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 1:USF1000 *** ^81..(04|0c)..0101a001a5ceaa00.... *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 2:BS *** ^81..(04|0c)..0101a001a5cf *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 3:FS20 *** ^81..(04|0c)..0101a001 *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 4:FHT *** ^81..(04|09|0d)..(0909a001|83098301|c409c401).. *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 5:KS300 *** ^810d04..4027a001 *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 6:CUL_WS *** ^K..... *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 7:CUL_EM *** ^E0.................$ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 8:HMS *** ^810e04....(1|5|9).a001 *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: 9:CUL_FHTTK *** ^T[A-F0-9]{8} *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: A:CUL_RFR *** ^[0-9A-F]{4}U. *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: B:CUL_HOERMANN *** ^R.......... *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: C:ESA2000 *** ^S................................$ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: D:CUL_IR *** ^I............ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: E:CUL_TX *** ^TX[A-F0-9]{10} *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: F:Revolt *** ^r......................$ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: G:IT *** ^i...... *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: H:STACKABLE_CC *** ^\* *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: ***** FOUND: I:UNIRoll *** ^[0-9A-F]{5}(B|D|E) *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: 11111111111111111111111
2015.10.26 19:55:14 5: Loading ./FHEM/10_UNIRoll.pm
2015.10.26 19:55:14 0: 222222222222222222222
2015.10.26 19:55:14 0: SEARCH MATCH: key: J:SOMFY *** ^Y[r|t|s]:?[A-F0-9]+ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: K:CUL_TCM97001 *** ^s[A-F0-9]+ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: L:CUL_OTHER *** ^o+ *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: SEARCH MATCH: key: ZCOLOTHER:OREGON *** ^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).* *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: ***** FOUND: ZCOLOTHER:OREGON *** ^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).* *** 501A2D20CB201120053400
2015.10.26 19:55:14 0: 11111111111111111111111
2015.10.26 19:55:14 5: Loading ./FHEM/41_OREGON.pm
2015.10.26 19:55:14 0: 222222222222222222222
2015.10.26 19:55:14 5: OREGON: decoding delay=0 hex=501A2D20CB201120053400
2015.10.26 19:55:14 3: OREGON: Unknown device THGR228N_cb_2, please define it
2015.10.26 19:55:14 5: Triggering global (1 changes)
2015.10.26 19:55:14 5: Notify loop for global UNDEFINED THGR228N_cb_2 OREGON THGR228N_cb_2
2015.10.26 19:55:14 2: autocreate: define THGR228N_cb_2 OREGON THGR228N_cb_2
2015.10.26 19:55:14 5: Triggering global (2 changes)
2015.10.26 19:55:14 2: autocreate: define FileLog_THGR228N_cb_2 FileLog ./log/THGR228N_cb_2-%Y.log THGR228N_cb_2
2015.10.26 19:55:14 5: Triggering global (3 changes)
2015.10.26 19:55:14 2: autocreate: define SVG_THGR228N_cb_2 SVG FileLog_THGR228N_cb_2:temp4hum4:CURRENT
2015.10.26 19:55:14 5: Triggering global (4 changes)
2015.10.26 19:55:14 5: Triggering SVG_THGR228N_cb_2 (1 changes)
2015.10.26 19:55:14 5: Notify loop for SVG_THGR228N_cb_2 copyGplotFile
2015.10.26 19:55:14 5: Triggering global (5 changes)


Hier noch der abgeänderte fhem.pl code mit den Debug ausgaben:
if(!int(@found) || !defined($found[0])) {
    my $h = $hash->{MatchList}; $h = $module->{MatchList} if(!$h);
    if(defined($h)) {
      foreach my $m (sort keys %{$h}) {
        Log 0, "SEARCH MATCH: key: $m *** $h->{$m} *** $dmsg";
        if($dmsg =~ m/$h->{$m}/) {
          my ($order, $mname) = split(":", $m);
            Log 0, "***** FOUND: $m *** $h->{$m} *** $dmsg";
          if($attr{global}{autoload_undefined_devices}) {
            Log 0,  "11111111111111111111111";
            my $newm = LoadModule($mname);
            $mname = $newm if($newm ne "UNDEFINED");
            if($modules{$mname} && $modules{$mname}{ParseFn}) {
              Log 0,  "222222222222222222222";
              no strict "refs"; $readingsUpdateDelayTrigger = 1;
              @found = &{$modules{$mname}{ParseFn}}($hash,$dmsg);
              use strict "refs"; $readingsUpdateDelayTrigger = 0;
            } else {
              Log 0, "ERROR: Cannot autoload $mname";
            }

          } else {
            Log3 $name, 3, "$name: Unknown $mname device detected, " .
                        "define one to get detailed information.";
            return undef;

          }
        }
      }
    }
    if(!int(@found) || !defined($found[0])) {
      DoTrigger($name, "UNKNOWNCODE $dmsg");
      Log3 $name, 3, "$name: Unknown code $dmsg, help me!";
      return undef;
    }
  }


Hat jemand eine Idee wo hier der Bug ist?
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: rudolfkoenig am 26 Oktober 2015, 20:21:55
ZitatLaut Doku ist das der Key und dieser muss Eindeutig sein.
Nein, key ist sowas wie "1:CUL_HM", und das klappt, sieht man auch in deinem debug-Output.

Sonst hast du einen Bug ausgegraben: falls sich mehrere, per MatchList gesuchte Module sich fuer ein String zustaendig fuehlen, gewinnt nicht der Erste sondern der Letzte. Habs gefixt und eingecheckt.
Titel: Antw:Dispatch an weiteres Modul.
Beitrag von: bjoernh am 26 Oktober 2015, 20:28:45
Zitat von: rudolfkoenig am 26 Oktober 2015, 20:21:55
Nein, key ist sowas wie "1:CUL_HM", und das klappt, sieht man auch in deinem debug-Output.

Sonst hast du einen Bug ausgegraben: falls sich mehrere, per MatchList gesuchte Module sich fuer ein String zustaendig fuehlen, gewinnt nicht der Erste sondern der Letzte. Habs gefixt und eingecheckt.

Ich hab den Fehler gefunden!

Das Problem liegt in der fhem.pl

Die Schleife in Zeile 3231 muss beim ersten Match beendet werden.
Ansonsten überschreibt der zweite Match des Uniroll Moduls den Match und es kommt zu dem Fehlverhalten.

Hier der geänderte Code:
foreach my $m (sort keys %{$h}) {
        if($dmsg =~ m/$h->{$m}/) {
          my ($order, $mname) = split(":", $m);

          if($attr{global}{autoload_undefined_devices}) {
            my $newm = LoadModule($mname);
            $mname = $newm if($newm ne "UNDEFINED");
            if($modules{$mname} && $modules{$mname}{ParseFn}) {
              no strict "refs"; $readingsUpdateDelayTrigger = 1;
              @found = &{$modules{$mname}{ParseFn}}($hash,$dmsg);
              use strict "refs"; $readingsUpdateDelayTrigger = 0;
              [b]last;[/b]
            } else {
              Log 0, "ERROR: Cannot autoload $mname";
            }

          } else {
            Log3 $name, 3, "$name: Unknown $mname device detected, " .
                        "define one to get detailed information.";
            return undef;

          }
        }


Das Fette "last;" ist die Lösung.
Sobald der Match erfolgreich war sollte die foreach Schleife beendet werden.

Sehe gerade, dass Du geschrieben hast, dass es gefixt ist, ich werde den Thread dann schließen.


Ich habe es gerade auch nochmals verifiziert, es kann jetzt auch ein bereits vorhandener Key verwendet werden.