Erweitertes Email senden (SendEmail) - mit Priorität

Begonnen von Grinsekatze, 21 Mai 2017, 14:41:07

Vorheriges Thema - Nächstes Thema

Grinsekatze

Moin,

ich habe einmal das bereits im Wiki vorhandene Email-Skript erweitert und möchte euch dies nicht vorenthalten:

Das Original findet ihr hier:
https://wiki.fhem.de/wiki/Batterie%C3%BCberwachung
https://wiki.fhem.de/wiki/E-Mail_senden#Raspberry_Pi

Ursprünglich hat es eine Email verschickt, wenn ein Aktor ein geringen Betteriestand hat. Ich habe es dahingehend angepasst, dass ich nun auch eine Email bekomme, wenn die Stellmotoren der Heizungsaktoren defekt sind (hatte ich bei inzwischen 2 HM-CC-RT-DN).
Ebenfalls wird die verschickte Email mit hoher Priorität markiert (unter Outlook am roten Ausrufungszeichen im Betreff zu erkennen), um die Email hervorzuheben.

99_myUtils.pm
sub DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = 'ABSENDER_EMAIL_ADRESSE';
my $konto = 'ABSENDER_EMAIL_ADRESSE';
my $passwrd = "ABSENDER_EMAIL_PASSWORT";
my $provider = "POSTAUSGANGSSERVER_IP:POSTAUSGANGSSERVER_PORT";

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=auto -o message-charset=utf-8 -o message-content-type=html -o message-header=X-Priority:2);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}


ABSENDER_EMAIL_ADRESSE zum Beispiel: service@test.de
ABSENDER_EMAIL_PASSWORT zum Beispiel: IchBinEinPasswort
POSTAUSGANGSSERVER_IP zum Beispiel: smtp.1und1.de
POSTAUSGANGSSERVER_PORT zum Beispiel: 25

fhem.cfg:
####################
#
# Batteriestandsueberwachung
#
define BetterieLowNotify notify .*:[Bb]attery:.* { if($EVENT !~ m/ok/) {\
  {DebianMail('EMPFÄNGER_EMAIL_ADRESSE', 'Smarthome: Batteriestand', 'Der Batteriestand von '.$NAME.' ist '.$EVENT, '')};;\
  Log 3, "$NAME: Batteriewarnung $EVENT";;\
  }\
}

####################
#
# Heizungsmotorueberwachung
#
define HeizungErrorNotify notify .*:motorErr:.* { if($EVENT !~ m/ok/) {\
  {DebianMail('EMPFÄNGER_EMAIL_ADRESSE', 'Smarthome: Heizungsmotorzustand', 'Der Stellmotor von '.$NAME.' ist '.$EVENT, '')};;\
  Log 3, "$NAME: Motorwarnung $EVENT";;\
  }\
}


EMPFÄNGER_EMAIL_ADRESSE zum Beispiel: JohnDoe@test.de

Vielleicht hilft's ja dem Einen oder Anderen.

Grinsekatze

Ich habe es noch etwas weiter verfeinert, da mich störte, dass immer ausgegeben wird "Der Batteriestand von HeizungBadezimmer ist battery:low". Daher habe ich den EVENT gekürzt, sodass nurnoch der Zustand und nicht auch das Reading ausgegeben wird:

Hier am Beispiel der Batteriewarnung (für den Stellmotor funktioniert es äquivalent):
define BetterieLowNotify notify .*:[Bb]attery:.* { if($EVENT !~ m/ok/) {\
  my @state = split(/:/, $EVENT);;\
  {DebianMail('EMPFÄNGER_EMAIL_ADRESSE', 'Smarthome: Batteriestand', 'Der Batteriestand von '.$NAME.' ist '.$state[1], '')};;\
  Log 3, "$NAME: Batteriewarnung $state[1]";;\
  }\
}