Hallo,
bisher hab ich im Forum nur gelesen und möchte einmal kurz etwas "zurückgeben". Für viele hier im Forum wahrscheinlich nichts besonderes, aber vielleicht hilft es ja dem einen oder anderen Neuling.
Kurz zu meinen eingesetzten Komponenenten:
- Raspberry Pi
- USB HM Stick
- Heizkörperthermostate HM-CC-RT-DN
- Wandthermostat HM-TC-IT-WM-W-EU
Ziel war eine Batterieüberwachung. Grundlage für die Batterieüberwachung war der Wiki Eintrag Batterieüberwachung (http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung).
Geändert habe ich das Notify dabei folgendermaßen:
.*:[Bb]attery:.* { if($EVENT !~ m/ok/) { ssmtpMail('Vorname.Nachname@gmail.com', 'FHEM Batteriewarnung', $NAME.': '.$EVENT);
Log 3, "$NAME : Batteriewarnung $EVENT";
}
}
In dieser Form habe ich das DEF des Wiki-Notifys über die Weboberfläche geändert. Insbesondere die if Abfrage aus dem Wiki hat bei mir dazu geführt, dass auch der Batterie Zustand ok zu einer Mail geführt hat. Sehr hilfreich war der folgende Thread (http://forum.fhem.de/index.php?topic=25756.0) zu dem Thema.
Da auf meinem Raspberry bereits ssmtp zum Versand von Mails vorkonfiguriert ist, wollte ich nicht die übliche DebianMail Variante nutzen, sondern auf mein eingerichtetes ssmtp aufsetzen. Die Installation von ssmtp wird auf folgender Webseite (http://rpi.tnet.com/project/faqs/smtp) erklärt. Ergänzend zur Installationsanleitung muss noch folgendes für ssmtp konfiguriert werden.
Unter /etc/ssmtp liegt die Datei revaliases. In dieser muss jetzt noch folgender Eintrag für den fhem user gemacht werden:
Zitat
fhem:Vorname.Nachname@web.de:smtp.web.de:587
Die Absender-Adresse, SMTP-Host und Port müsst ihr natürlich ggfs. anpassen.
Meine ssmtp.conf sieht dabei folgendermaßen aus:
root=postmaster
mailhub=smtp.web.de:587
hostname=raspbmc
FromLineOverride=NO
AuthUser=Vorname.Nachname@web.de
AuthPass=Euer_Passwort
UseSTARTTLS=YES
Als erstes sollte ihr testen, ob der generelle Mailversand vom Raspberry funktioniert:
echo "sample text" | mail -s "Subject" username@domain.tld
Ist dies der Fall könnt ihr die Sub ssmtpMail erstellen.
Folgende Sub indie 99_Utils.pm hinzufügen.
#####E-Mailfunktion mit ssmtp
sub
ssmtpMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $ret = "";
$ret .= qx(echo "$text" | mail -s "$subject" "$rcpt");
Log 1, "ssmtp RCP: $rcpt, Subject: $subject, Text: $text";
}
Anschließend würde ich testen, ob die Sub funktioniert. Dazu auf der FHEM Weboberfläche über das Commando Eingabefeld folgenden Befehl absetzen.
{ssmtpMail('Empfänger@gmail.com','Betreff','TestTestTest')}
Funktioniert auch das kann das Notify wie oben angegeben erstellt werden und mit folgenden Trigger ein Test erfolgen.
trigger wz_wandthermostat Battery:low
Frohe Weihnachten!
Stephan
Hallo Stephan,
mit großem Interesse habe ich deinen Beitrag gelesen, in der Hoffnung mein Problem lösen zu können. Bisher leider ohne Erfolg, denn beim
Versenden einer Email (echo "test" | mail -s "Subject" AAA@web.de ) erhalte ich immer die Meldung:
"mail: cannot send message: Process exited with a non-zero status"
Mit Linux und RPi kenne ich mich nur einige Wochen aus, mit dem Thema SSMTP beschäftige mich mich erst seit ein paar Tagen;
darum fürchte ich, könnte ich etwas Grundlegendes übersehen haben?! Im Wesentlichen möchte erst einmal soweit kommen, dass
ich eine Testmail erfolgreich versenden kann. Dazu habe ich alle Module installiert wie im Link beschrieben (ssmtp, mailutils und mpack).
Meine ssmtp.conf entspricht deinem Format:
root=postmaster
mailhub=smtp.web.de:587
hostname=raspberry-1
FromLineOverride=NO
AuthUser=AAA@web.de
AuthPass=BBB
UseSTARTTLS=YES
Und mein Eintrag in die revaliases sieht so aus:
root:AAA@web.de:smtp.web.de:587
Gibt es beim Provider Web.de noch irgend etwas spezielles zu beachten? Ich frage deshalb, weil ich auch
noch gmail.com ausprobiert habe. Zunächst hat's dort auch nicht funktioniert und ich bekam die gleiche
Fehlermeldung wie oben erwähnt. Gmail teilte mir aber mit, dass die entsprechende Email geblockt
worden sei. Falls dies nicht der Fall sein solle, so müsse ich die "Sicherheitsauflagen" etwas lockern - und
schon hat's mit Gmail.com funktioniert. Bei Web.de hab ich bisher nicht herausgefunden, ob ich ähnliches tun
kann und muss...
Vielen Dank für jeden Tipp und hilfreiche Idee!
Robert.
Moin Robert,
was steht in der Datei /var/log/mail.log, nachdem Du versuchst eine Mail direkt von der Konsole (echo "test" | mail -s "Subject" vorname.nachname@gmail.com) zu schicken?
Gruß Stephan
PS: Und für die Sub nicht die 99_Utils.pm nehmen, sondern eine eigene 99_myUtils.pm anlegen und einbinden. Das wußte ich damals auch nicht besser ;-) Wie das geht lässt sich googeln.
Moin Stephan,
erst einmal schönen Dank für die schnelle Nachfrage:-).
Also, ein Blick in die mail.log ergab folgende Einträge:
Jan 30 06:28:29 raspberrypi sSMTP[3413]: Unable to set AuthLogin="YES"
Jan 30 06:28:30 raspberrypi sSMTP[3413]: Creating SSL connection to host
Jan 30 06:28:30 raspberrypi sSMTP[3413]: SSL connection using RSA_AES_128_CBC_SHA1
Jan 30 06:28:30 raspberrypi sSMTP[3413]: 501 Syntax error in parameters or arguments
Inzwischen hab ich aber auch rausgefunden, warum's bei mir Probleme gab. Ich musste
zuvor den Befehl "sudo bash" eingeben, dann hat alles wie erwartet funktioniert. Sorry,
mein Problem war somit ein Anfängerfehler / "tückisches Halbwissen".
Gruß
Robert.
Guten Abend Stefanr,
ich hoffe du liest meinen Eintrag und kannst mir helfen.
Über den RPI kann ich wunderbar Emails über SSMTP versenden.
Nur der Test über die FHEM Commandozeile funktioniert nicht.
Ich vermute der Eintrag in der 99_Utilys welchen ich von deinem Forumeintrag übernommen habe funktioniert nicht bei mir.
Hast du eine Idee oder einen Vorschlag was ich noch machen kann ?
vielen Dank
gruss aus Bayern
KLAUS
Moin Klaus,
was steht bei Dir in der /etc/ssmtp/revaliases ?
Hast Du versuchen unter dem user fhem Mails zu verschicken? Müsste man folgendermaßen testen können:
sudo -u fhem echo "sample text" | mail -s "Subject" ziel@gmail.com
Gruß
Stephan
Hallo Stefan,
herzlichen Dank für deine schnelle Antwort.
Ja, mit sudo -u fhem echo "sample text" | mail -s "Subject" ziel@gmail.com
kann ich aus dem Raspberry emails versenden. Das funktioniert.
Nur der Test direkt in FHEM Commandozeile funktioniert nicht.
Ich habe in FHEM eingegeben {ssmtpMail('Empfänger@gmail.com','Betreff','TestTestTest')}
Dann sehe ich im LOG keinen Email Ausgang.
Ich vermute nachstehender Eintrag, den ich in die 99_myUtlils kopiert habe funktioniert nicht.
Oder habe ich den Eintrag in die falsche Datei kopiert ?
vielen Dank
gruss
KLAUS
#####E-Mailfunktion mit ssmtp
sub
ssmtpMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $ret = "";
$ret .= qx(echo "$text" | mail -s "$subject" "$rcpt");
}
Hallo Stefan,
Kommando zurück.
Alles GUT.
Ich habe gerade bemerkt, dass das Versenden aus FHEM keinen Eintrag im Log erzeugt, die Email aber nun doch verschickt wird.
Somit ist alles o.k.
Könnte man die Sub noch ändern, dass beim Versenden ein Logeintrag geschrieben wird ?
vielen Dank nochmal
gruss
KLAUS
Super dass es klappt. Für einen Logeintrag die Sub um folgenden Code ergänzen.
Log 1, "ssmtp RCP: $rcpt, Subject: $subject, Text: $text";
Hallo Stephan,
Klasse !
Ich bin begeistert.
Ich finde ssmtpMail viel besser als Debian.
Das geht einfach deutlich schneller raus
Nochmal vielen Dank für deine Hilfe :D
Der nachfolgende Code schreibt jetzt auch den Return Code ins Log.
sub
ssmtpMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
local $SIG{CHLD} = 'DEFAULT';
my $returncode = system("echo '$text' | mail -s '$subject' '$rcpt'");
Log 1, "ssmtp RCP: $rcpt, Subject: $subject, Text: $text, Return: $returncode";
}
Guten Abend Stephan,
herzlichen Dank dass du dich nochmal gemeldet hast.
Ich werde es gleich ausprobieren.
schönen Abend noch
gruss
KLAUS
Hallo, ich bekomme auch immer diese Fehlermeldung:
"mail: cannot send message: Process exited with a non-zero status"
nachdem ich folgenden Befehl absetze:
echo "test" | mail -s "Subject" AAA@gmx.de
Habe diese Programmierung in der ssmtp.conf:
root=AAA@gmx.de
hostname=raspberrypi
FromLineOverride=YES
mailhub=mail.gmx.net:587
UseSTARTTLS=YES
AuthUser=AAA@gmx.de
AuthPass=BBB
und dies in der revaliases:
root:AAA@gmx.de:mail.gmx.net:587
Habe ein Update und ein Upgrade durchgeführt und folgende Paket installiert:
- sudo apt-get install ssmtp
- sudo apt-get install mailutils
- sudo apt-get install mpack
was mache ich falsch, dass ich keine Mails sende?
Moin,
setz mal bitte folgende Optionen anders:
root=postmaster // hier erwartet ssmtp einen User und keine Mailadresse
FromLineOverride=NO
Gruß Stephan
Hallo,
habe gerade die ssmtp.conf entsprechend angepaßt und getestet. Jedoch ohne Erfolg.
root=postmaster
hostname=raspberrypi
FromLineOverride=NO
mailhub=mail.gmx.net:587
#rewriteDomain=gmx.de
#UseTLS=Yes
UseSTARTTLS=yes
AuthUser=AAA@gmx.de
AuthPass=BBB
Steht denn in den Logs etwas? var/log/syslog, var/log/messages oder /var/log/mail.*?
Gesendet von meinem E5823 mit Tapatalk
Hallo,
ihr der Auszug aus den entsprechenden Log-Dateien. Kann leider mit den Meldungen nichts anfangen. Habe vorher den "echo-Befehl" abgesetzt.
sys.log: Nov 25 17:52:34 raspberrypi sSMTP[4484]: Creating SSL connection to host
Nov 25 17:52:34 raspberrypi sSMTP[4484]: SSL connection using RSA_AES_128_CBC_SHA1
Nov 25 17:52:34 raspberrypi sSMTP[4484]: Authorization failed (535 Authentication credentials invalid)
mail.log: Nov 25 17:52:34 raspberrypi sSMTP[4484]: Creating SSL connection to host
Nov 25 17:52:34 raspberrypi sSMTP[4484]: SSL connection using RSA_AES_128_CBC_SHA1
Nov 25 17:52:34 raspberrypi sSMTP[4484]: Authorization failed (535 Authentication credentials invalid)
mail.err: Nov 25 17:52:34 raspberrypi sSMTP[4484]: Authorization failed (535 Authentication credentials invalid)
mail.info: Nov 25 17:52:34 raspberrypi sSMTP[4484]: Creating SSL connection to host
Nov 25 17:52:34 raspberrypi sSMTP[4484]: SSL connection using RSA_AES_128_CBC_SHA1
Nov 25 17:52:34 raspberrypi sSMTP[4484]: Authorization failed (535 Authentication credentials invalid)
Irgendwie klappt die Authentifizierung nicht. Username und Passwort hast Du bestimmt schon überprüft, oder? Gegenprüfung wäre z. B. ein Login in das Webinterface.
SSMTP hat wohl auch einen Bug, wenn im Passwort das # Zeichen vorkommt.
ZitatIf the '#' character appear anywhere in your password, and that you
put it in the /etc/ssmtp/ssmtp.conf file using the AuthPass option,
an empty password will be sent instead and the authentication will
fails with a message such as:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544018
Vielleicht bist Du von dem Bug betroffen? Mit = und : gabs wohl auch mal Probleme. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=463196
Hallo
Das ist mal eine nette Idee, danke. Es läuft auf Anhieb.
Nur mit dem notify habe ich meine Bedenken. Das sendet meines Erachtens bei jeder Battery:low Meldung eine E-Mail, unter Umständen alle paar Minuten. Eigentlich müßte man das auf eine einmalige Mail begrenzen, aber das würde dann wohl deutlich aufwendiger zu programmieren.
So wie hier erläutert: http://www.fhemwiki.de/wiki/E-Mail_per_notify_nach_Zeitablauf_erneut_senden
Oder mit DOIF, das erst nach einem Statuswechsel wieder eine Mail gesendet wird?
Gruß
G.
Moin,
vielleicht kann man ein erneutes Senden folgendermaßen verhindern.
99_myUtils.pm erweitern um folgende Subroutinen.
# Für jedes Device wird ein Wert im Hash hinterlegt. Im Notify kann die Ausfuehrung dann abhaengig vom Wert erfolgen. So ist es z. B. moeglich
# die mehrfache Notifikation per E-Mail zu verhindern.
sub batterynotifycontrol
{
my %batterynotify = ();
sub setbatterymailonce
{
my $name = shift;
my $value = shift;
$batterynotify{ $name } = $value;
}
sub getbatterymailonce
{
my $name = shift;
if (exists $batterynotify{$name}) {
return $batterynotify{$name};
}
else {
return 0;
}
}
}
Die Ausführung des Notify abhängig vom Hash-Wert machen, der über die Subroutinen gesetzt/verändert wird. Bsp:
DEF
.*:[Bb]attery:.* { if(($EVENT !~ m/ok/) && (getbatterymailonce("$NAME") == 0)) { ssmtpMail('vorname.nachname@gmail.com', 'FHEM Batteriewarnung', $NAME.': '.$EVENT);
Log 3, "$NAME : Batteriewarnung $EVENT"; setbatterymailonce("$NAME",'1');
}
}
Wenn der Zustand wieder "normal" wird muss natürlich der Hash-Wert wieder auf einen Wert geändert werden, der eine erneute Benachrichtigung erlaubt. Dazu könnte man ein zweites Notify bauen.
DEF
.*:[Bb]attery:.* { if(($EVENT =~ m/ok/) && (getbatterymailonce("$NAME") != 0)) {setbatterymailonce("$NAME",'0') }}
Ich hoffe der Ansatz ist kein großer Quatsch. Ein Test mit "trigger wz_wandthermostat :battery: low" hat jedenfalls funktioniert und den gewünschten Erfolg von nur einer Mail erbracht.
Für eine wiederkehrende Benachrichtigung könnte ich mir auch vorstellen, dass man sich ein at definiert, dass den Hash-Wert in bestimmten Zeitintervallen zurücksetzt und so eine erneute Benachrichtigung erfolgen kann.
Gruß
Stephan
Die Lösung ist elegant, finde ich. Nur eine Frage: Bleibt der hash nach einen fhem-Restart erhalten? Obwohl, wenn nicht ist es auch nicht weiter schlimm, da nur dann nochmal eine einmalige, neue Benachrichtigung verschickt würde. Damit kann man leben, denke ich.
Viele Grüße
G.
Nach einem Neustart ist der Hash leer und es würde wieder einmalig zu einer Benachrichtigung kommen. Wenn man das verhindern will wird es für mich zu kompliziert ;)
Gruß
Stephan
Nee, lass mal. Die eine Benachrichtigung kann man tolerieren. Danke für die Lösung. Werde es mal scharf schalten.
Gruß
G.
Hallo
Habe vorhin zufällig gelesen, daß ssmtp die Mail verliert, wenn die Internetverbindung oder der externe Mailprovider down ist (http://www.tuksub.de/2015/03/homeserver-27-mailversand-ueber-postfix-einrichten/).
Deswegen habe ich gerade mal ssmtp durch postfix ersetzt. Wenn man der verlinkten Anweisung folgt, sind keine Änderungen in fhem erforderlich.
Gruß
G.