FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: musicnrw am 15 März 2018, 09:04:00

Titel: Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 09:04:00
Hallo zusammen,
ich habe einen Wassermelder HMS 100 WD und möchte, wenn dieser Wasser detektiert, eine E-Mail aus FHEM versendet wird.
Dazu habe ich sendemail installiert und vom Terminalfenster aus (LINUX-Konsole) kann ich auch E-mails versenden, d.h. die grundlegende Funktion sollte einwandfrei funktionieren. Die Funktion DebianMailNoAttach habe ich in der 99_myUtils eingetragen und mit meinen E-Mail-Zugangsdaten konfiguriert.

Leider schaffe ich es trotz zig Versuchen nicht, die E-Mail als Ereignis nach einer Wasser-Detektion aus FHEM zu versenden.

Ich habe dazu folgende Definitionen in der fhem.cfg gemacht:
# Wasseralarm
define WATER.dum dummy
set WATER.dum off


# HMS100-W Wassersensor
define HMS100WD_a9fe HMS 1002
attr HMS100WD_a9fe alias Wassermelder_oben
attr HMS100WD_a9fe model hms100-w
attr HMS100WD_a9fe IODev CUL868FS20
attr HMS100WD_a9fe room HMS
define FileLog_HMS100WD_a9fe FileLog ./log/HMS100WD_a9fe-%Y.log HMS100WD_a9fe
attr FileLog_HMS100WD_a9fe logtype text
attr FileLog_HMS100WD_a9fe room HMS


Der Wassermelder wird korrekt im Raum HMS angezeigt und das Reading "water_detect" wechselt auch von off zu on, wenn Wasser an den Kontakten erkannt wird.

Das notify zum Versenden der E-Mail sieht so aus:
define WD.not.01 notify HMS100WD_a9fe:.*Water.*Detect:.*on.* {\ if (ReadingsVal("WATER.dum","state","off") eq "off") {\ fhem("set WATER.dum on");;\ fhem("define at.WATER.dum.off at +00:30:00 set WATER.dum off");;\ {DebianMailNoAttach 'xxx.yyy@gmx.de','xxx.yyy@gmx.de','FHEM Wasser','Wassermeldung oben');;};;\ } \}

Wie gesagt, eine E-Mail wird nicht versendet. Was mache ich falsch??

Vielen Dank für Eure Hilfe!
Thomas



Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 09:25:56
Hallo Thomas,

was läuft falsch:
bitte Code Tags verwenden, die # Taste über dem  :-X Smiley.

Funktioniert denn der Befehl in der FHEM Kommandozeile?
{DebianMailNoAttach ('thomas.herbst@gmx.de','thomas.herbst@gmx.de','FHEM Wasser','Wassermeldung oben')}
Wenn ja siehst Du direkt den Fehler wenn Du meine Codezeile genau anschaust, wenn nein: Was steht als Fehlermeldung im Log?

Was läuft noch falsch?: fhem.cfg direkt Editierer  :o ::) :-[ :'(

Gruß Otto
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 15 März 2018, 09:38:00
ZitatWas mache ich falsch?
Deine e-mail-Adresse im Klartext zu posten. Ich würde den Beitrag mal ändern.

Abgesehen davon schwebt bei dieser für einen Nicht-Notify-Profi (wie mich) ein DOIF vor meinem geistigen Auge, was ohne den Dummy auskommt und mit cmdpause und ähnlichen Attributen in ca 10 lesbaren kurzen Zeilen das gleiche tut. Aber das ist offtopic.

Ich habe mal Deine Def importiert und so lange modifiiert, bis ich keine Fehlermeldungen mehr bekommen habe. Überhaupt ist es viel lesefreundlicher
a) Codes in Codetags zu verwenden
b) die Defs aus der Oberfläche im DEF-Editor zu kopieren - oder wenigstens aus der RAW definition - anstatt sie aus der fhem.cfg (von den Semikolons wird mir immer ganz wuschig  ;)):

HMS100WD_a9fe:.*Water.*Detect:.*on.* {
if (ReadingsVal("WATER.dum","state","off") eq "off") {
fhem("set WATER.dum on");
fhem("define at.WATER.dum.off at +00:30:00 set WATER.dum off");
DebianMailNoAttach ('vorname.name@gmx.de','vorname.name@gmx.de','FHEM Wasser','Wassermeldung oben');
}
}


