Start von FHEM mit OWX

Begonnen von Ingo, 21 Dezember 2013, 18:01:07

Vorheriges Thema - Nächstes Thema

Ingo

Hallo,

mir fiel auf das OWX_Discover, also das physikalische Erkennen der Sensoren/Aktoren erst ca. 20s nach dem Start von FHEM erfolgt.
Inzwischen wurden aber schon meine Module gestartet, die fleißig Aktoren ansteuern möchten. Schlägt natürlich fehl!

Aktuell warten meine Module in der xxx_ModuleNotifyFn() auf "INITIALIZED" von "global" um aktiv zu werden.
Sicher währe es nun möglich auf den Abschluss von OWX_Discover zu warten.

Aber was ist mit den setstate-Komandos die FHEM nach dem Start aus log/fhem.save ausführt? Die passiert auch bevor der 1-Wire Bus benutzbar ist!

Wie kann man also sicherstellen, dass FHEM erst aktiv wird wenn alle Sensoren/Aktoren verfügbar sind?


cwagner

Hallo,

hier ist FHEM nach meinen Erfahrungen leider etwas anfällig, vor allem, wenn man viel ergänzt, ändert und ernuert. In der FHEM.cfg werden neu definierte Devices hinten dran geschrieben und Module wie THRESHOLD oder auch PID, die auf die Anwesenheit von Sensoren angewiesen sind, wurden vielleicht früher (mit anderen Sensoren) definiert und schwups wird beim Neustart erst das abhängige Device definiert und dem fehlen nun die Sensoren, die erst viel später im der CFG stehen.

Für mich habe ich das so gelöst: Gleich am Anfang meiner FHEM.cfg wird wie auch in allen Beispielen für die Funkkomponenten (CUX_XX) beschrieben, das Interface für 1-Wire definiert. Direkt dahinter habe ich
include ./FHEM/1wire_devices.cfg

Dorthinein habe ich alle automatisch oder manuell erstellten Definitionen für Sensoren verschoben. Wenn neue hinzukommen, mache ich das jetzt schon routinemäßig so: Gehe an das Ende der fhem.cfg, greife mir die Zeilen und kopiere die nach der 1wire_devices.cfg.

Dann habe ich keinen Ärger beim Neustart...

Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Ingo

#2
Christian,

Danke für Deinen Beitrag. DAS Problem kann man eleganter lösen, denn FHEM sendet das Event INITIALIZED wenn alles initialisiert ist.
Und erst dann sollte ein Modul die Arbeit aufnehmen.

Findet man so oder ähnlich in vielen Modulen:

sub XXX_ModuleNotifyFn($$) {
  my ($hash,$dev) = @_;

  return if($dev->{NAME} ne "global" ||
            !grep(m/^INITIALIZED$/, @{$dev->{CHANGED}}));

  delete $hash->{NotifyFn};
  delete $hash->{NTFY_ORDER} if($hash->{NTFY_ORDER});

  #Start Loop
  xxx_ContolSomething($hash)

  return undef;
}


Mein Problem ist aber, das sich OWX danach weitere 20s Zeit lässt, bis es den 1-Wire Bus "Discoverd", sprich die Sensoren kennt.

Prof. Dr. Peter Henning

Its not a Bug, its a feature ...

Bei parasitär gespeisten Sensoren muss erst einmal genügend ladung aufgesammelt worden sein - das ist also ein "Sicherheitsfeature", das auf antwortbereite Sensoren wartet. Wenn die Module vorher schon starten, ergibt sich keine Auslesung =>  wird ignoriert.

LG

pah