Emailversand fehlgeschlagen

Begonnen von walterschmitz, 03 Januar 2016, 03:08:01

Vorheriges Thema - Nächstes Thema

walterschmitz

Hallo,

ich habe jetzt nach dem Wiki Eintrag von Email-Versenden via Raspberry Pi (http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi die Einrichtung von SendEmail durchgeführt.

Von der Konsole kann ich auch etwas verschicken und es kommt an.

Via FHEM habe ich zum Test den Notify Sonstiges (auch aus dem Wiki-Eintrag via Copy & Paste) übernommen und habe als Zieladresse natürlich eine Emailadresse von mir eingetragen.
Zusätzlich habe ich beim Notify RegEx noch Bad.Wandthermostat:.* hinzugenommen, damit ich nicht warten muss, bis die Batterie irgendwo leer geht.

Sobald ich im EventMonitor irgendeinen Eintrag von Bad.Wandthermostat erhalte (z.B. diese hier)

2016-01-03 02:59:14 MAX Bad.Wandthermostat RSSI: -58

erhalte ich - natürlich auch mehrfach je nach Auftreten des Ereignisses - eine Meldung im FHEM.log

2016.01.03 02:59:14 3 : Sonstiges return value: syntax error at (eval 1035) line 1, at EOF
2016.01.03 02:59:14 3 : Sonstiges return value: syntax error at (eval 1036) line 1, at EOF
2016-01-03 02:59:14 MAX Bad.Wandthermostat 17.0 °C
2016-01-03 02:59:14 MAX Bad.Wandthermostat RSSI: -58



Schau ich mir den Notifiy-Eintrag im FHEM-Frontend an, so sieht er im Bereich DEF etwas verändert zum C&P-Eintrag direkt in der Eingabezeile aus, was ich aber trotzdem als richtig bewerte.

Bad.Wandthermostat:.*|Fenster:Window:.*,.*Low.Batt*.|Sonstiges:.* {\  DebianMail('MEINE-EMAILADRESSE','Subject des Testes','Text des Testes','Anhang des Testes');\ }


Jetzt meine Frage: In welcher Datei ist dieses EOF Problem at Line 1?
Beim C&P waren natürlich zwei ";" die in der DEF aber nicht angezeigt werden. Aber auch das bringt keine Veränderung im Verhalten.

Irgendwo habe ich ja sicherlich ein ";" o.ä. vergessen oder zuviel eingebaut :(
Kann mir jemand den entsprechenden Tipp geben.. um die Uhrzeit finde ich das nicht mehr :(
Danke im voraus.

JoWiemann

Hallo,

nimm mal die \ raus.

voher:

{\  DebianMail('MEINE-EMAILADRESSE','Subject des Testes','Text des Testes','Anhang des Testes');\ }


nachher:

{DebianMail('MEINE-EMAILADRESSE','Subject des Testes','Text des Testes','Anhang des Testes');}


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

walterschmitz

Hallo,

hab ich versucht und im Notify Sonstiges unter DEF folgendes stehen:
Bad.Fensterkontakt:.*|Bad.Wandthermostat:.*|Fenster:Window:.*,.*Low.Batt*.|Sonstiges:.* {  DebianMail('MEINE-EMAILADRESSE','Subject des Testes','Text des Testes','Anhang des Testes');}

und als Meldung erhalte ich jetzt folgendes:
2016.01.03 13:43:52 3 : Sonstiges return value: Undefined subroutine &main::DebianMail called at (eval 2220) line 1.

ich habe das im Frontend von FHEM unter dem Notifiy Sonstiges direkt geändert und nicht Quelltext der 99_Utils.pm, wenn ich das richtig verstanden habe...

JoWiemann

Hallo,

hast Du denn eine 99_myUtils angelegt und dort die sub DebianMail hinterlegt?! Sieh auch hier: http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

walterschmitz

Hallo,

du hattest zunächst Recht. Ich hatte im Dateinamen einen Tippfehler, da ich das heute Nacht von Hand gemacht hatte. Bei der erneuten Durchsicht habe ich gesehen, dass man ja das Template nutzen kann :)

Die Datei 99_myUtils.pm sieht jetzt wie folgt aus:

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

######## 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";
}

1;


Zunächst habe ich noch verrafft, dass die Routine DebianMail zwischen dem Kommentar und dem 1; noch am Ende stehen bleiben muss und dass das @ in der Emailadresse mit \@ escaped werden muss, aber das habe ich dann anhand der Fehlermeldungen rausgefunden.

Aber... jetzt im Moment trudeln alle 2 min Emails ein, weil irgendein Notify zutrifft. Muss ich sofort rausnehmen, sonst Spam ich mich selbst zu ;)

Dir bislang vielen Dank.
Lag vermutlich wirklich an der Uhrzeit :)

