FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Apollo am 14 Dezember 2015, 08:22:10

Titel: %NAME nach Update
Beitrag von: Apollo am 14 Dezember 2015, 08:22:10
Hallo,

mir fehlt irgendwie die Erleuchtung, wie ich mein notify mit den neuen Variablen anpassen muss.
Ich habe bisher mit sub_%NAME eine Unterroutine der 99_myUtils.pm aufgerufen und die Ausgabe mit split weiter verarbeitet.
Ich hab schon einiges mit $NAME probiert, aber ich bekomme es nicht hin, dass die Unterroutine aufgerufen wird.

relais.. {
my ($block,$port1) = split(" ",sub_%NAME);
if ("%EVENT" eq "on" && ReadingsVal("$block","$port1","none") eq "on") {
   fhem ("set $block $port1 off");
} elsif ("%EVENT" eq "off" && ReadingsVal("$block","$port1","none") eq "off") {
   fhem ("set $block $port1 on");
}
}


%EVENT muss ich auch noch anpassen, das ist mir schon klar, aber so weit komme ich momentan gar nicht.
Wäre schön, wenn mir da jemand einen Tipp geben könnte.

Danke
Titel: Antw:%NAME nach Update
Beitrag von: marvin78 am 14 Dezember 2015, 08:28:50
Den Hinweis oben rechts in rot hast du gelesen? Die commandref zu notify sicher auch!? Dann ist unklar, was noch unklar ist.

%NAME -> $NAME
%EVENT -> $EVENT
Titel: Antw:%NAME nach Update
Beitrag von: Apollo am 14 Dezember 2015, 08:32:03
wenn ich einfach nur %NAME gegen $NAME austausche, wird die Subroutine nicht aufgerufen.
Titel: Antw:%NAME nach Update
Beitrag von: marvin78 am 14 Dezember 2015, 08:41:26
Perl Handbuch lesen. Das hier hilft vielleicht:

http://stackoverflow.com/questions/1915616/how-can-i-elegantly-call-a-perl-subroutine-whose-name-is-held-in-a-variable

Aber warum nicht nur eine allgemeine sub und die Unterscheidung über Parameter machen? Also so:

my ($block,$port1) = split(" ",subTEST($NAME));
In der sub dann sowas wie

sub subTest($) {
my ($dev)=@_;
if ($dev eq "TESTDEVICE) {
  ...
}
elsif ($dev eq "TESTDEVICE2") {
  ...
}
}


Alternativ mit switch arbeiten.
Titel: Antw:%NAME nach Update
Beitrag von: Apollo am 14 Dezember 2015, 10:10:56
nur eine sub zu machen und $NAME zu übergeben war ein super Hinweis.

danke