FHEM Forum

FHEM => Sonstiges => Thema gestartet von: mwllgr am 18 April 2019, 16:51:58

Titel: Modulentwicklung: Nach Reload wird _Attr() nicht ausgeführt
Beitrag von: mwllgr am 18 April 2019, 16:51:58
Hallo,

bei meinem Modul (siehe hier (https://github.com/Zadolux/fhem-waterkotte-resuemat-cd4/blob/master/FHEM/98_WKRCD4.pm)) wird die _Attr()-Funktion nach einem Reload des Moduls nicht ausgeführt.
Heißt, wenn enableAdvancedMode auf 1 ist, sind nach einem reload alle erweiterten Sets nicht mehr vorhanden. Erst mit erneutem ausführen von "attr .. enableAdvancedMode 1" sind sie wieder da.

Hat da jemand einen Tipp für mich?
Danke!
Titel: Antw:Modulentwicklung: Nach Reload wird _Attr() nicht ausgeführt
Beitrag von: rudolfkoenig am 18 April 2019, 17:22:27
Zitatbei meinem Modul (siehe hier (https://github.com/Zadolux/fhem-waterkotte-resuemat-cd4/blob/master/FHEM/98_WKRCD4.pm)) wird die _Attr()-Funktion nach einem Reload des Moduls nicht ausgeführt.
Das wird bei anderen Modulen auch nicht.
Ich empfehle Modul spezifischen Daten in $modules{<ModulName>}{defptr}{...} oder $modules{<ModulName>}{ldata}{...} zu speichern, diese Werte werden beim reload gerettet und nach ausfuehren von Initialize restauriert.
Titel: Antw:Modulentwicklung: Nach Reload wird _Attr() nicht ausgeführt
Beitrag von: justme1968 am 18 April 2019, 18:57:55
reload an sich ändert aber doch nichts an der bestehenden und gerade laufenden konfiguration. gesetzte attribute gehen nicht verloren.

der einzige code der ausgeführt wird ist die InitializeFn.

verfolge in deinem code mal ganz genau was passiert. ich tippe eher auf einen nicht beabsichtigten seiteneffekt. ich vermute mit einer etwas geänderten logik kann man dein problem umgehen.
Titel: Antw:Modulentwicklung: Nach Reload wird _Attr() nicht ausgeführt
Beitrag von: justme1968 am 19 April 2019, 13:01:44
hab mir gerade deinen code angeschaut.

das problem sind die globalen variablen. die werden beim reload überschrieben. in deinem fall vor allem das %WKRCD4_sets.

ich würde solche variablen alle in den device hash stecken und beim define initialisieren (falls noch nicht vorhanden -> wegen modify) dann hat ein reload keinen einfluss mehr.

das hat dann auch noch den netten nebeneffekt das man mehrere instanzen mit unterschiedlicher enableAdvancedMode einstellung haben kann. auch wenn das bei deinem modul keine wahrscheinliche konfiguration ist.
Titel: Antw:Modulentwicklung: Nach Reload wird _Attr() nicht ausgeführt
Beitrag von: mwllgr am 19 April 2019, 18:37:39
Super - schaue mir das an.
Danke an alle!