FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dk3572 am 24 Oktober 2014, 10:34:32

Titel: [Gelöst] Exime4
Beitrag von: dk3572 am 24 Oktober 2014, 10:34:32
Hallo,

ich habe exime4 auf meinem RaspberryPi erfolgreich eingerichtet.
Mailversand funktioniert.

Wie muss der Code in Fhem aussehen?
Habe folgendes probiert:

sub
exmail
{
  my $rcpt = $_[0];
  my $subject = $_[1];
  my $text = $_[2];
  system("echo \"$text\" | /usr/bin/mail -s \"$subject\" \"$rcpt\"");
}


{exmail('meineadresse@@gmail.com',"Betreff",$Mailtext);;\}

und bekomme diese Meldung:

ZitatGlobal symbol "$Mailtext" requires explicit package name at (eval 193) line 1.
syntax error at (eval 193) line 1, at EOF

Was mache ich falsch?

Danke und Gruß
Dieter
Titel: Antw:Exime4
Beitrag von: Puschel74 am 24 Oktober 2014, 10:36:58
Hallo,

wie oder wo wird $Mailtext zusammen gebaut bzw. gefüllt?

Die Fehlermeldung sagt eigentlich alles aus.

Grüße
Titel: Antw:Exime4
Beitrag von: betateilchen am 24 Oktober 2014, 10:41:32
Ja ich hatte mich auch grade gefragt, wo $Mailtext herkommen soll :)

Ausserdem würde ich die Parameterauswertung in exmail anders bauen:

sub exmail($$$)
{
  my ($rcpt, $subject, $text) = @_;
  system("echo \"$text\" | /usr/bin/mail -s \"$subject\" \"$rcpt\"");
}


Zum einen ist das einfacher lesbar und zum anderen ist sofort erkennbar, dass die Funktion drei Aufrufparameter erfordert.

Aber das ist nur eine "Schönheitsfrage".
Titel: Antw:Exime4
Beitrag von: Puschel74 am 24 Oktober 2014, 11:02:04
Hallo,

du kannst in der 99_myUtils.pm auch im Abschnitt main hergehen und ein
our ($Mailtext)="";
einfügen.
Dann bekomsmt du schlimmstenfalls eine leere Mail wenn der Versand an sich klappt.

Sonst gilt: Variablen müssen erst deklariert werden bevor man sie verwenden kann.
Entweder im notify my $Mailtext = ""; oder einer eigenen pm my ($Mailtext) = ""; oder eben wie oben geschrieben.

Die Deklaration im Abschnitt main mit our hat den Vorteil das die Variable in deiner gesamten FHEM-Umgebung gültig ist.
So habe ich das z.B. mit meiner Mailadresse gelöst.

Grüße
Titel: Antw:Exime4
Beitrag von: betateilchen am 24 Oktober 2014, 11:42:25
Zitat von: Puschel74 am 24 Oktober 2014, 11:02:04
Entweder im notify my $Mailtext = ""; oder einer eigenen pm my ($Mailtext) = "";

Auch in der eigenen .pm kann man die Klammern weglassen.
Titel: Antw:Exime4
Beitrag von: dk3572 am 24 Oktober 2014, 13:04:54
wow, schnelle Antworten, Danke!

Leider bin ich kein Programmierer oder Informatiker :-(

Wie muss das in der myUtils genau aussehen und wie z.B. ein notify?

Hab es jetzt so eingefügt:

sub
exmail
{
  my $rcpt="meineadresse@@gmail.com";
  my $subject="Fhem Info";
  my $text="";
  system("echo \"$text\" | /usr/bin/mail -s \"$subject\" \"$rcpt\"");
}


Dieter
Titel: Antw:Exime4
Beitrag von: Puschel74 am 24 Oktober 2014, 13:10:37
Hallo,

man braucht dazu kein Programmierer sein - lesen genügt.
Ich hab es oben auch bereits gepostet - sogar mit DEINER Variable.

Aber hier mal allgemein:
define n_notify_irgendwas notify <Device> {
  my $Variable = "Irgendwas soll da stehen";
  ...
  hier muss der User selbst schauen das mit der Variable sinnvoll umgegangen wird
  ...
}


Aber in deinem geposteten Code wäre $rcpt schonmal schön zum abschauen.

Grüße

Edith: Und was hat dir an betateilchens Vorschlag nicht gefallen?
Edith2: Den Code ergänzt
Titel: Antw:Exime4
Beitrag von: fiedel am 24 Oktober 2014, 13:26:50
Hi Dieter,

wo hast du das Beispiel denn her? Das mit dem "$Mailtext" kommt mir bekannt vor.  ;) Vielleicht findest du dort auch noch ein passendes notify.

Folgendes muss erst mal gehen:

in die myUtils:

