73_km200.pm neu bringt FHEM zum Absturz

Begonnen von Roderich, 17 November 2022, 12:36:31

Vorheriges Thema - Nächstes Thema

Sailor

Zitat von: Beta-User am 18 November 2022, 13:38:53
Hmm, dann würde ich mal annehmen, dass das eine Folge aus Zeile 299 ist.

Sieht für mich nach einem Webfehler aus, irgendwelche Funktionen zur define-Time aufzurufen, die "hart" irgendwelche Reaktionen von einer Gegenstelle erwarten. Dto. übrigens auch für (indirekte) trigger-Kommandos wie readingsSingleUpdate() (#284). Dadurch werden uU. plötzlich alle möglichen Eventhandler wach und reagieren ihrerseits, obwohl die FHEM-Initialisierung noch nicht durch ist. Dann hat man Reihenfolgediskussionen zur Frage, wo was in der cfg steht (so man eine als File hat (!)), etc. pp..
Sollte man bereinigen!

OK, fürs Erste lass ich also die eine forward-Declaration mal drin.
Zumindest unterdrückt sie damit die Warning.

Dann lasse ich mir mal einfallen, wie ich die ganze #283 bis #325 in eine Subfunktion packe, die erst nach $init_done=true ausgeloest wird.

Gruß
    Sailor
******************************
Man wird immer besser...

Beta-User

Zitat von: Sailor am 18 November 2022, 16:45:27
OK, fürs Erste lass ich also die eine forward-Declaration mal drin.
Zumindest unterdrückt sie damit die Warning.
Warum ein Plaster kleben, wenn du gleich operieren willst? Besser eine sichtbare Wunde lassen, dann vergißt du es auch nicht...

Zitat
Dann lasse ich mir mal einfallen, wie ich die ganze #283 bis #325 in eine Subfunktion packe, die erst nach $init_done=true ausgeloest wird.
Schau dir mal den Code von TvHeadend (reloaded) an. Ist zwar gepackagt, aber der Gedanke ist relativ einfach. Am Ende von "DefFn()" steht:
    return $init_done ? firstInit($hash) : InternalTimer(gettimeofday()+10, \&firstInit, $hash );

Mit sowas wird man dann auch das Problem los, dass die credentials unbedingt in das DEF reingeknödelt sein müssen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Sailor

Hallo Beta-User

Zitat von: Beta-User am 18 November 2022, 16:50:38
    return $init_done ? firstInit($hash) : InternalTimer(gettimeofday()+10, \&firstInit, $hash );
Mit sowas wird man dann auch das Problem los, dass die credentials unbedingt in das DEF reingeknödelt sein müssen...

Habe den Code mal eingebaut.

Scheint soweit zu funktionieren.

Ich verstehe allerdings nicht ganz das "?" - Wenn die globale Variable $init_done = true, dann rufe firstInit auf ansonsten rufe firstInit erst nach in 10 s auf.

Was passiert wenn in 10s immer noch nicht $init_done = true?

Gruß
    Sailor
******************************
Man wird immer besser...

rudolfkoenig

ZitatWas passiert wenn in 10s immer noch nicht $init_done = true?
Die InternalTimer Eintraege werden erst abgearbeitet, wenn $init_done = 1 ist.
Daher reicht auch InternalTimer(0, \&firstInit, $hash).

Beta-User

Ergänzend sicherheitshalber vielleicht noch eine Anmerkung zur Benennung: Das sollte in einem nicht "verpackten" Modul dann modulspezifisch benannt werden - und wenn wir schon beim Thema namespace sind: Da gibt es ganz zu Beginn ein paar Konstanten-Deklarationen, die mir im main-namespace eigentlich zu generisch wären...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Sailor

Moin zusammen


Zitat von: Beta-User am 18 November 2022, 18:47:08
Ergänzend sicherheitshalber vielleicht noch eine Anmerkung zur Benennung: Das sollte in einem nicht "verpackten" Modul dann modulspezifisch benannt werden

Selbstverständlich habe ich das von Anfang an "km200_FirstInit($)" genannt.  ;)

Zitat von: Beta-User am 18 November 2022, 18:47:08
und wenn wir schon beim Thema namespace sind: Da gibt es ganz zu Beginn ein paar Konstanten-Deklarationen, die mir im main-namespace eigentlich zu generisch wären...

Du meinst die Definition im km200 - Modul

use constant false => 0;
use constant true  => 1;


würde das für ganz fhem gleich mit definieren?

Gruß
    Sailor
******************************
Man wird immer besser...

Beta-User

Zitat von: Sailor am 18 November 2022, 19:03:50
Du meinst die Definition im km200 - Modul

use constant false => 0;
use constant true  => 1;


würde das für ganz fhem gleich mit definieren?
Alles, was du an der Stelle reincodest, findet im lexical scope von main statt. Obwohl ich diese Art der Deklaration bisher nirgends gesehen habe, gehe ich davon aus, dass das ggf. auch Auswirkungen auf andere Module und/oder fhem.pl haben _kann_.

Solcher Art "Ungenauigkeiten" ist der Hauptgrund, warum ich zwischenzeitlich alles in's package-Format ziehe: Man ist einfach auch davor gefeit, dass einem irgend einer unbedacht was ändert, ohne dass man es merkt, und man kann selbst generische Namen nutzen ;) . Der Rahmen von dem hier verlinkten TvHeadend kann für alle möglichen anderen Module einfach so übernommen werden...

Da wir grade bei unschönen Dingen sind: Dein Modul ist das (von der Byte-Zahl her) größte im gesamten FHEM-Verzeichnis. Das liegt vorrangig daran, dass vor kurzem die gesamten Fehlercodes in der DE-Übersetzung ins Modul übernommen wurden. Vielleicht magst du überlegen, ob es nicht sinnvoll wäre, das in eine gesonderte Datei auszulagern? Dann kann das auch jemand nach englisch, ... übersetzen und ggf. relativ einfach dann für sich einbinden.

Wie immer: Just my2ct beim schnellen Drüberfliegen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files