[fixed] Dispatch-Funktion bei Signalduino u. IT V3 mit freezes

Begonnen von KölnSolar, 08 Januar 2022, 21:54:58

Vorheriges Thema - Nächstes Thema

Ralf9

ZitatLogisches Modul
  $hash->{Match} = { "1:DLNAController"      => "^(RenderingControl|AVT|Speak|Sess)",
};
Das passt so nicht, da darf nur die regex stehen
  $hash->{Match} =  "^(RenderingControl|AVT|Speak|Sess)";[/quote]
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

KölnSolar

#76
Supi, Danke. Und so schnell. Spitze.

Vorher funktionierte es aber so.

Ich ändere es und gebe über ein Edit dieses Posts Erfolgsmeldung....

Edit: Yes, das war es. Danke.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Sidey

Der Aufbau der Variable {Match} im logischen Modul ist falsch.

Dort muss entweder ein String hinterlegt werden, welcher zur Laufzeit als Regex compiliert werden kann oder Du hinterlegst gleich einen Typ Regex, der dann nur beim Laden des Moduls compiliert werden muss

Beispiel siehe hier:

https://github.com/RFD-FHEM/RFFHEM/commit/93392febf8a97e5d997df9f22290b0980179fc00#diff-3ad745e973be1e3a19b9bb7b64bee7059d104fd0ed9e3a0acc56c058b6377600

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

rudolfkoenig

ZitatVorher funktionierte es aber so.
Klar, aber sinnlos ineffizient. Pro IODev Dispatch-Aufruf wurde:
- wg falschen Match-Regexp das logische Modul nicht gefunden
- ueber die MatchList des IOModuls das logische Modul nochmal gesucht
- das logische Modul nochmal "geladen" (auch wenn das eigentliche Perl-Laden nicht mehr stattfand)
- alle NotifyFn-Zuordnungen neu berechnet (bei vielen Instanzen sehr teuer, so haben wir den Bug gefunden)

Das gibts seit dem Fix nicht mehr: wenn ein geladenes Modul per eigenen Match sich nicht zustaendig fuehlt, wird der oben beschriebene Rest gespart.

der-Lolo

Hallo Zusammen,
ich bin durch die Nutzung des 36_KVPUDP.pm und 36_Keyvalueprotocol.pm vermutlich über das gleiche Problem gestolpert.
Ich habe in dem entsprechendem Thread vom Lacross Modul schon meldung gemacht.

https://forum.fhem.de/index.php/topic,125603.msg1207114.html#msg1207114

Ich hoffe es ist das gleiche problem - und ich hoffe HCS kann auch für sein Keyvalueprotocoll.pm eine Lösung anbieten.

2022-02-09 21:17:48 KVPUDP UDPServer UNKNOWNCODE OK VALUES ESP GardenDoor state=UDP-Client angemeldet,T=X,D=X
2022-02-09 21:18:37 KVPUDP UDPServer UNKNOWNCODE OK VALUES ESP GardenDoor state=UDP-Client angemeldet,T=X,D=X
2022-02-09 21:18:40 KVPUDP UDPServer UNKNOWNCODE OK VALUES ESP Toniebox State=UDP-Client TonieBox angemeldet,P=X,V=X
2022-02-09 21:19:51 KVPUDP UDPServer UNKNOWNCODE OK VALUES ESP MainDoor state=UDP-Client MainDoor angemeldet,T=X,D=X


Sorry das es so lange gedauert hat den Fehler zu finden, ich habe das Familiäre gejammer über nicht funktionierende Türöffner und mp3-player wohl zu lange ignoriert.

Ralf9

FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

der-Lolo

Gerne.

Internals:
   FD         14
   FUUID      5c4470fe-f33f-68f5-5258-307c1e8892fe5246
   MSGCNT     792
   NAME       UDPServer
   NR         119
   RAWMSG     OK VALUES ESP MainDoor state=alive
   STATE      Opened
   TIME       2022-02-10 00:14:37
   TYPE       KVPUDP
   MatchList:
     1:KeyValueProtocol ^OK\sVALUES\s
   PEERS:
     192.168.1.149:
       IP         192.168.1.149
       MSGCNT     3
       RAWMSG     OK VALUES ESP Toniebox State=UDP-Client TonieBox angemeldet,P=X,V=X
       TIME       2022-02-09 21:18:40
     192.168.1.153:
       IP         192.168.1.153
       MSGCNT     16
       RAWMSG     OK VALUES ESP GardenDoor state=UDP-Client angemeldet,T=X,D=X
       TIME       2022-02-09 21:18:37
     192.168.1.172:
       IP         192.168.1.172
       MSGCNT     773
       RAWMSG     OK VALUES ESP MainDoor state=alive
       TIME       2022-02-10 00:14:37
