FHEM > Automatisierung

notify Aenderungen

<< < (2/2)

Groby:
Da muss ich leider widersprechen...

Natürlich kann man $event selber splitten. Wenn das Hauptmodul $evtpartx zur Verfügung stellt, wäre es doppelt gemoppelt wenn man jedes mal den String nochmals selber aufteilt nur um die Fehlermeldungen zu umgehen.

Wenn $evtpartx für "Anfänger" sein soll, macht es wesentlich mehr Sinn den eigentlichen Wert oder "" zu übergeben damit auch "Anfänger" damit klarkommen und unnötige Log-Einträge / Fehlermeldungen ausbleiben.

Sonst wäre es wesentlich sinnvoller die $evtpartx-Funktion komplett einzustellen, damit jeder mit $event arbeitet...

jsb73:
Hallo,

ich habe folgenden Dummy getestet:

--- Code: ---
define sw_Dummy FS20 0101 3333
attr sw_Dummy model fs20su
attr sw_Dummy room Flur

define notify_test notify sw_Dummy {Log 1, "notify_test: $NAME, $TYPE, $EVENT, $EVTPART0, $EVTPART1"}

--- Ende Code ---


Ein "set sw_Dummy on" wird mit Fehler abgebrochen, ein "set sw_Dummy on-for-timer 30" geht.

In diesem Fall wird aus 91_notify.pm die Funktion AnalyzeCommandChain(undef,{Log 1, "notify_test: $NAME, $TYPE, $EVENT, $EVTPART0, $EVTPART1"}) aufgerufen.
Von dort wird AnalyzeCommand() => AnalyzePerlCommand() aufgerufen. Hier steht:

--- Code: ---
  if($evalSpecials) {
    $cmd = join("", map { my $n = substr($_,1);
                          my $v = $evalSpecials->{$_};
                          $v =~ s/(['\\])/\\$1/g;
                          "my \$$n='$v';";
                        } keys %{$evalSpecials})
           . $cmd;

--- Ende Code ---


%evalSpecials hat die Keys: %EVTPART0, %TYPE, %EVENT, %NAME, weshalb in $cmd dies hier steht:

my $EVTPART0='off';my $TYPE='FS20';my $EVENT='off';my $NAME='sw_Dummy';{Log 1, "notify_test: $NAME, $TYPE, $EVENT, $EVTPART0, $EVTPART1"}

Evtl. ist es wirklich sinnvoll, $EVTPART0 ... $EVTPART2 in EvalSpecials() leer zu initialisieren, um Fehler bzw. Abbrüche zu verhindern. Alternativ sollte in der Doku darauf hingewiesen werden, dass die Variablen uninitialisiert sein können. Gerade Anfänger tun sich sonst unnötig schwer.

just my 2c
Jan

rudolfkoenig:
Die Fehlermeldung existiert nur, wenn das notify mit einem unerwarteten Event aufgerufen wird.

Statt lange "Einzeiler" mit { if(defined($EVTPART1)) {...} } zu bauen sollte man mehrere notifys mit passenden regexp bauen, oder wenn das nicht geht, alles in eine Funktion auslagern, die man mit $EVENT aufruft, und wo man mit @EVTPART = split(" ", $EVENT) selbst die Stuecke bekommt.

Vielleicht sehe ich aber das Problem nicht, und ich kann mit einem konkreten Beispiel belehrt werden.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln