Hausautomation – Fhem Software auf Raspberry Mails versenden lassen

Das Thema FHEM Software als kostenfreie Hausautomationssoftware hat hier und da schon mal kleine Hürden, welche man bei all den Vorteilen, trotzdem erst einmal bewältigen muss. So auch beim Thema Senden von Mails. Das wird schnell wichtig, denn FHEM wird oft dazu verwendet, bei bestimmten Ereignissen Mitteilungen an den Nutzer zu senden.

Ich nutze beispielsweise die Mail Funktionalität, um Mitteilungen bei erkannten Bewegungen eines Homematic Bewegungsmelder an eine E-Mail Adresse schicken zu lassen, was in diesem Beitrag etwas weiter erläutert wird..

Beispiel zum senden einer Mail bei einem bestimmten Ereignis in fhem.cfg:

#Mail senden, wenn Bewegungsmelder1 auslöst:
define BewegungMeldernotify_istan notify BewegungMelder1:motion  { DebianMail(‘zuhause@DeineDomain.de‘,’Bewegungsmelder1′,’Bewegungsmelder1 Bewegung erkannt’,”) }

mail_bewegungsmelder_beispiel

Da FHEM in der Regel auf Linux Systemen installiert wird, sind hier grundlegende Kenntnisse bzw. das Verständnis zum Versenden einer Mail aus Linux heraus schon wichtig.

Im Zuge des eigenen FEHM Projektes, installierte ich FHEM erstmalig auf einem reinen Ubuntu 14 System innerhalb einer virtuellen Maschine (Virtual BOX) und später auf einen Raspbian wheezy System (Raspberry).

Beides sind prinzipiell Linux Systeme. Allerdings musste ich feststellen, dass die Mail Funktionalität nicht auf beiden Systemen gleich funktionieren. Deshalb möchte ich die Mail Funktion auf auf einem Raspberry mit Raspbian [wheezy] und einem reinem Ubuntu 14 System mit FHEM anhand von Anwendungsbeispielen zeigen. Es gibt sicher weitere Möglichkeiten. Die hier beschriebenen Varianten sind sicher noch verbesserungsfähig. Hier sollen lediglich zwei funktionierende Beispiele als Vorlage gezeigt werden, welche Ihren Dienst auf jeden Fall leisten.

Die Installation der Mail Funktionalität für FHEM erfolgt also in zwei Schritten:

  1. Installation in Linux
  2. Funktionserstellung in FHEM zum Senden über das Linux System

Mail Funktionalität Fhem mit Raspbian [wheezy] auf Raspberry (sendmail Variante)

Im Linux auf dem Raspberry wird sendmail installiert:

sudo apt-get install sendEmail

Auf dieser Installationsgrundlage innerhalb einen Linux Systems auf dem Raspberry kann anschließend in Fehm eine Funktion zum Senden wie folgt erstellt werden:

Datei: 99_myUtils_email_linux.pm

sub
DebianMail
{
my $rcpt = $_[0];
my $subject = $_[1];
my $text = $_[2];
my $attach = $_[3];
my $ret = “”;
my $sender = “username\@DeineDomain .de”;
my $konto = ” username \@DeineDomain .de”;
my $passwrd = “xxxxxxxxx”;
my $provider = “smtp.1und1.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=yes -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g;   # remove CR from return-string
Log 1, “sendEmail returned: $ret”;
}

In Fhem kann man anschließend auf die erstellte Mailer Funktion wie folgt zurück greifen:

ohne Dateianhang:

fhem{DebianMail(‘DeineDomain.de,’Subject’,’Text’)}

mit Dateianhang:

fhem{DebianMail(‘DeineDomain.de,’Subject’,’Text’,’Pfad_zur_datei’)}

Ein Beispiel für einen Aufruf innerhalb der fhem.cfg kann so aussehen:

define watchdog_AnwesenheitHandyNote4 watchdog HandyNote4:absent 00:05 HandyNote4:present { DebianMail(‘zuhause@DeineDomain.de ‘,’HandyNote4 !’,’Handy Note4 Status ist: %’) }

Alternative Lösung: Mail Funktionalität ssmtp Variante – FHEM (getestet mit mit Ubuntu 14)

Ich denke, dass die Debian Mail Funktion bestimmt auch auf dem Ubuntu 14 System gut funktionieren würde. Da meine Praxiserfahrungen auf dem Ubuntu System begannen, startete ich damals allerdings mit der folgenden ssmtp Variante. Ich hatte einige Zeit gesucht, um damals auch Mails mit Dateianhängen versenden zu können. Die folgende Variante war die erste funktionierende Löung zu der Zeit. Aus diesem Grund möchte ich die Variante auch noch mal beschreiben. Der Unterschied ist hier letztendlich, dass bei der ssmtp Variante die Zugangsdaten in der Konfigurationsdatei fest hinterlegt wird und dadurch die Mail Funktionalität vom ganzen LinuxSystem so ohne weiteres genutzt werden kann und bei der sendmail Variante hingegen die Zugangsdaten des E-Mail Provider immer mit angegeben werden müssen.

