Wassermelder HMS 100 WD - E-Mail versenden

Begonnen von musicnrw, 15 März 2018, 09:04:00

Vorheriges Thema - Nächstes Thema

musicnrw

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




Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Pfriemler

#2
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)
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

musicnrw

Vielen Dank schonmal für Eure Hilfe und Infos. Ich werde mich heute Abend mal daran machen und die Dinge checken.

Gruß, Thomas

musicnrw

#4
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?

Otto123

Zeig mal bitte den kompletten Inhalt Deiner 99_myUtils.pm

ohne Adressen und Passwörter!!!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Pfriemler

#6
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 ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Pfriemler

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

musicnrw

#9
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;

Otto123

#10
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

musicnrw

Ja genau, dann kommt die vorher genannte Fehlermeldung.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Pfriemler

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/
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.

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Otto123

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  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz