Fhttk Melder Raspberry Pi als eMail mit Ein/Aus Schalter

Begonnen von gelberlemmy, 25 Januar 2013, 11:30:05

Vorheriges Thema - Nächstes Thema

gelberlemmy

Hallo liebe Forummitglieder,

ich bin noch ein kleiner Newpi in Sachen FHEM. Ich habe einen Raspberry PI mit Wheezy und FHEM 5.3 drauf. Habe Steckdosen Heizungssteuerungen und Fensterkontakte FHTTK von ELV.
Meine Idee ist es mir ein eine eMail zu senden ( wird als Pushnachricht auf mein Iphone weitergeleitet) wenn ein Fenster auf oder geschlossen wird. Dieses möchte ich aber auch
ein und ausschalten können. Da die Fensterkontakte nur in bestimmten Abständen Ihren Zustand senden, werde ich mir in nächster Zeit noch ein zwei Öffnungsmelder von
Homematic zulegen. Aber erst einmal müssen die alten Kontakte herhalten.
Ich habe schon send-email auf meinem Raspberry installiert. So jetzt gibt es ja diverse Anleitungen für mein Vorhaben. Aber irgendwie sind das alles nicht so das ganz richtige was ich haben möchte. Zum einem gibt es auf der FHEM Seite einmal beschrieben wie es gehen soll. " http://www.fhemwiki.de/wiki/FHTTK:_Benachrichtigung_bei_offenem_Fenster" Dort wird gesagt das man etwas in der 99_marte.pm einschreiben soll. Diese habe ich in FHEM gar nicht.

Gibt es jemanden von Euch, der mir hier mal schreiben kann, wo und was ich in die Config usw schreiben muss ???? Ich wäre Euch echt dankbar.


Gruß Gelberlemmy


det.

Hallo Gelberlemmy,

Du bist da schon genau auf dem richtigen Weg. Im WIKI gibt es neben der Anleitung für die Fenstermail auch eine, wie man eine 99_myUtils.pm anlegt. Dort kommt der Code rein, den der Verfasser des Beitrags 99_marte.pm genannt hat - das ist sozusagen Dein individueller Perl Modul für alles, was es hier nicht schon ganz fertig gibt. Der Name der Datei ist variabel, nur das 99_ ist wichtig, damit das Modul automatisch beim Start geladen wird. Die Zeitabhängikeit der Mail Nachrichten habe ich über WhoIsatHome gelöst, aber das bedingt eine FB im System. Es gibt hier im Forum aber genügend weitere Lösungsansätze dafür mit der Suchfunktion zu finden.
LG
det.

brmpfl

Moin,

zu FHTTK kann ich nix sagen, das habe ich nicht im Einsatz.
Die verlinkte Lösung habe ich mir angeschaut.
Das Problem an dieser Lösung ist, sie funktioniert so nur mit den genannten FHTTK-devices.
Trotzdem habe ich da ein wenig gespickt ;)

Ich habe mal auf die Schnelle eine andere Lösung gebastelt:
Mein Ziel dabei war es, nicht nur einen spezifischen Device-Typ zu behandeln.
Ich möchte aber auch einzelne Devices ausnehmen zu können.
 
Dazu habe ich in der fhem.cfg folgende Zeile (mag bei Euch anders aussehen) um den Eintrag "alarm" erweiteret:

attr global userattr icon webCmd alarm

Damit bin ich in der Lage, meinen Devices ein attribut alarm zu verpassen:

define FensterKontakt CUL_HM 1CC630
attr FensterKontakt alarm yes
...


Wozu das?
Über dieses Attribut kann ich steuern, welche Devices bei einem "AlarmEvent" behandelt werden sollen.
Das geschieht so:


define FensterAlarm notify .*:(open|closed|tilted) {\
  my $status = ReadingsVal("@", "state", "nn");;\
  my $deftype=$attr{@}{alarm};;\
  if ($deftype eq "yes") {\
    handleWindowAlarm;;\
  }\
}


