[gelöst] global:INITIALIZED zu früh seit Update heute?

Begonnen von DeeSPe, 21 April 2017, 11:22:48

Vorheriges Thema - Nächstes Thema

DeeSPe

In meinem HOMEMODE Modul startet das Update der Internals erst nach "global:INITIALIZED" damit ich sicher gehen kann dass bereits alle von HOMEMODE zu überwachenden Geräte geladen wurden.
Seit dem heutigen FHEM Update kommt aber genau dieses Event zu früh!
Ich habe mal eine Log Ausgabe bei "global:INITIALIZED" mit eingebaut.
Hier mal der Log Mitschnitt beim Start:
2017.04.21 10:27:48 0: Server shutdown
2017.04.21 10:27:50 3: telnetPort: port 7072 opened
2017.04.21 10:27:50 3: WEB: port 8083 opened
2017.04.21 10:27:50 2: eventTypes: loaded 1272 events from ./log/eventTypes.txt
2017.04.21 10:27:50 3: Opening tvll device 127.0.0.1:19444
2017.04.21 10:27:50 3: DbLog logdb: Creating Push-Handle to database mysql:database=fhem;host=localhost;port=3306 with user fhemuser
2017.04.21 10:27:50 3: DbLog logdb: Push-Handle to db mysql:database=fhem;host=localhost;port=3306 created
2017.04.21 10:27:50 3: eq3: Defined with URL http://www.eq-3.de/service/downloads.html and interval 86400
2017.04.21 10:27:50 3: eq3: added hint :text,reading,internal,expression,delete to attr readingMaxAgeReplacementMode in userattr list
2017.04.21 10:27:50 3: TABLETUI: new ext defined infix:ftui/: dir:./www/tablet/:
2017.04.21 10:27:50 3: Registering HTTPSRV TABLETUI for URL /ftui   and assigned link ftui/ ...
Use of uninitialized value in string eq at fhem.pl line 2837.
2017.04.21 10:27:50 3: HOMEMODE_updateInternals
2017.04.21 10:27:50 2: Keine verfügbaren ROOMMATE/GUEST im RESIDENTS Gerät rgr_Residents
2017.04.21 10:27:50 2: SecurityCheck:  WEB has no associated allowed device with basicAuth. telnetPort has no associated allowed device with password/globalpassword.  Restart FHEM for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2017.04.21 10:27:50 0: Featurelevel: 5.8
2017.04.21 10:27:50 0: Server started with 78 defined entities (fhem.pl:14046/2017-04-20 perl:5.020002 os:linux user:fhem pid:1921)


HOMEMODE_updateInternals wird nun also bereits aufgerufen bevor FHEM komplett initialisiert ist.  :-\

Wollte das Modul eigentlich heute Abend in SVN einchecken, aber so wird das nix... ???

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

Und woran sieht man, dass es zu frueh ist?
Kannst du es bitte mit "attr global verbose 5" und Kommentaren belegen? So in der Art: schau mal, dieses Befehl wird hier noch aus fhem.cfg/fhem.state gelesen, nachdem meine Routine mit "global:INITIALIZED" aufgerufen wurde?


DeeSPe

#2
2017.04.21 10:27:50 3: HOMEMODE_updateInternals
2017.04.21 10:27:50 2: Keine verfügbaren ROOMMATE/GUEST im RESIDENTS Gerät rgr_Residents


Als Erstes werden die ROOMMATE/GUEST Devices von HOMEMODE "eingelesen".
Diese sind aber scheinbar noch nicht definiert wie die zweite Logzeile anzeigt.
Es werden leider gar keine Devices mehr von HOMEMODE gefunden, da HOMEMODE nach allen Devices in der cfg steht.

Verbose per FHEMWEB auf 5 setzen geht nicht! Es kommt die Fehlermeldung aus dem angehängten Screenshot.
Per "attr global verbose 5" ging es nun.

Das Log passt hier nicht komplett rein. Habe es nun als txt angehangen.

Bis heute morgen vor dem Update ging das noch einwandfrei.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

ZitatVerbose per FHEMWEB auf 5 setzen geht nicht!
Bei mir schon, hat vermutlich mit dem vorhin gefixten Bug was zu tun.

