Emails mit FHEM: Unterschied zwischen den Versionen

Aus Fidis Wiki
Zur Navigation springen Zur Suche springen
Jochen (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Jochen (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 15: Zeile 15:
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


Zeile 24: Zeile 24:
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:


  if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
  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')) {
  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):
Zeile 84: Zeile 84:
$konto    die eigene GMX-Adresse
$konto    die eigene GMX-Adresse


passwrd    das GMX-Passwort
$passwrd    das GMX-Passwort


$provider  mail.gmx.net
$provider  mail.gmx.net
Zeile 94: Zeile 94:


Wenns nicht ankommt, kann man das Logfile anschauen, wenn dort "Email was sent successfully!" steht sollte man noch in den Spamordner schauen.
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: %')};; \   
  }\
}