Es wird also ein EventHandler "FensterAlarm" definiert, der auf alle Events "open" oder "closed" oder "tilted" reagiert.
Anschließend wird geprüft, ob für das Device, von dem dieses Event ausgelöst worden ist, das Attribut "alarm" auf yes steht und im postiven Falle die Funktion "handleWindowAlarm" ausgeführt.

Alle o.g. Einträge sind aus der fhem.cfg.

Die Funktion handleWindowAlarm wird am Besten in der Datei 99_myUtils.pm definiert.
Dazu gehst Du im Menü links auf "Edit Files" und klickst anschließend auf 99_Utils.pm
Anschließend trägst Du in der darauffolgenden Seite rechts neben dem Button "Save as" 99_myUtils.pm ein und klickst auf "Save as".
Jetzt taucht in Deiner Dateiliste eine Datei 99_myUtils.pm auf. Die öffnest Du, löscht alles darin und kannst Dich jetzt an die Funktion handleWindowAlarm machen.
Der Einfachheit halber kannst Du den Inhalt durch folgenden ersetzen:


##############################################
# $Id: 99_myUtils.pm
package main;

use strict;
use warnings;
use POSIX;

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

sub handleWindowAlarm
{
  my @devicelist = devspec2array("alarm=yes");
  foreach(@devicelist) {
    my $devname = $defs{$_}{NAME};
    my $state = ReadingsVal($_,"state", "??");
    Log 1, "Alarm handled for $devname, state: $state";
  }
}
1;


Speichern und im Eingabefeld oben "reload 99_myUtils" + ENTER eingeben.
Die Funktion handleWindowAlarm kannst Du natürlich nach Belieben erweitern.

Jetzt sollte beim Eintreffen eines o.g. Events für jedes Device eine entsprechende Meldung im Log erscheinen.

Um das zu prüfen muß man nicht zum Fenster flitzen um dieses aufzureißen.
Es genügt, wenn Du in der Eingabezeile folgendes eingibst:
trigger FensterKontakt open

Das setzt natürlich vorraus, das Du ein Device "FensterKontakt" definiert hast ;)

:)
Hajo

gelberlemmy

Danke für die Antwort. Kann ich in der neuen 99_ Datei auch die Email
Einträge einsetzen ?

det.

ja genau, da gehören sie hin und alles was Du noch für Dich selbst unterbringen willst.
LG
det.

gelberlemmy

Mal ne kurze andere Frage:


#######################################
# ist dies nur ein Platzhalter
# wie eine Überschrift ????
# kann ich damit min Config sortieren ?

gelberlemmy

So nun habe ich meine Alarmmails zum laufen bekommen. Aber wie schalte ich diese in der Config eingetragenen Werte ein oder aus ?