Aber... vielleicht könntest du mir noch kurz erläutern, auf welches Ereignis hier geprüft wird:
Fenster:Window:.*,.*Low.Batt*.
Ist mir gerade nicht ganz klar :(

JoWiemann

Zitat von: walterschmitz am 03 Januar 2016, 23:23:44
Aber... vielleicht könntest du mir noch kurz erläutern, auf welches Ereignis hier geprüft wird:
Fenster:Window:.*,.*Low.Batt*.

Hallo,

zu lesen ist das notify wie folgt:

Bad.Fensterkontakt:.*|Bad.Wandthermostat:.*|Fenster:Window:.*,.*Low.Batt*.|Sonstiges:.* bedeutet

Bad.Fensterkontakt:.* oder Bad.Wandthermostat:.* oder Fenster:Window:.* desweiteren .*Low.Batt*. oder Sonstiges:.*

Ein Ereignis wird also ausgelöst wenn die Devices Bad.Fensterkontakt oder Bad.Wandthermostat oder Fenster:Window irgendeine Aktion melden. Desweiteren wenn irgendein Device sich mit Low.Batt oder Sonstiges meldet.

Geprüft wird auf die Nachricht in der Meldung und zwar nach regular Expression. Als Beispiel Fenster:Window:.* heist: Kommt die Zeichenkette "Fenster:Window:" gefolgt von beliebigen Zeichen (.*) vor, dann führe das notify aus.

Der Eintrag .*Low.Batt*. ist eigentlich unsinnig, da er folgendes prüft: beliebige Zeichen (.*) gefolgt von Low.Bat gefolgt von t beliebig oft (t*) gefolgt von einem beliebigen Zeichen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

walterschmitz

#6
Hallo,

vielen Dank erst mal für die Antwort.

Was ich noch nicht ganz versteh:
Es geht doch immer los mit dem Device, welches vor dem ersten : steht, oder?

Bei Bad.Fensterkontakt oder Bad.Wanthermostat ist mir das einleuchtend... aber nicht bei Fenster?
Was ist Fenster für ein Device? Ist das allgemeingültig... angelegt wurde das z.B. von mir - glaub ich nicht (glaub ich, weil ich mit den RegEx durchaus in der Zwischenzeit viel hin und her probiert habe, kann ich das halt nicht mehr genau sagen!)
Ich habe eine Gruppe bei einigen Elementen / Devices in FHEMFrontend angegeben, die Fenster benannt wurde... Dann frage ich mich aber, was das dahinter stehende Fenster:Window:* darstellen soll. Das * dahinter steht wieder für ALLE Readings, die aus Window ermittelt werden können, so versteh ich das, aber es gibt unter Everything bei mir leider KEIN Window... woher kommt das bzw. was soll da abgefragt werden.

Bei .*Low.Batt*.  --> Fehlt hier nicht quasi irgendwie das führende Device? Oder wird hier unterstellt, dass vorne *: steht?
Wenn ich deinen Hinweis richtig interpretiere:
ZitatDer Eintrag .*Low.Batt*. ist eigentlich unsinnig, da er folgendes prüft: beliebige Zeichen (.*) gefolgt von Low.Bat gefolgt von t beliebig oft (t*) gefolgt von einem beliebigen Zeichen.
.* prüft eigentlich, dass jegliche Zeichenkombination abgeprüft wird, welche u.a. auch Low.Bat mit oder ohne gefolgtem * beinhaltet... dah Low.Bat innerhalb einer Menge * zu finden ist? Kann man das so verstehen?

Mein Problem im Ganzen ist glaub ich, dass ich mir gerade sowas vorstelle, wie DEVICE:READING:VALUE, welches ich zur Prüfung in der RegEx heranziehen kann... halt standardisiert.
In der Log bzw. dem EventLog kann ich diese aber nur so entnehmen, wenn ich das richtig auf die Event-Aufzeichnung übertrage:
Dort steht dann Bad.Wandthermostat (mein Device) Battery (Reading) OK (VALUE)

Im RegEx kann man aber dann auch mal mehr als Value nur eintragen... was bei mir gedanklich gerade zu Wirrwarr führt.

Wernieman

.*Low.Batt*. ist eigentlich so falsch, soll doch heißen: .*Low.Batt.* ... oder?

Und das würde Treffen auf:
Fenster:Low.Batt
Fensterxyz:Low.Battxxxx

da eben .* alles sein kann, eben auch : ...

oder habe ich jetzt Deine Frage Mißverstanden?

Ansonsten:
Schreibe doch mal, auf was Du Trickern willst und wir Versuchen zusammen, die RegExp zu bauen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

walterschmitz

im Konkreten: Was für ein Device ist Fenster?
Bei mir kein Device, evtl. eine Gruppe, die einem Device als Attr zugewiesen wurde... aber ich weiß nicht genau, wo es herkommt?

franky08

Entschuldigung, traumhaft ;) ;) ;D
Deine angelegten devices solltest du schon kennen, es würde kein trigger kommen wenn es das device nicht geben würde.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

walterschmitz

#10
Vielen Dank für deine aussagekräftige Antwort:
Fenster ist eine Gruppe...
MEINE FRAGE WAR. ist es vor dem Punkt ein Device oder kann da auch die Gruppe stehen.
Und richtig... wenn ich nur Fenster im Notify stehen hab, kommt da nix.

Fenster irgendwas hab ich da nicht angelegt bzw. evtl. ist es beim Testen übrig geblieben. Daher frag ich, weil es halt nicht eindeutig beschrieben worden ist