# Mailfunktion exmail, senden per "Exim4" (Mailer mit Spool):
# Aufruf dann mittels { exmail('user@provider.de','Subject','text 123') }

sub exmail {
  my $rcpt = $_[0];
  my $subject = $_[1];
  my $text = $_[2];
  system("echo \"$text\" | /usr/bin/mail -s \"$subject\" \"$rcpt\"");
}

Jetzt ein Reload der Utils- Datei und dann in der FHEM- Befehlszeile abschicken:
{ exmail('user@provider.de','Subject','text 123') }
Ggf. auch mal mit zwei @ probieren, aber hier sollte eins reichen.

Wenn du jetzt eine Mail bekommst, kannst du dich an das notify machen...

Gruß

Frank
Titel: Antw:Exime4
Beitrag von: betateilchen am 24 Oktober 2014, 13:27:44
Hey Puschel, Dein Codeschnipsel ist aber relativ sinnfrei. Du definierst eine Variable und das wars? Da passiert gar nix. Und nach dem Ausführen des notify exisitiert auch die Variable nicht mehr...

Die Funktion exmail würde ich beispielsweise so bauen


sub exmail ($$$) {
  my ($rcpt, $subject, $text) = @_;
  system("echo \"$text\" | /usr/bin/mail -s \"$subject\" \"$rcpt\"");
}


Das Notify beispielsweise so:


define bla notify <irgendeinEvent> {exmail('empfaenger', 'subject', 'text')}

Titel: Antw:Exime4
Beitrag von: dk3572 am 24 Oktober 2014, 13:37:23
@Frank
jep, da hatte ich das her ;-)

So, vielen Dank, nach der ausführlichen Anleitung funktioniert es auch.
Nach dem Senden steht aber in FHEM eine -1.
Was ist das jetzt?
Titel: Antw:Exime4
Beitrag von: dk3572 am 24 Oktober 2014, 13:40:23
und das steht im Log:

2014.10.24 13:33:37.575 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 7.
2014.10.24 13:33:37.581 1: PERL WARNING: Subroutine DebianMail redefined at ./FHEM/99_myUtils.pm line 14.
2014.10.24 13:33:37.583 1: PERL WARNING: Prototype mismatch: sub main::exmail: none vs ($$$) at ./FHEM/99_myUtils.pm line 40.
2014.10.24 13:33:37.585 1: PERL WARNING: Subroutine exmail redefined at ./FHEM/99_myUtils.pm line 37.


Titel: Antw:Exime4
Beitrag von: fiedel am 24 Oktober 2014, 13:41:16
Das ist normal so - nicht wundern!
@beta: Ist schön effizient, werde ich so übernehmen. Weniger Code = guter Code!  ;)

Zitat2014.10.24 13:33:37.583 1: PERL WARNING: Prototype mismatch: sub main::exmail: none vs ($$$) at ./FHEM/99_myUtils.pm line 40.

...nur eine Version der Mailfunktion Verwenden!?  ;)
Titel: Antw:Exime4
Beitrag von: dk3572 am 24 Oktober 2014, 14:15:23
Zitat...nur eine Version der Mailfunktion Verwenden!?

Warum?
Wenn das in myUtils steht ist das doch nicht schlimm?
Verwenden tue ich nur exim4.

Danke auch noch mal, jetzt funktioniert "Erst mal" alles  :D

Schönes Wochenende und Gruß
Dieter
Titel: Antw:Exime4
Beitrag von: fiedel am 24 Oktober 2014, 14:26:48
Hier noch ein Beispiel für das notify (http://forum.fhem.de/index.php/topic,14804.msg95010.html#msg95010).

Gruß

Frank
Titel: Antw:Exime4
Beitrag von: Puschel74 am 24 Oktober 2014, 15:56:20
Hallo,

ZitatHey Puschel, Dein Codeschnipsel ist aber relativ sinnfrei. Du definierst eine Variable und das wars?
Ja, es ging ja nur drum WIE Variablen definiert werden.
Sinnfrei ist mein Beispiel durchaus gewesen aber nicht falsch.
Ich habs jetzt aber ergänzt  8)

ZitatDa passiert gar nix. Und nach dem Ausführen des notify exisitiert auch die Variable nicht mehr...
Das ist richtig.
Aber das ist doch mit jeder Variable in einem notify so.
Egal was ich mit der Variable in dem notify mache.
Sobald das notify verlassen wird existiert keine Variable mehr die darin mit my deklariert wurde.
Oder bin ich da schonwieder mal auf dem Holzweg?

Daher habe ich oben in meiner Antwort ja auch die sub main in der 99_myUtils.pm mit der Deklarationsmöglichkeit our erwähnt.
Diese Variablen existieren mWn solange FHEM läuft.

Ich hab dich schonmal gebeten mich nicht dumm sterben zu lassen  ;)

Grüße