define Alarm_zu_Hause notify .*:Window.*(Open|Closed) { \
  my $window_state=ReadingsVal("@", "Window", "nA");;\
  my $deftype=$defs{@}{TYPE};;\
  return if ( $deftype ne "CUL_FHTTK" );;\
  if ( $defs{@}{PREVSTATE} ne $window_state ) { \
    my $fhttk_status=FHTTK_status;;\
    my $subject="FHEM: Fenster @ ".$window_state;; \
    DebianMail('meine mail@@tester.com' (@@tester.com'),'Subject','$fhttk_status');;\
    Log 3, "@: Window ".$window_state;;\
  }\
}

gelberlemmy

Das ganze sieht nun folgerndermanßen aus:

als erstes natürlich sendemail per ssh auf den PI installieren



99_myutils_pm:[/b]


######## DebianMail   Mail auf dem RPi versenden  ############

sub
DebianMail
{
  my $rcpt = shift;
  my $subject = shift;
  my $text = shift;
  my $ret = "";
  my $sender = "dfsgsfsrsf\@arcor.de";
  my $konto = "dfdfdfdf\@arcor.de";
  my $passwrd = "passport";
  my $provider = "mail.arcor.de";

  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=no);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  Log 1, "sendEmail returned: $ret";
}

#################eMail wenn Fenster auf############

sub FHTTK_status {
  my @fhttks = devspec2array("TYPE=CUL_FHTTK");
  my @wopen = ();
  foreach(@fhttks) {
    my $fhttk_window = ReadingsVal($_, "Window", "nA");
    push (@wopen,$_) if ($fhttk_window eq "Open" );
  }
  my $num_wopen = @wopen;
  my $resultstring='';
  if ( $num_wopen gt 0 ) {
    $resultstring="folgende Fenster sind noch offen:\n\n";
    foreach(@wopen) {
      $resultstring.="- ".$_."\n";
      Log 4, "FHTTK_status: ". $_. "noch offen";
    }
  } else {
    $resultstring="alle Fenster sind derzeit geschlossen.";
  }
  return $resultstring;
}

in der Config[/b]:


#############Alarmanlage######################

define Alarm_zu_Hause notify .*:Window.*(Open|Closed) { \
  my $window_state=ReadingsVal("@", "Window", "nA");;\
  my $deftype=$defs{@}{TYPE};;\
  return if ( $deftype ne "CUL_FHTTK" );;\
  if ( $defs{@}{PREVSTATE} ne $window_state ) { \
    my $fhttk_status=FHTTK_status;;\
    my $subject="FHEM: Fenster @ ".$window_state;; \
    DebianMail('email@@tester.com' (@@tester.com'),$subject,$fhttk_status);;\
    Log 3, "@: Window ".$window_state;;\
  }\
}

det.

z.B. so, der Teil von FHEM läut allerdings bei mir auf der FB

.*:Window.*(Open|Closed) {
  my $window_state=ReadingsVal("@", "Window", "nA");
  my $deftype=$defs{@}{TYPE};
  return if ( $deftype ne "CUL_FHTTK" ) || (Value("Xxx") eq "Anwesend" || Value("Yyyyy") eq "Anwesend") ;
  if ( $defs{@}{PREVSTATE} ne $window_state ) {
    my $fhttk_status=FHTTK_status;
    my $subject="FHEM: Fenster @ ".$window_state;
    FBMail('xxx@@mai.de',$subject,$fhttk_status);
    Log 3, "@: Window ".$window_state;
  }
}
LG
det.

gelberlemmy

OK,

wie hast du denn den Schalter definiert ? Als Dummy ? Und welche Zeile müsste ich dafür in der Config ändern, damit dies auch ein aus geschaltet wird.
Bin da nicht so der Profi.

det.

ich habe es wie schon oben geschrieben über die über WhoIsatHome Funktion gelöst, da ich diese Benachrichtigungen nur bekommen will, wenn meine Frau und / oder ich nicht daheim ist /sind. So kann bekomme ich im Urlaub mit, wie sich meine Nachbarn z.B. um die Katze kümmern. Da sie von der Überwachung wissen, geben sie sich total Mühe...
LG
det.

gelberlemmy

So wie ich das gelesen habe, geht das ja nur mit
Der fritzbox.

gelberlemmy

Guten morgen,
keiner ne Idee wie ich diese Email per webschalter
Ein und ausschalten kann ????

brmpfl

Moin,

definiere ein Dummy-Device, weise dem die Attribute webCmd und setList mit den enstprechenden Werten zu, frage diesen Wert ab, bevor die eMail gesaendet wird, feddich.

:)
Hajo

gelberlemmy

Danke für die Antwort. Da ich ein kleiner newpi
bin, gut Dummy erstellen. Aber wie frage ich die Werte ab ?

brmpfl

s.o.:

ReadingsVal(<devicename>,<reading>,<defaultvalue>);
:)
Hajo

gelberlemmy

Zum devicenamen, wie wird dieser denn
abgefragt ? Theoretisch müsste ich dann immer an der
Weboberfläche anmelden ?

gelberlemmy

Kann man nicht einfach einen Schalter
anlegen, womit ich die Emails ein und ausschalten
kann  ????