(gelöst) Variable Name in valueFN abfragbar?

Begonnen von ThomasRamm, 27 Februar 2015, 11:32:39

Vorheriges Thema - Nächstes Thema

ThomasRamm

Hallo,
gibt es eine Möglichkeit den Namen des aktuellen Device in der Funktion valueFn abzufragen?
Meine Definition sieht aktuell so aus, wobei ich gerne "SchalterA1" durch so etwas wie $NAME ersetzen würde. ($NAME funktioniert leider nicht):
valueFn : { Longpress("SchalterA1",$VALUE);}

Gruß
Thomas

justme1968

falls du valueFn und readingsProxy meinst: $DEVICE. sie commandref.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ThomasRamm

Hallo,
ja ich meinte die Verbindung ReadingsProxy und valueFn.
$DEVICE gibt mir aber den Namen der zugrundeliegenden Hardware zurück (myMcp20), nicht den Namen des ReadingsProxy.

Ich kann für jeden Eingang den Befehl natürlich auch anpassen und den Namen des ReadingsProxy als Parameter übergeben, einfacher wäre es einen 1:1 identischen Befehl bei allen ReadingsProxy eingeben zu können.

Gibt es evtl. eine Übersicht welche Variabeln wo zur Verfügung stehen, oder welche evtl. immer verfügbar sind?
Das übergeben von $hash wäre z.B. ebenfalls hilfreich, da könnte ich ja alles auslesen.

Gruß
Thomas

justme1968

der name des readingProxy selber steckt in $name.

die variablen die garantiert vorhanden sind sind in der commandref dokumentiert. alles andere ist modul intern und kann sich prinzipiell ändern.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ThomasRamm

Vielen Dank,
dachte zwar ich hätte $name auch getestet aber habe es jetzt nochmal eingegeben und es funktioniert natürlich.

Gruß
Thomas

Heng

Hallo Thomas,
ich habe einen alten Thread von Dir entdeckt https://forum.fhem.de/index.php/topic,34429.msg267459.html#msg267459 und war unheimlich froh, das es noch jemanden gibt, der genau das selbe Problem hat wie ich. Und dann noch eine Lösung für dieses Problem!
ZitatVielen Dank,
dachte zwar ich hätte $name auch getestet aber habe es jetzt nochmal eingegeben und es funktioniert natürlich.

Gruß
Thomas

Ich habe folgendes in meiner valueFn:
{
  my ( $temp, $hum ) = (split(' ', $VALUE))[2,4];
  my $name = 'EG.KU.Fuehler.th';

  fhem("setreading $name temperature $temp");
  fhem("setreading $name humidity $hum");

  "T: $temp H: $hum";
}


Wie Du siehst setze ich eine lokale Variable $name weil ich es nicht schaffe auf das Internal NAME zuzugreifen. Ich finde diese Lösung unpraktisch, man kann nichts kopieren, umbenennen etc. Naja und das alles was Du auch schon geschrieben hast.

Wenn ich nun die lokale Variable $name auskommentiere bekomme ich schon bein setzen des Attributs die bekannte Meldung:
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at (eval 1925) line 5.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at (eval 1925) line 6.

Ich habe, ebenso wie Du, sämtliche Schreibweisen ausprobiert - nix funktioniert. Auch einen Blick in den Code hat mir nicht geholfen, denn in der aufrufenden Funktion bzw. was ich dafür halte gibt es eine lokale Variable $name. Offensichtlich ist Perl da doch so strickt und macht sie in der aufgerufenen Funktion unsichtbar.

Nun meine Fragen:
siehst du $name immer noch in valueFn. Dein Post liegt ja doch schon einige Zeit zurück und Dinge ändern sich.
fehlt bei mir im Code etwas damit $name sichtbar wird
ist mein Lösungsansatz so beknackt? - aber wie sonst kann ich einen 4-Fach-Sensor vernümftig aufteilen und die Readings so umbenamsen, dass das Modul Dewpoint sie lesen kann. Offensichtlich wird das wohl anders gelöst, sonst hätten ja viele ein solches Problem
Und zum Schluß:
Darf ich Dich das auf diesem Weg überhaupt fragen? Wie bzw. Wo sollte ich das machen?

Vielen Dank und viele Grüße,
    Henning