Hauptmenü

Globale perl Variablen

Begonnen von Elektrolurch, 28 Juni 2013, 14:32:56

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,

ich habe mir mit our $MailAdress in 99_myUtils.pm eine Globale Variable definiert (zum Ablegen der Mailadresse, damit das mit den @... und einfacher zuändern ist.
Wenn ich die mit einem testnotify triggere und in log ausgeben lasse, bekomme ich folgende Fehlermeldung: wenn testnotifiy getriggert wird:
2013.06.28 13:48:07 3: testnotify return value: Global symbol "$MailAdress" requires explicit package name at (eval 45) line 1.

Um zu testen haben ich folgenden Code in der fhem.cfg:


define fvar1 dummy
define fvar2 dummy

define testnotify notify fvar1:on {\
fhem("set fvar2 gesetzt");;\
Log (3, "testnotify mit Klammern: fvar2: ".Value("fvar2"));; \
my $pvar = "Inhalt von pvar";;\
Log (3, "testnotify: Perlvar gesetzt Dollar pvar()): ".$pvar);; \
Log (3, "Meine Mailadresse: ".$MailAdress);; }
ohne die letzte Zeile geht das testnotify einwandfrei.

Hier ist $Mailadress mit our als globale Variable definiert. Das Modul wird auch geladen. im log gibt es dazu auch keine Fehlermeldung.+

99_myUtils.pm:

##############################################
# $Id: 99_myUtils.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;

use strict;
use warnings;
use POSIX;
use FritzBoxUtils;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
our $MailAdress = 'Raimund\@RRiem.de';
}
1;


Was ist da falsch?
Nach der Fehlermeldung habe ich im Forum auch schon gesucht, da waren aber die Gründe nicht zutreffend (z.B. kopierter Code anderer Nutzer und nicht angepasst, Modul wurde nicht geladen usw.)
Elektrolurch

configDB und Windows befreite Zone!

Puschel74

Hallo,

hast du nachdem du our eingtragen hast mal ein

reload 99_myUtils.pm

versucht?

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Elektrolurch

Ja, habe ich und dabei war mir auch aufgefallen, dass am Ende von 99_myUtils.pm die 1 vor dem ; fehlte. Nun wird das Modul korrekt geladen, aber our $MailAdress ist trotzdem nicht global.
Strange.
Die anderen Sachen habe ich jetzt so langsam im Griff, Dank dem testnotify habe ich damit so lange herumgespielt, bis die Syntax stimmte. Also: Es gibt Fortschritte....
configDB und Windows befreite Zone!

Puschel74

Hallo,

ich hab deine Einträge grad auf meinem Test-FHEM eingetragen und bekomme dieselbe Fehlermeldung - logisch.

Ich werd mal schauen ob ich was finde.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Puschel74

Hallo,

ich antworte mal da ich nicht weiß ob du Änderungen am Beitrag einfach mit bekommst.

In der 99_myUtils.pm habe ich die Variable so definiert:
our $MailAdresse = "xxx.yyy\@provider.de";

Im notify kannst du dann so drauf zugreifen:

Log (3,"Adresse :".$main::MailAdresse);

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Elektrolurch

Hallo Puschel,

danke, funktioniert. Also muss man in perl explizit den scope adressieren, also hier mit main::... In C gibt's das nicht, aber in irgend einer anderen Programmiersprache (Cobol?) habe ich das auch schon mal gesehen. Wieder ein erfolgreicher Tag.
Geht immer schneller, mit dem Codieren, nach den ersten (scheinbar unüberwindbaren) Startschwierigkeiten. Danke nochmals.

Elektrolurch
configDB und Windows befreite Zone!

Puschel74

Hallo,

Zitatnach den ersten (scheinbar unüberwindbaren) Startschwierigkeiten.

Wenn sich die erstmal gelegt haben willst du nicht mehr weg von FHEM ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Marek

Hallo,
ich wärme mal dieses alte Thema wieder auf, da ich gerade ein sehr sehr ähnliches Problem habe.

in meiner 99_Utils.pm habe ich folgenden Abschnitt:


...
use strict;
use warnings;
use POSIX;

sub
Utils_Initialize($$)
{
  my ($hash) = @_;
  our $mailmarek = "marek\@server.de";
}

sub
time_str2num($)
...


In der fhem.cfg gibt es für mein Geofancy folgendes:


define sw_web_on notify Webcam:on {system('sudo /opt/pyFosControl/test.py -a 1 |  mailx -v -s "Webcam aktiviert" $main::mailmarek');;}


Der Teil bis zum "|" wird ausgeführt, selbst mit Verbose = 5 steht aber nie der Variableninhalt im Log:


...
2014.07.30 23:12:17 4: eventTypes: dummy Webcam state: off -> state: off
2014.07.30 23:12:17 5: Triggering sw_web_off
2014.07.30 23:12:17 4: sw_web_off exec {system('sudo /opt/pyFosControl/test.py -a 0 |  mailx -v -s "Webcam deaktiviert" $main::mailmarek');;}
2014.07.30 23:12:17 5: Cmd: >{system('sudo /opt/pyFosControl/test.py -a 0 |  mailx -v -s "Webcam deaktiviert" $main::mailmarek');}<
2014.07.30 23:12:18 3: sw_web_off return value: -1
...


Ich bin eigentlich der Meinung, die Variable genau richtig definiert zu haben udn auch richtig anzusprechen. Oder vielleicht doch nicht?

In der 99_Utils.pm gibt es ZWEI mit "Utils_Initialize($$)" überschriebene Blöcke - muss das so? In welchen muss die Variablendefinition?

Danke im Voraus!
Auf dass ich lange Zeit mit fhem glücklich werde...

Marek