ZitatDiese sind aber scheinbar noch nicht definiert wie die zweite Logzeile anzeigt.
Scheinbar ist mir nicht ausreichend. In deinem Log kommt nach der Fehlermeldung:
Zitat2017.04.21 11:46:49 3: HOMEMODE_updateInternals
2017.04.21 11:46:49 2: Keine verfügbaren ROOMMATE/GUEST im RESIDENTS Gerät rgr_Residents
2017.04.21 11:46:49 5: Triggering n_INITIALIZED
2017.04.21 11:46:49 4: n_INITIALIZED exec set d_init on
2017.04.21 11:46:49 5: Cmd: >set d_init on<
2017.04.21 11:46:49 4: dummy set d_init on
2017.04.21 11:46:49 5: Starting notify loop for d_init, 1 event(s), first is on
2017.04.21 11:46:49 5: ABFALL_Notify(Abfall) - Device: d_init
2017.04.21 11:46:49 5: End notify loop for d_init
2017.04.21 11:46:49 5: End notify loop for global
2017.04.21 11:46:49 2: SecurityCheck:  WEB has no associated allowed device with basicAuth. telnetPort has no associated allowed device with password/globalpassword.  Restart FHEM for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2017.04.21 11:46:49 0: Featurelevel: 5.8
2017.04.21 11:46:49 0: Server started with 78 defined entities (fhem.pl:14046/2017-04-20 perl:5.020002 os:linux user:fhem pid:2070)
Ich sehe keine weiteren Definitionen / Attribute / etc.

DeeSPe

Wie es zusammenhängt ist mir bisher auch noch ein Rätsel.

Sollte das INITIALIZED Event nicht aber nach "Server started with 78 defined entities" kommen?

Wieso ging es bis heute früh und ohne Änderung an meinem Modul auf einmal nicht mehr?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Dachte gerade ich lasse mal sicherheitshalber ein "update force" drüber laufen, aber das funktioniert nicht.
Die Seite rödelt ewig um dann in "weiß" stehen zu bleiben.

Irgendwas ist doch hier im "Brötchen"...

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig


DeeSPe

Habe nun das Log beobachtet!
FHEM blockiert komplett während "update force" und zeigt auch keinen Event-Monitor/Log an wie bei "update".
"update force" ist aber durchgelaufen, trotz weißer Seite am Ende.
Leider trotzdem selbes Verhalten.

