Hauptmenü

%NAME nach Update

Begonnen von Apollo, 14 Dezember 2015, 08:22:10

Vorheriges Thema - Nächstes Thema

Apollo

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

marvin78

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

Apollo

wenn ich einfach nur %NAME gegen $NAME austausche, wird die Subroutine nicht aufgerufen.

marvin78

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.

Apollo

nur eine sub zu machen und $NAME zu übergeben war ein super Hinweis.

danke