Auf dem Ubuntu 14 System richtete ich ursprünglich den Mail Versand gemäß meinen bisherigen Erfahrungen auf reinen Linux Ubuntu Systemen ein. Hierfür verwendete ich einen schlanken ssmtp Client in Kombination mit mutt. Beim Senden über folgendes Verfahren können u.a. Mails mit Dateianhängen unkompliziert gesendet werden. Die Beispielinstallation unter Linux habe ich hier beschrieben.

In der Kurzfassung muss auf Linux Ebene folgendes gemacht werden:

sudo apt-get install ssmtp;

sudo apt-get install mutt

Anschließend müssen Zugangsparameter des Mail Provider in Konfigurationsdateien hinterlegt werden ( /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases)

Testmail Senden mit Dateianhang aus der Linux Konsole heraus:

echo “test” | mutt -s “testBetreff” -a “/tmp/testbild.jpg”  — zuhause@DeineDomain.de

Testmail Senden ohne Dateianhang aus der Linux Konsole heraus:

echo “test” | mutt -s “testBetreff”  — zuhause@DeineDomain.de

Klappt das Senden aus der Linux Konsole, dann muss man FHEM im nächsten Schritt eine Funktion zur Nutzung der Senderoutinen beibringen.

Auf dieser Installationsgrundlage innerhalb einen Ubuntu 14 Systems kann anschließend in Fehm eine Funktion zum Senden wie folgt erstellt werden:

Datei: 99_myUtils_email_linux.pm

sub fb_mail {
my $rcpt = $_[0];
my $subject = $_[1];
my $text = $_[2];
system(“/bin/echo \”$text\” | /usr/bin/mutt -s \”$subject\” — \”$rcpt\””);
}

In Fhem kann man anschließend auf die erstellte Mailer Funktion wie folgt zurück greifen:

fb_mail(‘zuhause@DeineDomain.de’,’TV !’,’TV Status ist: %’)

Ein Beispiel für einen Aufruf innerhalb der fhem.cfg kann so aussehen:

define watchdog_AnwesenheitHandyNote4 watchdog HandyNote4:absent 00:05 HandyNote4:present { fb_mail(‘zuhause@DeineDomain.de ‘,’HandyNote4 !’,’Handy Note4 Status ist: %’) }

Zum Senden von Mails mit einem Dateianhang (Bilder einer IP Kamera) hatte ich einmal eine eigene Funktion in Fhem geschrieben:

sendSnapshot(@)
{
my ($cam,$snapshots) = @_;
my $storage = AttrVal($cam,”storage”,””);
my $rcpt = ‘boesenberg@hro-netz.info’;
my $subj = “FHEM: Kamera $cam hat eine Bewegung aufgezeichnet”;
my $last = ReadingsTimestamp($cam,”last”,””);
my $mess = “Kamera $cam hat eine Bewegung am $last aufgezeichnet:”;
if(!-d $storage) {
   Log 1, “IPCAM $cam storagepath does not exists: $storage”;
   return “storagepath for $cam does not exists: $storage”;
}
if(!$last) {
   Log 1, “IPCAM $cam no snapshots available”;
   return “no snapshots available for $cam”;
}
my $datei = “”;
my $datei1 = “”;
for (my $s=1;$s<$snapshots+1;$s++) {
    
   $datei.= “$storage/”.ReadingsVal($cam,”snapshot$s”,””);
$datei1.= ” -a \$datei”;
}
 system(“/bin/echo \”$mess $datei\” | /usr/bin/mutt -s \”$subj \” -a /opt/fhem/ipcam252/ipcam252_snapshot_1.jpg -a /opt/fhem/ipcam252/ipcam252_snapshot_2.jpg — \”$rcpt\””); 
Log 4, “IPCAM sendSnapshot: ok”; #$ret”;
return undef;
}
 

Weiterführende Links:

Ein guter Beitrag zur Konfiguration und Nutzung zusammen mit Fhem ist im fhemwiki zu finden:

http://www.fhemwiki.de/wiki/E-Mail_senden

<- Zurück zur FHEM Projekt Übersicht…

 

Veröffentlicht in FHEM, Hausautomation, Linux Tricks und verschlagwortet mit , , , , , , , , , .

Ralf Bösenberg

Als gelernter Fachinformatiker begeistere ich mich für viele aktuelle IT Themen. Ich befasse mich mit Programmierung unter VB.Net, VB6, Linux, verbringe viel Zeit mit der Gestaltung und Administration von Internet Servern und Web Seiten und bin gerne und jederzeit ein freundlicher und kompetenter Ansprechpartner für Kunden und Interessenten.

www.Ralf.Bösenberg.info

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert