FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ThomasRamm am 27 Februar 2015, 11:32:39

Titel: (gelöst) Variable Name in valueFN abfragbar?
Beitrag von: ThomasRamm am 27 Februar 2015, 11:32:39
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
Titel: Antw:Variable Name in valueFN abfragbar?
Beitrag von: justme1968 am 27 Februar 2015, 21:05:33
falls du valueFn und readingsProxy meinst: $DEVICE. sie commandref.

gruss
  andre
Titel: Antw:Variable Name in valueFN abfragbar?
Beitrag von: ThomasRamm am 28 Februar 2015, 10:54:55
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
Titel: Antw:Variable Name in valueFN abfragbar?
Beitrag von: justme1968 am 28 Februar 2015, 11:02:47
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
Titel: Antw:Variable Name in valueFN abfragbar?
Beitrag von: ThomasRamm am 28 Februar 2015, 11:14:06
Vielen Dank,
dachte zwar ich hätte $name auch getestet aber habe es jetzt nochmal eingegeben und es funktioniert natürlich.

Gruß
Thomas
Titel: Antw:(gelöst) Variable Name in valueFN abfragbar?
Beitrag von: Heng am 26 August 2018, 15:41:40
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