Autor Thema: fehlende $hash->{'.clientArray'} Aktualisierung bei define von Clients  (Gelesen 2069 mal)

Offline noansi

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1370
Hallo Rudolf,

mir ist aufgefallen, dass bei autocreate oder manuellem define von CUL Clients das {'.clientArray'} nicht bei allen das Clientmodul unterstützenden IOs aktualisiert wird, wenn das Clientmodul geladen werden muss.

Nur das IO, welches die message zuerst empfangen hat und den autocreate des Clients auslöst, bekommt ggf. via IODev assign eine Aktualisierung
oder bei manuellem define des Clients das IO, welches ggf. via IODev assign gewählt wird.

Damit werden in Multireceiverkonfiguration entsprechende Client Empfangsdaten nur bei Empfang durch dieses eine IO richtig verarbeitet. Die anderen jammern dann "grundlos" z.B.
2022.05.06 21:44:04.270 3: PIG2_WS433: Unknown code R01143C4150, RSSI -47, help me!

Erst mit fhem Neustart haben dann alle IOs ein passendes {'.clientArray'}.

Mit dem angehängten kleinen patch wird in CommandDefine für einen Neuaufbau des {'.clientArray'} für alle das Clientmodul aktuell unterstüzende IOs gesorgt.

Gruß, Ansgar.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 25831
Habs eingebaut, allerdings mit einigen Aenderungen.
Ich habe es noch nicht begriffen, wofuer qr// notwendig ist. Kannst Du es mir bitte zeigen?

Offline noansi

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1370
Hallo Rudolf,

Zitat
Ich habe es noch nicht begriffen, wofuer qr// notwendig ist. Kannst Du es mir bitte zeigen?
in Zeile 5227 ist es schon mal verwendet:
    my @cmRe = map { qr/^$_$/ } @mRe;  # 125292, precompile, speedup 5x for CUL
also precompile.

Ist aber im patch nicht nötig, da die Re's nur ein mal in der foreach Schleife gebraucht werden.
Edit: aber muss es dann nicht
if($m =~ m/^$cmRe$/) {lauten?

Gruß und Danke, Ansgar.
« Letzte Änderung: 08 Mai 2022, 14:20:00 von noansi »

Offline noansi

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1370
Hallo Rudolf,

ich vermute mal, Du hast meinen Edit im vorherigen Beitrag nicht mehr mitbekommen.

Ohne das großzügig entferne qr// sollte es statt
if($m =~ $cmRe) {
wohl lauten:
if($m =~ /^$cmRe$/) {
Sonst ist es vermutlich ungewollt mehrdeutig, habe aber noch keinen brauchbare Semantikbeschreibung für Deine Variante gefunden, die das bestätigt oder widerlegt.

Gruß, Ansgar.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 25831
Stimmt, danke fuer den Hinweis habs geaendert.

Offline noansi

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1370
Danke!