Hauptmenü

[Gelöst] Exime4

Begonnen von dk3572, 24 Oktober 2014, 10:34:32

Vorheriges Thema - Nächstes Thema

dk3572

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

Puschel74

Hallo,

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

Die Fehlermeldung sagt eigentlich alles aus.

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.

betateilchen

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".
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Puschel74

#3
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
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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dk3572

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

Puschel74

#6
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
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.

fiedel

#7
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
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

betateilchen

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')}

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dk3572

@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?

dk3572

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.



fiedel

#11
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!?  ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

dk3572

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

fiedel

FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Puschel74

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
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.