und nu siehste, das ist genauso schön lesbar wie ein DOIF.

edit: Ah, Otto war mal wieder schneller ...  (händehochhebend)
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 10:00:25
Vielen Dank schonmal für Eure Hilfe und Infos. Ich werde mich heute Abend mal daran machen und die Dinge checken.

Gruß, Thomas
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 19:37:13
Hallo zusammen,
hab gerade mal getestet:
Wenn ich den Befehl von OTTO in die Kommandozeile eintippe kommt eine Fehlermeldung:
Undefined subroutine &main::DebianMailNoAttach called at (eval 14846) line 1.

Wenn ich den Code von Dir, Pfriemler, verwende, erhalte ich ebenfalls eine Fehlermeldung:
Unknown command HMS100WD_a9fe:.*Water.*Detect:.*on.*, try help. Unknown command fhem("define, try help. Unknown command DebianMailNoAttach, try help. Unknown command }, try help.

Habt Ihr noch Ideen?
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 19:43:20
Zeig mal bitte den kompletten Inhalt Deiner 99_myUtils.pm

ohne Adressen und Passwörter!!!
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 15 März 2018, 19:45:26
Tja, wenn ich lese ...

Zitat von: musicnrw am 15 März 2018, 09:04:00
... Funktion DebianMailNoAttach habe ich in der 99_myUtils eingetragen und mit meinen E-Mail-Zugangsdaten konfiguriert.

dann gehe ich davon aus, dass das bereits funktioniert. Kann man ja über die Kommandozeile problemlos testen. Vorher brauchen wir uns über Notifys oder DOIFs keine Gedanken zu machen...

und mein Vorschlag gehört natürlich ins DEF-Fenster in der Notify-Definition - ohne Notify davor kann es ja nicht funktionieren ...
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 19:46:49
Wir zwei synchron Denker  ;D ;D ;D
Titel: OT: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 15 März 2018, 19:48:42
Das kann noch was werden mit uns ...   8)
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 20:07:05
Sorry, ich bin echt Anfänger, wie nicht unschwer zu erraten.

Was genau bedeutet das nun, wie setze ich das in der Praxis um:
"...und mein Vorschlag gehört natürlich ins DEF-Fenster in der Notify-Definition - ohne Notify davor kann es ja nicht funktionieren ..."


Hier der entsprechende Inhalt meiner 99_myUtils:

##############################################
# $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.

use Time::Local;

package main;

use strict;
use warnings;
use POSIX;

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

# Enter you functions below _this_ line.

###################################################
###     Spritpreisübersicht - Farbsortierung    ###
###################################################

sub Werte($$) {
  my ($name, $wert) = @_;
# Log(3,"$name $wert");
  if ($name eq "Diesel") {
    return 'style="color:red"' if($wert >= 1.39);
    return 'style="color:blue"' if(($wert >= 1.33) && ($wert < 1.39));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.32);
  }elsif ($name eq "SuperE10") {
    return 'style="color:crimson"' if($wert >= 1.70);
    return 'style="color:yellow"' if(($wert >= 1.55) && ($wert < 1.70));
    return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.55);
  }elsif ($name eq "SuperE5") {
    return 'style="color:red"' if($wert >= 1.59);
    return 'style="color:blue"' if(($wert >= 1.49) && ($wert < 1.59));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.48);
  } 
}

#### Abfall-Kalender Hilfsfunktion zur Auswertung ####
#
# Hilfsfunktion für Kalenderauswertungen
#

sub
KalenderDatum($$)
{
   my ($KalenderName, $KalenderUid) = @_;
   my $dt = fhem("get $KalenderName start uid=$KalenderUid 1");
   my $ret = time - 86400;  #falls kein Datum ermittelt wird Rückgabewert auf "gestern" -> also vergangener Termin

   if ($dt and $dt ne "")
   {
      my @SplitDt = split(/ /,$dt);
      my @SplitDate = split(/\./,$SplitDt[0]);
      $ret = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
   }

   return $ret;
}

#### Abfall-Kalender Hilfsfunktion zur Auswertung ####
#
# Hilfsfunktion für Kalenderauswertungen
#

