(gelöst) Variablenname als Argument

Begonnen von igami, 08 Dezember 2015, 07:49:16

Vorheriges Thema - Nächstes Thema

igami

Guten Tag zusammen,


sub test {
  my $device = "test";
  my $reading = ReadingsVal($device, "state", undef);
  my $room = ReadingsVal($device, "room", "Unsorted");

  fhem("setreading $device test $reading") if($reading);
}

Im state steht $room, nun wird mittels setreading auch $room in das Reading test geschrieben. Wie müsste ich das denn angeben, sodass $room ausgewertet wird?

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

Eine Möglichkeit wäre

sub test {
  my $device = "test";
  my $reading = ReadingsVal($device, "state", undef);

if ( $reading ) {
    my $expr = "return $reading";
    my $result = eval $expr;

    fhem("setreading $device test $result") if($result);
}
}


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Vielen Dank, eval ist die Funktion die ich gesucht habe.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Elektrolurch

So als Tipp:

Man kann auch mit Substitution und einem Platzhalter arbeiten, wie es z.B. in readingsGroup (sub Lookup und Lookup2) für

$ROOM, $DEVICE oder $READING gemacht wird. Das sieht dann so aus:

=~s/\$DEVICE/$device/g

Vielleicht hilft Dir das ja auch weiter.


Elektrolurch
configDB und Windows befreite Zone!