INITIALIZED ruft HOMEMODE_updateInternals auf.
sub HOMEMODE_Notify($$)
{
  my ($hash,$dev) = @_;
  my $name = $hash->{NAME};
  my $devname = $dev->{NAME};
  my $devtype = $dev->{TYPE};
  return if (AttrVal($name,"disable",0) == 1);
  my $events = deviceEvents($dev,1);
  if (grep(/^INITIALIZED$/,@{$events}))
  {
    Debug Dumper @{$events};
    Debug $init_done;
    Log3 $name,3,"HOMEMODE_updateInternals";
    HOMEMODE_updateInternals($hash);
  }


In HOMEMODE_updateInternals werden als Erstes von RESIDENTS die ROOMMATE/GUEST aus dem Hash gelesen, diese sind aber noch leer.
sub HOMEMODE_updateInternals($;$)
{
  my ($hash,$force) = @_;
  $HOMEMODE_de = 1 if (AttrVal("global","language","EN") eq "DE");
  my $name = $hash->{NAME};
  my $resdev = $hash->{DEF};
  my $trans;
  if (!IsDevice($resdev))
  {
    $trans = $HOMEMODE_de?
      "$resdev ist nicht definiert!":
      "$resdev is not defined!";
    $hash->{STATE} = $trans;
  }
  elsif (!IsDevice($resdev,"RESIDENTS"))
  {
    $trans = $HOMEMODE_de?
      "$resdev ist kein gültiges RESIDENTS Gerät!":
      "$resdev is not a valid RESIDENTS device!";
    $hash->{STATE} = $trans;
  }
  else
  {
    my @oldMonitoredDevices = @{$hash->{helper}{allMonitoredDevices}} if ($hash->{helper}{allMonitoredDevices});
    delete $hash->{helper}{allMonitoredDevices};
    delete $hash->{helper}{presdevs};
    delete $hash->{RESIDENTS};
    delete $hash->{SENSORSCONTACT};
    delete $hash->{SENSORSMOTION};
    delete $hash->{SENSORSENERGY};
    delete $hash->{SENSORSLUMINANCE};
    $hash->{VERSION} = $HOMEMODE_version;
    my @residents;
    push @residents,$defs{$resdev}->{ROOMMATES} if ($defs{$resdev}->{ROOMMATES});
    push @residents,$defs{$resdev}->{GUESTS} if ($defs{$resdev}->{GUESTS});
    Debug $defs{$resdev}->{ROOMMATES};
    Debug Dumper @residents;
    if (scalar @residents < 1)
    {
      $trans = $HOMEMODE_de?
        "Keine verfügbaren ROOMMATE/GUEST im RESIDENTS Gerät $resdev":
        "No available ROOMMATE/GUEST in RESIDENTS device $resdev";
      Log3 $name,2,$trans;
      readingsSingleUpdate($hash,"HomeInfo",$trans,1);
      return;
    }
    else
    {
      $hash->{RESIDENTS} = join(",",@residents);
    }



2017.04.21 13:46:11 1: DEBUG>$VAR1 = 'INITIALIZED';

2017.04.21 13:46:11 1: DEBUG>1
2017.04.21 13:46:11 3: HOMEMODE_updateInternals
Use of uninitialized value $msg in concatenation (.) or string at fhem.pl line 4576.
2017.04.21 13:46:11 1: DEBUG>
2017.04.21 13:46:11 1: DEBUG>
2017.04.21 13:46:11 2: Keine verfügbaren ROOMMATE/GUEST im RESIDENTS Gerät rgr_Residents


Führe ich HOMEMODE_updateInternals  nochmal aus nachdem dann FHEM wirklich richtig läuft funktioniert es wieder.

2017.04.21 13:46:49 1: DEBUG>rr_Brina,rr_Dan
2017.04.21 13:46:49 1: DEBUG>$VAR1 = 'rr_Brina,rr_Dan';
$VAR2 = 'rg_Gast,rg_Mutter,rg_SBert';




Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Habe es weiter eingrenzen können.

Es liegt scheinbar an RESIDENTS.
Durch die umfangreichen Umbauarbeiten an RESIDENTS in letzter Zeit muss sich etwas verändert haben.
Es sind jedenfalls nach INITIALIZED noch keine ROOMMATE/GUEST im Hash verfügbar.

Muss ich jetzt wirklich einen InternalTimer einbauen um HOMEMODE_updateInternals zu verzögern?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

betateilchen

Vielleicht läuft RESIDENTS inzwischen auch erst los, nachdem global:INITIALIZED erfolgt ist?

Wir hatten hier doch in den letzten Wochen die Grundsatzdiskussion, dass bestimmte Module erst nach bestimmten Kriterien starten dürfen, um von ihrer Reihenfolge innerhalb der Konfigurationsdaten unabhängig zu werden.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

wenn mehrere module die voneinander abhängig sind auf global:INITIALIZED warten haben wir ein problem da die reihenfolge dieser module untereinander nicht definiert bzw. alphabetisch ist.

im prinzip kann man seine eigene notify order ändern, das funktioniert aber nur wenn es zwischen diesen modulen regeln gibt und nicht jeder für sich versucht möglichst weit hinten zu sein.

vielleicht wäre es besser wenn es eine art modul spezifisches initialized event gäbe um diese abhängigkeit zu entkoppeln.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

DeeSPe

Danke für Eure Hinweise.

Dank Julians Hinweis konnte ich mit:
$hash->{NotifyOrderPrefix} = "51-";
zumindest erst mal sicherstellen dass die ROOMMATE/GUEST Devices wieder vorhanden sind.
Jetzt muss ich "nur" wieder alles testen worauf sich das evtl. noch in meinem Modul auswirkt.
Nur gut dass das vor dem SVN Check-in passiert ist... 8)

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Thorsten Pferdekaemper

Hi,
und wo genau ist jetzt das Problem, einfach das hier hinzuschreiben:

InternalTimer (gettimeofday(), 'HOMEMODE_updateInternals', $hash);

Das verzögert das ganze bis alles geladen ist.
Gruß,
   Thorsten
FUIP

Loredo

Zitat von: betateilchen am 21 April 2017, 18:18:57
Vielleicht läuft RESIDENTS inzwischen auch erst los, nachdem global:INITIALIZED erfolgt ist?


Genau. Stand schon seit 2 Jahren auf der Todo...  ;)
Jetzt hatte ich mal einen Grund das anzupacken (allerdings hab ich von einer Grundsatzdiskussion nichts mitbekommen...).

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

justme1968

@Thorsten Pferdekaemper: das geht nicht. weil es auf eine definierte reihenfolge ankommt funktioniert eine einfache verzögerung nicht da damit die reihenfolge zufällig (bzw. alphabetisch vom modul namen) abhängt.

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

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