sub
KalenderDatum($$)
{
   my ($KalenderName, $KalenderUid) = @_;
   my $dt = fhem("get $KalenderName start uid=$KalenderUid 1");
   my $ret = time - (2*86400);  #falls kein Datum ermittelt wird Rückgabewert auf "vorgestern" -> also vergangener Termin;

   if ($dt and $dt ne "")
   {
      my @SplitDt = split(/ /,$dt);
      my @SplitDate = split(/\./,$SplitDt[0]);
      $ret = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
   }

   return $ret;
}


#
# Abfall Kalender auswerten / Google Kalender: "Abfall"
#

sub
Abfalltermine()
{
   my $t  = time;
   my @Tonnen = ("Restmuell", "GelberSack", "PapierTonne", "BioTonne");
   my @SuchTexte = (".*Rest.*", ".*Gelb.*", ".*Papier.*", ".*Bio.*");
my $uid;
   my $dayDiff;
 
   for(my $i=0; $i<4; $i++)
   {
      $dayDiff = -1; #BUG behoben
      my @uids = split(/;/,fhem("get Abfall find $SuchTexte[$i]"));
       
      # den nächsten Termine finden
      foreach $uid (@uids)
      {
         my $eventDate = KalenderDatum('Abfall', $uid);
         my $dayDiffNeu = floor(($eventDate - $t) / 60 / 60 / 24 + 1);
         if ($dayDiffNeu >= 0 && ($dayDiffNeu < $dayDiff || $dayDiff == -1)) #BUG behoben
         {
            $dayDiff = $dayDiffNeu;
         }
      }
       
      fhem("setreading MuellterminDummy $Tonnen[$i] $dayDiff");
   }
}

######## DebianMail  Mail auf dem RPi versenden ############
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "xxxx.yyyy\@gmx.de";
my $konto = "xxxxx.yyyyy\@gmx.de";
my $passwrd = "zzzzzzzz";
my $provider = "mail.gmx.net:587";
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);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}
sub
DebianMailNoAttach
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $ret = "";
my $sender = "xxxxx.yyyyy\@gmx.de";
my $konto = "xxxxx.yyyyy\@gmx.de";
my $passwrd = "zzzzzz";
my $provider = "mail.gmx.net:587";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=auto -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}

1;
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 20:31:53
Gut die 99_myUtils sieht auf den ersten Blick ok aus.

Wenn Du das hier komplett.
{DebianMailNoAttach ('thomas.herbst@gmx.de','thomas.herbst@gmx.de','FHEM Wasser','Wassermeldung oben')}
mit Copy&Paste in die FHEM Kommandozeile einwirfst - siehe Anhang.

- bekommst Du den Fehler, den Du oben geschrieben hast?


Zu Deiner Frage nach dem DEF Editor
https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM#Bestehende_Devices_ver.C3.A4ndern_.E2.80.93_modify

Gruß Otto
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 20:33:01
Ja genau, dann kommt die vorher genannte Fehlermeldung.
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 20:45:47
Abgesehen davon, dass der Aufruf nicht stimmt sollte nicht dieser Fehler kommen :(
Andere sub aus der 99_myUtils funktionieren?
Du hast ein reload 99_myUtils.pm gemacht nach dem editieren?

Aufruf korrekt:
{DebianMailNoAttach ('empfaenger@gmx.de','Subject','Text')}

Gruß Otto
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 15 März 2018, 21:02:03
musicnrw hat sich das nicht allein ausgedacht. Hier steht das nämlich auch schon (falsch):
http://www.hjgode.de/wp/2015/11/25/fhem-batteriewarnung-per-email/ (http://www.hjgode.de/wp/2015/11/25/fhem-batteriewarnung-per-email/)
wie auch immer: ich halte das auch für falsch und stimme Ottos Vorschlag zu.

Zitat von: Otto123 am 15 März 2018, 20:45:47
Du hast ein reload 99_myUtils.pm gemacht nach dem editieren?
Muss man das noch extra? Ich meine das macht FHEM nach einem Klick auf "save 99_myUtils.pm" alleine. Zumindest bei mir.

Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 21:22:14
Zitat von: Pfriemler am 15 März 2018, 21:02:03
Muss man das noch extra? Ich meine das macht FHEM nach einem Klick auf "save 99_myUtils.pm" alleine. Zumindest bei mir.
Ja macht er - aaaber auch beim "fhem.cfg direkt Editierer"  :-X  ;)
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 15 März 2018, 22:45:17
Reload hab ich gemacht, alles andere aus der 99_myUtils läuft problemlos.
Auch der korrigierte Code von Otto erzeugt den gleichen Fehler nac Eingabe in der Befehlszeile...
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 15 März 2018, 23:09:19
Funktioniert bei mir ohne Probleme, Du solltest sogar eine Mail bekommen haben?  ;D

