wie programmieren, damit Sortierung "erst IO, dann Devices" nicht notwendig?

Begonnen von Ralf9, 24 März 2017, 21:46:46

Vorheriges Thema - Nächstes Thema

Ralf9

Hallo,

hier ist aufgefallen, daß es bei einigen Modulen Probleme mit dem IODev geben kann, wenn in der fhem.cfg die IODev nicht vor den nutzendenden Devices stehen.
https://forum.fhem.de/index.php/topic,69558.msg610746.html#msg610746

Sehe ich das richtig, daß dies damit zusammen hängt, daß bei einigen Modulen wie z.B. das 10_SOMFY.pm oder 10_IT.pm  am Ende der sub xxx_Define  beim AssignIoPort($hash) keine Abfrage erfolgt ob fhem sich noch in der Initialisierungsphase befindet.

Gibt es Empfehlungen wie die Abfrage und ein ggf verzögern des AssignIoPort($hash) erfolgen kann?

In etwa so, durch Aufruf dieser Routine am Ende von Define?
sub xxx_ioInit();
  if ($init_done) {
    AssignIoPort($hash);
  } else {
    InternalTimer(gettimeofday() + 1, xxx_ioInit, $hash, 0);
  }
}


Gruß Ralf

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

justme1968

nicht per timer sondern per NotifyFn und reagieren auf global:INITIALIZED und global:REREADCFG.

in der DefFn sollte man auch $hash->{NOTIFYDEV} = "global"; setzen wenn man die NotifyFn sonst nicht verwendet. ansonsten natürlich passend.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Ralf9

das mit dem NotifyFn hört sich recht kompliziert und aufwändig an.
Im NotifyFn müssten dann alle im Modul definierten devices durchlaufen werden und das AssignIoPort($hash)  aufgerufen werden.
Die Routine im NotifyFn darf dann aber erst aufgeführt werden, wenn von allen devices des Moduls das define ausgeführt wurde.

Gruß Ralf
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

justme1968

die NotifyFn für jedes deiner device instanzen aufgerufen. d.h. du musst nichts selber durchlaufen.

die NotifyFn wird für jedes event das zu NOTIFYDEV passt aufgerufen. in deinem fall nur für global:INITIALIZED und global:REREADCFG. d.h. genau ein mal nach dem alle devices definiert sind.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

@Ralf: wg. IODev wuerde ich fhem.cfg nicht umsortieren, da reicht das setzen vom IODev Attribut. Um genau zu sein, es reichte bis gerade eben nicht, aber das habe ich jetzt gefixt.

Bei einer fehlenden IODev wird eine Fehlermeldung generiert, und das kommt vor dem Ausloesen von global:INITIALIZED oder dem InternalTimer Aufruf, d.h. auch wenn einer dieser Methoden IODev setzen wuerde, gibts die Fehlermeldung trotzdem.

@andre: ich tendiere inzwischen dazu fuer solche Faelle InternalTimer(1, sub) zu verwenden statt notify auf global:INITIALIZED.

Falls ich etwas uebersehen habe, meldet euch bitte.

Ralf9

Zitat von: rudolfkoenig am 25 März 2017, 15:25:09
@Ralf: wg. IODev wuerde ich fhem.cfg nicht umsortieren, da reicht das setzen vom IODev Attribut. Um genau zu sein, es reichte bis gerade eben nicht, aber das habe ich jetzt gefixt.

Mir ging es nicht um ein fehlendes IODev Attribut bei einem Device wie z.B. IT oder SOMFY, aber wenn da zukünfig eine Fehlermeldung kommt, daß das IODev Attribut fehlt, ist dies dafür eine saubere Lösung.

Mir geht es um den Fall, daß in der  fhem.cfg die IODev nicht vor den nutzenden Devices stehen.
z.B.
define cul ...
define IT_F000FF000F IT F000FF000F FF F0
attr IT_F000FF000F IODev sduino
...
...
define sduino ..


Da muß seither bei einem device Modul in der sub xxx_Define  ggf das AssignIoPort($hash) verzögert werden falls sich fhem noch in der Initialisierungsphase befindet.
Ist durch Deinen fix diese Verzögerung zukünftig nicht mehr notwendig?

Gruß Ralf
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

rudolfkoenig

ZitatMir geht es um den Fall, daß in der  fhem.cfg die IODev nicht vor den nutzenden Devices stehen.
Erstens sollte das die Ausnahme sein.
Zweitens soll der Benutzer in diesem Fall IODev explizit setzen und nicht das IT oder SOMFY Modul irgendetwas unternehmen. Es kann ja auch sein, dass es gar kein IODev gibt.