Globale Variable definieren

Begonnen von eneuhauser, 04 Januar 2013, 09:43:29

Vorheriges Thema - Nächstes Thema

eneuhauser

Hallo allerseits und schönes Neues Jahr!

Für mein aktuelles Problem konnte ich keine Lösung finden und bitte um Rat. Für eine Haussteuerung unter reichlicher Verwendung von Perl-Routinen in 99_myUtils.pm sollen verschiedene Betriebsarten gewählt werden können. Eine Perl-Variable $modus soll durch ihren Inhalt (0,1,2,...) angeben, welche Betriebsart gerade aktiv ist. Diese Variable soll sowohl in der Konfigurationsdatei von fhem, als auch in den Perl-Routinen in 99_myUtils.pm benützt werden können.

Eine schlichte Definition, wie

my $modus;

funktioniert nicht. Die Zeile

define modus_on notify modus:on {$modus="1";;system ("echo $modus")}

wird nicht ausgeführt, wohl aber die Zeile  

define modus_on notify modus:on {my $modus="1";;system ("echo $modus")}


Dann ist aber die Variable $modus lokal und verschwindet nach Ausführung des Befehls. Das Problem kommt wohl daher, daß die 99_myUtils.pm mit "eval" ausgeführt wird. Weil ich die Variable $modus an vielen Stellen abfragen muß, möchte ich sie nicht als Attribut eines Device führen, sondern einfach als globale Variable. Gibt es hierzu einen Weg?

Danke im voraus und schöne Grüße,

Erich

rudolfkoenig

define modus dummy
set modus on
{ Value("modus") }
{ fhem("set modus on") }

eneuhauser

Vielen Dank, ich werde das mal versuchen. Vorteil ist jedenfalls, daß die Definition in der Konfigurationsdatei steht. Nachteil ist, daß mich die Zugriffe über Hashes instinktiv immer stören (wegen der Performance - ist wahrscheinlich Blödsinn).

Meinen Fehler habe ich nach Konsultation der LOG-Datei auch erkannt. Die Datei 99_myUtils.pm enthält ja "package main", wie in der Musterdatei (sollte ich nochmals überdenken) und folglich muß man die dort definierte Variable

my $modus

mit dem Package-Name qualifizieren, also z.B.

define modus_on notify modus:on {$main::modus="1";;system ("echo $main::modus")}

und alles wird gut.

Nochmals Danke und schöne Grüße,

Erich

Mendezben