Da habe ich keine weitere Idee  :-[
Edit:
Mach mal in der sub davor den Zeilenumbruch in dieser Zeile raus  :o :o :o
$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);


Gruß Otto
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 16 März 2018, 00:05:29
Same here. Einkopiert, Aufruf mit drei Parametern, und nach einem Fehler im Log, dass sendEmail nicht installiert wäre ... nachgeholt und Testmail: Angekommen.

@Otto123: Welchen Zeilenumbruch? Im List vom Fragensteller sehe ich keinen.

Ich hatte noch ne Idee mit use strict; und den fehlenden Klammern hinter dem Subnamen, aber das ist erlaubt und ok.
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 16 März 2018, 00:10:30
In der von mir kopierten Zeile aus der sub debianmail unmittelbar davor. Damit ist diese kaputt und alle folgenden folgenden - oder?
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Tom Major am 16 März 2018, 01:17:03
Zitat von: musicnrw am 15 März 2018, 19:37:13
Hallo zusammen,
hab gerade mal getestet:
Wenn ich den Befehl von OTTO in die Kommandozeile eintippe kommt eine Fehlermeldung:
Undefined subroutine &main::DebianMailNoAttach called at (eval 14846) line 1.
Habt Ihr noch Ideen?

Versuche mal entweder eine Zeile für die sub Deklaration
sub DebianMailNoAttach
oder mit Klammern
sub
DebianMailNoAttach ($$$)


Ich glaube ich hatte mal ein ähnliches Problem, ist aber zu lange her.
Jedenfalls stehen meine subs entweder auf einer Zeile oder haben Klammern, aber nie die Kombi die ich bei Dir für DebianMailNoAttach sehe (2 Zeilen und keine Klammern).

Erklärt nicht warum es bei Otto123 und Pfriemler geht, aber einen Versuch ist es wert.
Und sicherheitshalber das reload nach dem Editieren machen.
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 16 März 2018, 09:35:16
Ich weiß nicht, alle Vermutungen sind nicht richtig weder die sub in einer Zeile noch die Klammern sind relevant. Auch meine Vermutung mit dem Zeilenumbruch im Aufruf in der Sub davor spielt keine Rolle.

Ich habe jetzt die komplette 99_myUtils.pm von musicnrw aus Post # 9 kopiert, den Inhalt meiner 99_myUtils durch diesen ersetzt, Konto richtig eingetragen und mit der sub DebianMailNoAttach erfolgreich Mails versendet!

Das Problem muss irgendwo anders sein  :'(, eventuell ... - sag ich jetzt nicht.  ;D

Gruß Otto
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Pfriemler am 16 März 2018, 10:47:27
Ich habe die ganze gelistete 99_myUtils auch schon nach irgendwelchen vergessenen Klammern abgeklopft ... alles sauber.

Gehen denn die restlichen Routinen aus der myUtils überhaupt? Reden wir hier vom richtigen Vorkommen der 99_myUtils, d.h. fanden die Änderungen in der Datei statt, die auch FHEM tatsächlich nutzt?
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 16 März 2018, 10:58:56
Ja, der Rest in der 99_myUtils funktioniert ohne Probleme; und in meiner FHEM-Installation gibt es auch nur diese 99_myUtils.
Ich werde mich nochmals von A bis Z damit auseinandersetzen und Eure Ansätze testen bzw. umsetzen.

Vielen Dank für Eure Arbeit.
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: Otto123 am 16 März 2018, 11:04:20
Hast Du mal die sub davor DebainMail getestet?

Die Fehlermeldung
ZitatUndefined subroutine &main::DebianMailNoAttach called at (eval 14846) line 1.
deutet meiner Meinung nach eindeutig daraufhin, dass FHEM (Perl) die sub DebianMailNoAttach nicht findet. Man kann diese Fehler leicht produzieren:
{willi()} ergibt Undefined subroutine &main::willi ...
Titel: Antw:Wassermelder HMS 100 WD - E-Mail versenden
Beitrag von: musicnrw am 16 März 2018, 11:43:18
Noch nicht, mache ich später mal wen ich zuhause bin.