Attributes:
   DbLogExclude .*
   group      Server
   room       99-Controller
   verbose    2

Ralf9

Da passt was nicht beim 36_KVPUDP.pm Modul, bei Internals fehlt der Eintrag "Clients :KeyValueProtocol:"
und nach dem ersten Dispatch muß es einen Eintrag ".clientArray: KeyValueProtocol" geben
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

der-Lolo

Ok - dann sollte wohl

# $Id: 00_KVPUDP.pm 7911 2015-12-10 21:11:31Z habeIchVergessen $
################################################################
#
#  Copyright notice
#
#  (c) 2014 Copyright: Dr. Boris Neubert


Dr. Boris Neubert dabei schauen - eigenartig das im Header die rede von 00_KVPUDP ist, das Modul selbst aber als 36_KVPUDP.pm abgelegt ist.

Ich verstehe ja nochnichtmal was mit Dispatch überhaupt gemeint ist.

Kann aber erkennen das da was auskommentiert ist.

  $hash->{TCPDev}= $socket;
  $hash->{FD} = $socket->fileno();
#  $hash->{Clients} = ":KeyValueProtocol";
  $hash->{MatchList} = \%matchlist;


Grundsätzlich verstehe ich aber nicht was das Modul überhaupt macht. Ich weiß das es dazu nötig ist das ich mit dem Keyvalueprotocol UDP nachrichten senden und empfangen kann. Genau die funktion ist nicht mehr gegeben. Oder sagen wir mal durch das "UNKNOWN" gestört, meine weiterverarbeitung in FHEM spricht nicht mehr an.


rudolfkoenig

ZitatIch verstehe ja nochnichtmal was mit Dispatch überhaupt gemeint ist.
Mit der FHEM Framework-Funktion Dispatch() bietet ein IO- bzw. physisches Modul die empfangenen Nachrichten den logischen Modulen an.

Fuer die Zuordnung physisch <-> logisch gibt es zwei Mechanismen.
- fuer bereits geladene logische Module: $io->{Clients} enthaelt die Liste der logischen Modulnamen, und $client->{Match} enthaelt den Regexp fuer die akzeptierten Nachrichten. Dieser Mechanismus ist "verpflichtend"
- optional, wenn man autocreate des logischen Moduls haben will: $io->{MatchList} enthaelt eine Liste mit "<reihenfolge>:<ClientModulname>:<NachrichtenRegexp>", also de-fakto die vorherigen Informationen.

Wegen dem in dieser Diskussion erwaehnten Bug wurde MatchList auch fuer bereits geladene Module abgearbeitet, was in bestimmten Konfigurationen zu laengeres Blockieren (aka freeze) fuehrte.
Seit dem Fix muessen aber die oben erwaehnten Variablen sowohl vorhanden, wie auch richtig befuellt sein.

Bei 36_KVPUDP.pm ist $io->{Clients} nicht befuellt, bzw. der Eintrag ist auskommentiert.
$io->{MatchList} ist auch auskommentiert, sie wird aber spaeter dynamisch befuellt. Deswegen hat das Modul bis zum Fix funktioniert.

der-Lolo

#85
Ok Rudi, Danke für die ausführliche erklärung - ich glaube teile davon habe ich verstanden ;)

Wie stuppsen wir nun Dr. Boris Neubert darauf sich das mal anzuschauen und zu korrigieren?

Ich hab Boris mal eine PM geschrieben und hierher verwiesen...


Ralf9

Das 36_KVPUDP.pm ist von habeIchVergessen, es gibt davon eine neuere Version
# $Id: 36_KVPUDP.pm 0 2017-11-00 00:00:00Z habeIchVergessen $
https://forum.fhem.de/index.php/topic,45545.msg889384.html#msg889384
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

der-Lolo

und die löst das Problem..? Warum liegt die nicht im update bereit?

Ralf9

Die 36_KVPUDP.pm ist nicht im SVN
https://svn.fhem.de/trac/search?q=KVPUDP

Evtl muss beim $hash->{Clients} Eintrag noch ein":" hinten dran
#$hash->{Clients} = ":KeyValueProtocol:";
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

der-Lolo

Es läuft auch so mit der neuen Datei...
Tausend Dank - hätte nicht gedacht das irgendwo im Forum eine neuere Version rumfliegt.