Globales Event nach Save "fhem.cfg"

Begonnen von klaus.schauer, 25 August 2014, 11:23:56

Vorheriges Thema - Nächstes Thema

klaus.schauer

Um den EnOcean Transceiver nach einem Fhem-Start und dem Öffnen der Schnittstelle zu parameterisieren wird in "TCM_Notify" auf das globale Event "INITIALIZED" geprüft. Das globale Event "CONNECTED" aus der Routine DevIo nutze ich nicht, da die Parameterisierung erst erfolgen kann, nachdem die Fhem Konfiguration vollständig eingelesen ist.

Sobald Fhem nach einem Sichern der cfg-Datei neu gestartet und die Schnittstelle erneut geöffnet wird, müsste ebenso parameterisiert werden. Welches globale Event wird nach dem Sichern der Konfiguration gesendet, das ich entsprechend prüfen könnte?

Welche sonstige Systemaktionen gibt es, bei denen die Transceiver-Schnittstelle neu geöffnet wird und welche globale Event sind dabei zu beachten?

justme1968

nach save ein global:SAVE. aber das hat nichts mit dem neu starten nach editieren der config zu tun. dafür gibt es global:REREADCFG.

die events sind auch ganz normal per inform oder event monitor zu sehen.

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

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

betateilchen

Redest Du jetzt von einem "save config" oder von einem Save nach "edit files" ?

Im ersten Fall (save config) passiert gar nichts, ausser dem Wegschreiben der Konfigurationsdaten.

Im zweiten Fall erfolgt überhaupt kein Neustart von fhem.cfg (wie von Dir in Deiner Frage angenommen) sondern ein rereadcfg. Der Abschluss des rereadcfg wird mit einem globalen Event "REREADCFG" getriggert.

  DoTrigger("global", "REREADCFG", 1);

Schau Dir doch einfach mal die fhem.pl und die entsprechenden Funktionen CommandSave bzw. CommandRereadCfg an.


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

betateilchen

Zitat von: justme1968 am 25 August 2014, 11:44:27
nach save ein global:SAVE.

falsch.

Das global:SAVE wird vor der Ausführung der Sicherung getriggert, nicht danach.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

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

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

rudolfkoenig

Muesste eigentlich zuschauen, wird so spannend off-topic.

@klaus:
Man kann das Problem Geraete-Initialisierung auf mehrere Arten loesen:

- alle benoetigten Parameter als define Parameter uebergeben. Evtl. komplizierter fuer den Benutzer, einfacher fuer den Programmierer. Der Benutzer kann sie online via modify aendern, DefineFn wird dabei nochmal aufgerufen, mit dem alten $hash.

- die benoetigten Attribute in AttrFn auswerten. Etwas komplexer zu programmieren, da alle Zustandsuebergaenge der Attributswerte unterstuetzt werden sollten. Ein NotifyFn ist weder fuer diese, noch fuer die vorherige Methode notwendig.

- die Initialisierung in NotifyFn ausfuehren, und auf global:(INITIALIZED|REREADCFG) reagieren.
Die aufwendigste Loesung, weil es zusaetzlich zu AttrFn zu implementieren ist, oder eine Attributsaenderung funktioniert nur mit einem restart. Dieser Weg ist mAn nur dann notwendig, falls mehrere/alle gesetzten Attribute bekannt sein muessen um etwas zu tun, und ich wuerde das Problem durch kombinieren der Attribute zu einem Wert vermeiden oder gleich alles Notwendige im define spezifizieren.

- $init_done braucht man in NotifyFn nicht zu beachten, da beide Events nach dem Abschluss der Initialisierung erfolgen.

- fuer das Initalisieren der Geraete ist eigentlich das dritte Argument von DevIo_OpenDev (initFn) zustaendig.

klaus.schauer

Danke für die Hilfe. Ich habe die Abfrage in NotifyFn auf global:(INITIALIZED|REREADCFG) erweitert.