define via autocreate erkennen ?

Begonnen von Wzut, 13 Oktober 2020, 13:28:47

Vorheriges Thema - Nächstes Thema

Wzut

Gibt es eine Möglichkeit im Define Abschnitt eines Modul zu erkennen ob das Anlegen des Gerätes garade via autocreate augelöst wurde ?
Hintergrund :
Ich habe bei den MAX Modulen heute schon in der Define sub einen Abschnitt der auf $init_done == 1 prüft um zu unterscheiden ob der aktuelle Durchlauf durch den FHEM Start erfolgt oder der User es via Def/Modify gerade geändert hat.
Bei Änderung zur Laufzeit werden zusätzliche Überprüfugen ausgeführt und genau diese möchte ich nun wieder überspringen wenn autocreate das Device gerade erzeugt hat.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

rudolfkoenig

Da du das autocreate per "UNDEFINED..." Event ausloest, kannst du dem Event beliebige zusaetzliche Argumente uebergeben, auf man im DefFn pruefen kann.
Weiterhin duerfte im autocreate Fall auch $hash->{CL} nicht gesetzt sein.

Wzut

Ja das ich da X Werte mit übergeben ist schon klar genau das wird ja heute gemacht. Ich habe nun einen weiteren angehängt und prüfe den auch in der Def Funktion, aber er landet dann auch iautomatisch in $hash->{DEF} und genau da möchte ich ihn später nicht mehr haben. Die einzige Lösung die mir bisher eingefallen ist :
Da am Ende der Define Funktion ein internalTimer gestartet wird könnte ich da dann feststellen ob $hash->{DEF] mehr als zwei Parameter hat und wenn ja mittels CommandModify (oder brutal direkt ? ) den/die überflüssigen wieder entfernen.

Das mit dem $hash->{CL} habe ich in der CommandDefine gesehen, ich verstehe aber nicht für was steht das CL und wann hat es überhaupt einen Wert ?
Ich habe das mal in der CommandDefine zusätzlich noch an eine andere Stelle kopiert da er ja dort später wieder gelöscht wird, sehe aber nie einen Wert egal auf welche Weise die CommandDefine durchlaufen wird.


Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

rudolfkoenig

DEF kann man im DefFn direkt aendern, dafuer braucht man weder InternalTimer noch modify.

CL wird auf die Client-Verbindung gesetzt, ueber die die Aktion ausgeloest wurde. Kann verwendet werden, um diesem Client (wenn noch da ist) spaeter Nachrichten zu schicken (asyncOutput). Oder per allowed zu pruefen, ob er was darf.

Wzut

Zitat von: rudolfkoenig am 14 Oktober 2020, 09:58:00
DEF kann man im DefFn direkt aendern
ja das hatte ich direkt nach dem schreiben auch mal probiert, war mir aber bis jetzt sehr unsicher ob das ein sauberer Weg ist, THX
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher