Hallo Zusammen,
Ich habe eine Funktion in myutils geschrieben und habe mit der übergabe Probleme.
Wenn ich:
{funktion1("device1")}
(Name des Devices übergebe) geht alles.
Wenn ich:
{funktion1('$NAME')}
übergebe, wird der Name nicht übergeben.
Was mache ich falsch?
Was ist eigeltich der Unterschied zwischen "" und ''?
Vielen Dank
Alex
In einfachen Anführungszeichen werden Variablen nicht ausgewertet:
{funktion1('$NAME')}
In doppelten dagegen schon:
{funktion1("$NAME")}
gibt das gleiche wie
{funktion1($NAME)}
Also muss ich:
{funktion1($NAME)}
nutzen.
Jetzt bekomme ich aber folgenden Fehler:
attr device1 devStateIcon: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 5175388) line 1.
Im Forum habe ich gerade gefunden, dass ich in der myUtils anscheindend nicht auf die Globale Variable $NAME zugreifen kann.
https://forum.fhem.de/index.php/topic,29469.msg222537.html#msg222537 (https://forum.fhem.de/index.php/topic,29469.msg222537.html#msg222537)
Gibt es für $NAME einen workaround, damit das ähnlich wie in dem beispiel mit den Zeiten funktioniert?
Wie sieht denn deine Sub aus?
Du musst dort nat. den übergebenen Parameter "auslesen"...
Wo/wie rufst du denn die Sub mit $NAME auf?
Gibt es "dort" $NAME überhaupt!?
EDIT: also sowas habe ich bei mir beispielsweise in einem Notify und das tut
define nTemperature notify Wand.*_Climate:desired.* {my_StoreDesTemp($NAME, $EVENT)}
sub my_StoreDesTemp($$)
{
my ($Name, $Event) = @_;
}
EDIT2: wohingegen es bei z.B. readingsGroud (nutze ich um valueStyle zu "berechnen") $DEVICE ist...
Gruß, Joachim
$name ist m.E. Keine globale Variable, sondern muß vom jeweiligen Modul ausgewertet werden (kann mich aber täuschen). Wie bzw. In was für einem Device willst du die Sub denn aufrufen?
Gesendet von iPhone mit Tapatalk
schade, wenn man den Devicename nicht via $NAME in die myUtils übergeben kann.
Das hat mich allgemein interressiert, vielleicht brauch ich das mal.
Im aktuellen fall, wollte ich nur zwei Icons von XiaomiBTLESens Devices anzeigen.
Ich habe hier jetzt folgende Lösung gebaut:
Attribut devStateIcon {plantshow("pflanze4")}
sub plantshow($) {
my ($name) = @_;
my $icon_m = "";
my $icon_f = "";
my $moisture = ReadingsVal( $name, "moisture", "" );
my $minMoisture = AttrVal($name, "minMoisture", "");
my $fertility = ReadingsVal( $name, "fertility", "" );
my $minFertility = AttrVal($name, "minFertility", "");
my $state = ReadingsVal( $name, "state", "" );
if ( $minMoisture > $moisture ) {
$icon_m = "10px-kreis-rot";
}
else {
$icon_m = "10px-kreis-gruen";
}
if ( $minFertility > $fertility ) {
$icon_f = "10px-kreis-rot";
}
else {
$icon_f = "10px-kreis-gruen";
}
my $img_m = FW_makeImage( $icon_m,$moisture );
my $img_f = FW_makeImage( $icon_f,$fertility );
return "<div>" . "Gießen: " . $img_m . " | " . "Düngen: " . $img_f . " | " . "Status: " . $state . "</div>";
es funktioniert. Wahrscheinlich wird das ganze auch elleganter gehen, aber aller anfang ist schwer.
vg.
Alex
In devStateIcon kannst du $name verwenden...
{plantshow($name)}
Danke Beta-User.
habe Groß und klein Schreibung nicht beachtet, ...
{plantshow($NAME)} --> {plantshow($name)}
geht.
Ja, ist alles etwas gewöhnungsbedürftig, aber auf diese "Kleinigkeiten" muß man extrem achten und ggf. etwas rumtesten, manchmal gibt es "versteckte features". Leider ist die Doku grade an der Stelle nicht eben besonders gesprächig (gewesen)...
(In attrTemplate brauchen wir das ständig, daher weiß ich das zwischenzeitlich...)
[gelöst]?