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
Zeile 95: Zeile 95:
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 beim Aufruf von DebianMail in der Email-Adresse das ''@'' durch ''@@'' ersetzt werden. Beispiel:
 
'''Wichtig:''' Bei ''notifys'' und anderen Routinen, bei denen das ''@'' als Platzhalter für einen Parameter gilt, muss beim Aufruf von DebianMail in der Email-Adresse das ''@'' durch ''@@'' ersetzt werden. Beispiel:


  define check_batterie notify .*:[Bb]attery.* {\
  define check_batterie notify .*:[Bb]attery.* {\
   if("%" !~ m/ok/) { \
   if("%" !~ m/ok/) { \
     { DebianMail('Jochen.boelter'''@@'''gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \   
     { DebianMail('Jochen.boelter'@@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \   
   }\
   }\
  }  
  }  


Meldet ein Device niedrigen Batteriepegel, dann geht eine Email raus...
Meldet ein Device niedrigen Batteriepegel, dann geht eine Email raus...

Version vom 4. November 2015, 19:05 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 beim Aufruf von DebianMail in der Email-Adresse das @ durch @@ ersetzt werden. Beispiel:

define check_batterie notify .*:[Bb]attery.* {\
  if("%" !~ m/ok/) { \
    { DebianMail('Jochen.boelter'@@'gmx.de', 'FHEM-Meldung', 'Batterie-Wechsel erforderlich bei @ -> Status: %')};; \   
  }\
} 

Meldet ein Device niedrigen Batteriepegel, dann geht eine Email raus...