Emails mit FHEM: Unterschied zwischen den Versionen
Jochen (Diskussion | Beiträge) Die Seite wurde neu angelegt: „Basis ist ein Raspberry Pi mit installiertem Debian 7 (Wheezy) und lauffähigem FHEM. Die Infos stammen primär von dieser Seite: [http://heinz-otto.blogspot.d…“ |
Jochen (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Basis ist ein Raspberry Pi mit installiertem Debian 7 (Wheezy) und lauffähigem FHEM. | Basis ist ein Raspberry Pi mit installiertem Debian 7 (Wheezy) und lauffähigem FHEM. | ||
Die Infos stammen primär von | Die Infos stammen primär von den Seiten [http://heinz-otto.blogspot.de/2015/02/email-senden-von-fhem-und-raspberrypi.html Otto's Technik Blog] und [http://www.fhemwiki.de/wiki/E-Mail_senden FHEM-Wiki]. | ||
Mit dem pi-User im Terminal anmelden (Putty), dann zuerst | Mit dem pi-User im Terminal anmelden (Putty), dann zuerst den Email-Client nachinstallieren: | ||
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install sendEmail | sudo apt-get install sendEmail | ||
Da alle Email-Dienstleister mittlerweile auf TLS umgestellt haben müssen jetzt noch 2 Dateien der Distribution angepasst werden. | Da alle Email-Dienstleister mittlerweile auf TLS umgestellt haben müssen jetzt noch 2 Dateien der Distribution angepasst werden. | ||
In der Datei SSL.pm muss in Zeile 1490 ein $ entfernt werden: | In der Datei SSL.pm muss in Zeile 1490 ein ''$'' entfernt werden: | ||
sudo nano /usr/share/perl5/IO/Socket/SSL.pm | sudo nano /usr/share/perl5/IO/Socket/SSL.pm | ||
Wir suchen die erste Textkette in der nächsten Box und löschen das $ am Ende (siehe 2. Zeile): | Wir suchen die erste Textkette in der nächsten Box und löschen das ''$'' am Ende (siehe 2. Zeile): | ||
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i | m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))'''$'''}i | ||
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i | m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i | ||
Dann noch die Datei /usr/bin/sendEmail die Zeile 1907 editieren: | Dann noch die Datei /usr/bin/sendEmail die Zeile 1907 editieren: | ||
sudo nano /usr/bin/sendEmail | sudo nano /usr/bin/sendEmail | ||
Einfach die obere Zeile in der folgenden Box suchen und durch die zweite Zeile ersetzen: | Einfach die obere Zeile in der folgenden Box suchen und durch die zweite Zeile ersetzen: | ||
SSLv3 TLSv1 | if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => ''''SSLv3 TLSv1'''')) { | ||
TLSv1_0:TLSv1_1:TLSv1_2 | if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => ''''TLSv1_0:TLSv1_1:TLSv1_2'''')) { | ||
Test auf der Kommandozeile (Daten in < > entsprechend ersetzen): | Test auf der Kommandozeile (Daten in < > entsprechend ersetzen): | ||
sendEmail -f '<von@domain.tld>' -t '<an@domain.tld> -u 'Hallo Welt' -m 'Das ist ein Test' -s '<smtp.domain.tld>' -xu '<konto@domain.tld>' -xp '<Passwort>' -o tls=auto | sendEmail -f '<von@domain.tld>' -t '<an@domain.tld> -u 'Hallo Welt' -m 'Das ist ein Test' -s '<smtp.domain.tld>' -xu '<konto@domain.tld>' -xp '<Passwort>' -o tls=auto | ||
Jetzt noch die notwendigen Schritte in FHEM: | |||
Die Datei 99_myUtils "leer" anlegen, dass klappt wie im [http://www.fhemwiki.de/wiki/99_myUtils_anlegen Wiki] ganz gut. Alternativ unter ''Edit files'' die Datei ''99_Utils'' öffnen, als ''99_myUtils'' speichern, nur den Kopf stehen lassen, ''Utils_Initialize'' in ''myUtils_Initialize'' ändern und alle weiteren Subroutinen löschen: | |||
############################################## | |||
# $Id: 99_myUtils.pm 3595 2015-11-03 21:11:00Z jochenboelter $ | |||
package main; | |||
use strict; | |||
use warnings; | |||
use POSIX; | |||
sub | |||
myUtils_Initialize($$) | |||
{ | |||
my ($hash) = @_; | |||
} | |||
1; | |||
Anschließend in der ''99_myUtils''-Datei folgende Unterroutine einfügen und der eigentlichen Befehlszeile ''tls=auto'' bzw. ''=yes'' einsetzen: | |||
######## DebianMail Mail auf dem RPi versenden ############ | |||
sub | |||
DebianMail | |||
{ | |||
my $rcpt = shift; | |||
my $subject = shift; | |||
my $text = shift; | |||
my $attach = shift; | |||
my $ret = ""; | |||
my $sender = "absender\@account.de"; | |||
my $konto = "kontoname\@account.de"; | |||
my $passwrd = "passwrd"; | |||
my $provider = "smtp.provider.de:25"; | |||
Log 1, "sendEmail RCP: $rcpt"; | |||
Log 1, "sendEmail Subject: $subject"; | |||
Log 1, "sendEmail Text: $text"; | |||
Log 1, "sendEmail Anhang: $attach";; | |||
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls='''no''' -o message-charset=utf-8); | |||
$ret =~ s,[\r\n]*,,g; # remove CR from return-string | |||
Log 1, "sendEmail returned: $ret"; | |||
} | |||
Bei folgenden Feldern müssen die eigenen Daten eingetragen werden, für GMX gilt: | |||
$sender muss eine gültige Email-Adresse sein | |||
$konto die eigene GMX-Adresse | |||
$passwrd das GMX-Passwort | |||
$provider mail.gmx.net | |||
Dann kann man das Versenden einer Email testen, diese Zeile definiert ein temporären Emailversand in einer Minute. | |||
define Testmail at +00:01:00 { DebianMail('<name@domain.tld>','Info vom FHEM System','Das EMail Modul funktioniert');;} | |||
Wenns nicht ankommt, kann man das Logfile anschauen, wenn dort "Email was sent successfully!" steht sollte man noch in den Spamordner schauen. | |||
'''Wichtig:''' Bei ''notifys'' und anderen Routinen, bei denen das ''@'' als Platzhalter für einen Parameter gilt, muss '''vor Version 5.7''' beim Aufruf von DebianMail in der Email-Adresse das ''@'' durch ''@@'' ersetzt werden. Beispiel: | |||
define check_batterie notify .*:[Bb]attery.* {\ | |||
if("%" !~ m/ok/) { \ | |||
{ DebianMail('michael.mueller'@@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \ | |||
}\ | |||
} | |||
Meldet ein Device einen niedrigen Batteriepegel, dann geht eine Email raus... | |||
'''Ab Version 5.7''' reicht ein einfaches @: | |||
define check_batterie notify .*:[Bb]attery.* {\ | |||
if("%" !~ m/ok/) { \ | |||
{ DebianMail('michael.mueller'@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \ | |||
}\ | |||
} | |||
Aktuelle Version vom 8. Dezember 2015, 18:16 Uhr
Basis ist ein Raspberry Pi mit installiertem Debian 7 (Wheezy) und lauffähigem FHEM. Die Infos stammen primär von den Seiten Otto's Technik Blog und FHEM-Wiki.
Mit dem pi-User im Terminal anmelden (Putty), dann zuerst den Email-Client nachinstallieren:
sudo apt-get update sudo apt-get install sendEmail
Da alle Email-Dienstleister mittlerweile auf TLS umgestellt haben müssen jetzt noch 2 Dateien der Distribution angepasst werden.
In der Datei SSL.pm muss in Zeile 1490 ein $ entfernt werden:
sudo nano /usr/share/perl5/IO/Socket/SSL.pm
Wir suchen die erste Textkette in der nächsten Box und löschen das $ am Ende (siehe 2. Zeile):
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
Dann noch die Datei /usr/bin/sendEmail die Zeile 1907 editieren:
sudo nano /usr/bin/sendEmail
Einfach die obere Zeile in der folgenden Box suchen und durch die zweite Zeile ersetzen:
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'TLSv1_0:TLSv1_1:TLSv1_2')) {
Test auf der Kommandozeile (Daten in < > entsprechend ersetzen):
sendEmail -f '<von@domain.tld>' -t '<an@domain.tld> -u 'Hallo Welt' -m 'Das ist ein Test' -s '<smtp.domain.tld>' -xu '<konto@domain.tld>' -xp '<Passwort>' -o tls=auto
Jetzt noch die notwendigen Schritte in FHEM:
Die Datei 99_myUtils "leer" anlegen, dass klappt wie im Wiki ganz gut. Alternativ unter Edit files die Datei 99_Utils öffnen, als 99_myUtils speichern, nur den Kopf stehen lassen, Utils_Initialize in myUtils_Initialize ändern und alle weiteren Subroutinen löschen:
##############################################
# $Id: 99_myUtils.pm 3595 2015-11-03 21:11:00Z jochenboelter $
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
1;
Anschließend in der 99_myUtils-Datei folgende Unterroutine einfügen und der eigentlichen Befehlszeile tls=auto bzw. =yes einsetzen:
######## DebianMail Mail auf dem RPi versenden ############
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "absender\@account.de";
my $konto = "kontoname\@account.de";
my $passwrd = "passwrd";
my $provider = "smtp.provider.de:25";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
Log 1, "sendEmail Anhang: $attach";;
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=no -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}
Bei folgenden Feldern müssen die eigenen Daten eingetragen werden, für GMX gilt:
$sender muss eine gültige Email-Adresse sein
$konto die eigene GMX-Adresse
$passwrd das GMX-Passwort
$provider mail.gmx.net
Dann kann man das Versenden einer Email testen, diese Zeile definiert ein temporären Emailversand in einer Minute.
define Testmail at +00:01:00 { DebianMail('<name@domain.tld>','Info vom FHEM System','Das EMail Modul funktioniert');;}
Wenns nicht ankommt, kann man das Logfile anschauen, wenn dort "Email was sent successfully!" steht sollte man noch in den Spamordner schauen.
Wichtig: Bei notifys und anderen Routinen, bei denen das @ als Platzhalter für einen Parameter gilt, muss vor Version 5.7 beim Aufruf von DebianMail in der Email-Adresse das @ durch @@ ersetzt werden. Beispiel:
define check_batterie notify .*:[Bb]attery.* {\
if("%" !~ m/ok/) { \
{ DebianMail('michael.mueller'@@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \
}\
}
Meldet ein Device einen niedrigen Batteriepegel, dann geht eine Email raus...
Ab Version 5.7 reicht ein einfaches @:
define check_batterie notify .*:[Bb]attery.* {\
if("%" !~ m/ok/) { \
{ DebianMail('michael.mueller'@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \
}\
}