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?
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
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.
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.
ja. stimmt.
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.
Danke für die Hilfe. Ich habe die Abfrage in NotifyFn auf global:(INITIALIZED|REREADCFG) erweitert.