FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ChrisW am 15 Januar 2013, 12:09:28

Titel: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 12:09:28
Hallo,
ich möchte gerne von Fhem mir eine Mail schicken lassen wenn der Status von Chris / Tanja OFF ist. und eins der Fenster geöffnet ist.
Mail Versand für Windows ist wie im Wiki beschrieben eingerichtet und funktioniert auch.

Habe 4 Fenster Sensoren ( Max ) im Raum "Fenster":

Bad_Fenster closed
Kueche_Fenster closed
KZ_Fenster closed
SZ_Fenster closed


In der Mail solle jetzt etwas stehen das man weis was gemeint ist :
z.b: Abwesend: ***_Fenster Open


define Fenster_Anwesend notify Anwesenheit.*:.* {\
if ((Value("Anwesenheit_Chris") eq "on") || (Value("Anwesenheit_Tanja") eq "on")) {\
  if ([b]( HIER INHALT OB EINS DER FENSTE RIM RAUM FENSTER OFFEN IST )[/b]) {\
    (HIER MUSS NICHTS PASSIEREN)    
  }\
}\
if ((Value("Anwesenheit_Chris") eq "off") && (Value("Anwesenheit_Tanja") eq "off")) {\
    fhem ( system("wmail @:%") );;\ <<< Mail Funktion muss so angepasst werden das man auch weiss was mit der Mail gemeint ist
  }\
}


Kann mir jemand helfen den Code zu vervollständigen ?
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 12:12:57
Hallo,

hier

if (Value("Batterie_Leer") eq "OK") {
fb_mail('xxxxx.yyyyyyy@@provider.de','FHEM Batteriewarnung','@ %');


kommt als Mail

OG_Badezimmer_Heizung battery: low

@ ist der Sensor welcher ausgelöst hat und
% warum er ausgelöst hat.

evtl. hilft dir das schonmal weiter.

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 12:20:36
hi, genau das mit dem @:% hab ich auch schon raus gefunden. Muss ich mal gucken ob ich da einfach noch was zuschreiben kann wie ABWESEND.

Weil wenn Frau ne Mail bekommt mit Bad_Fenster open ... sollte da schon noch stehen Abwesend: :P

Da für Später auch ne Prüfung gibt ob Fenster länger als 30 Minuten auf ist :P Aber das folgt nach der Abwesend Erkennung hehe
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 12:33:20
Wieso?
Lass doch die Mail nur verschicken wenn ihr abwesend seid.
Zuhause kansnt du ja nach 30 Minuten ein Licht einschalten wenn das Fenster immer noch offen ist.

Ich hab bei uns jetzt sowas wie ne Akku-Erhaltungsladung "gecoded".

Hintergrund:
2 Ladestation (vorerst) mit FS20ST ausgerüstet.
Ladestation_Bar und
Ladestation_GZ

Jeden Samstag ab 21:15:00 werden die beiden Ladestationen auf
set Ladestation_Bar Laden und
set Ladestation_GZ Laden gesetzt.

Das notify triggert natürlich auf Laden und sieht so aus:

Ladestation.*:Laden.* {
  Log (3,"Aufruf durch @");
  fhem("define @_Aus at +06:00:00 set @ off") if (Value("@_Aus") eq "");
}


Weiters kann man die Ladestationen auch über FHEM laden lassen - logischerweise.
Dafür habe ich ein
attr webcmd Laden
verteilt.

Egal welche Ladestation ich nun ins Laden schicke wird automatisch das zugehörige *_Aus definiert und die auslösende
Ladestation nach 6 Stunden wieder abgeschaltet.
Der Teil mit dem Log kommt wieder raus ;-)

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 12:38:03
hmm klar will ich auch nur eine Mail wenn ich Abwesend bin.
Aber weiss nicht wie mir dein Code bei mir weiterhilft ?
Ich muss ja erstmal eine Möglichkeit finden meine Fenster zusammen zu legen.
Könnte ein Dummy machen aber da weiss ich dann nicht WELCHES Fenster gemeint ist.

Oder Ich müsste für jedes Fenster einzeln ein Code bauen was wohl der einfachere weg ist.
Somit fehlt mir also nur der Code wenn beide Anwesendheit OFF sind UND Zusätzlich das Fenster open ist dann Mail.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 12:40:12
Oder geht es so einfach:


if ((Value("Anwesenheit_Chris") eq "off") && (Value("Anwesenheit_Tanja") eq "off") &&  (Value("Bad_Fenster") eq "open" ){\
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 12:53:28
Hmm hab mal den Status Closed genommen für den Test erstmal aber bekomme fehler:


define Fenster_ABWESEND notify Anwesenheit.*:.* { \
if ((Value("Anwesenheit_Chris") eq "off") && (Value("Anwesenheit_Tanja") eq "off") && (Value("Bad_Fenster") eq "closed" )){\
} \
Log (3,"FENSTER AUF EMAIL GESCHCIKT");;\
else { \
Log (3,"FENSTER ZU ALLES OK KEINE MAIL");;\
}\
}


2013.01.15 12:52:42 3: Fenster_ABWESEND return value: syntax error at (eval 28) line 1, near "; else"
syntax error at (eval 28) line 1, near "} }"
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 12:59:32
Kannst du machen, aber dann musst du für jedes Fenster die Abfrage programmieren.
Da deine Fenster aber
Bad_Fenster
Kueche_Fenster
KZ_Fenster
SZ_Fenster
heissen brauchst du ja nur nach
*_Fenster suchen bzw. triggern lassen.

Ich würd das so lösen:

Wenn Fenster auf nach x Minuten die Prüfung ob alle weg und dann die Mail raus.

define Fester_pruef notify *_Fenster:.* {
  if (% eq "open") {
  fhem ("define Alarm_@ at +00:30:00 trigger Anwesenheit @");
  }
  if (% eq "closed" {
  fhem ("delete Alarm_@)" if (Value("Alarm_@") ne "");
  }
}

ungestestet ;-)

Sollte aber den Vorteil haben das mit @ auf genau das Fenster geprüft werden kann.
Wenn 2 Fenster offen sind sollten 2 Alarm_@ angelegt werden die beim schliessen genauso auch wieder
gelöscht werden (sollten).
Mit etwas Glück kannst du das @ dann in Anwesenheit weiter auswerten und dann die Mail so stricken das im Text auch das
@ steht und du somit die Mail bekommen solltest welches Fenster noch offen ist.

Ist sicher noch ausbaufähig ;-)

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:00:16
Du musst vor else noch eine } setzen.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:01:32

define Fenster_ABWESEND notify Anwesenheit.*:.* { \
if ((Value("Anwesenheit_Chris") eq "off") && (Value("Anwesenheit_Tanja") eq "off") && (Value("Bad_Fenster") eq "closed" )){\
Log (3,"FENSTER AUF EMAIL GESCHCIKT");;\
}\
else { \
Log (3,"FENSTER ZU ALLES OK KEINE MAIL");;\
}\
}


So müsste es gehen.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 13:08:13

system("wmail ABWESEND:@:%")


Bekomme nun ne Mail aber da steht nicht das Fenster drin:

ABWESEND:Anwesenheit_Tanja:off
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 13:09:58
Derzeitige Lösung Ich Schreib nen manuellen Text einfach rein :P Mache ja eh jedes Fenster einzeln *G*

Also Problem Gelöst.

Nun wäre das selbe 1:1 nur ohne Abwesenheit sondern mit nem Timer
Also Fenster XX Minuten Auf = mail dafür mach ich zur Übersicht mal etwas neues auf ;)
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:12:16
Logisch,

dann hast du Anwesenheit ausgelöst indem die Ping-Prüfung der Meinung war das Handy Tanja off ist ;-)

In diesem Fall wird die Prüfung ja nur angesprungen wenn einer von euch beiden off ist und das hast du dann in
@ und % stehen.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:13:26
Und wenn du das notify von mir mal versucht ;-)
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 13:17:10
Stimmt das werd ich zur Optimierung danach mal versuchen ;D

Hier der fertige Code falls es jemand auch gebrauchen kann:

define Fenster_ABWESEND notify Anwesenheit.*:.* { \
if ((Value("Anwesenheit_Chris") eq "off") && (Value("Anwesenheit_Tanja") eq "off") && (Value("Bad_Fenster") eq "opened" )){\
Log (3,"Abwesend Badezimmer AUF EMAIL GESCHCIKT");;\
fhem (system("wmail ABWESEND_aber_BADEZIMMER_FENSTER_noch_OFFEN"));;\
}\
else { \
}\
}



Wegen E-mail Betreff und Leerzeichen muss ich noch schauen.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:19:11
Und jetzt das selbe noch für alle anderen Fenster ;-)
Das wäre mit dem notify erschlagen und das schöne ist das du die Anwesenheitsprüfung nicht nur mit on oder off anspringen kannst
sondern mit allem was sich bietet da du ja nach :.* prüfst
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 13:28:27
hmm ja da gebe ich dir recht aber ich weiss leider nicht wie ich das umsetzen kann *G*

Bzw. Werde ich dies sicherlich auch für meine Fenster Offen Timer sache brauchen oder ??
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 13:44:02
Guckst du das notify von mir ;-)
Versuchs mal damit.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 13:54:40
oh das da oben hab ich gar nicht gesehen ...


define Fester_pruef notify *_Fenster:.* {
if (% eq "open") {
fhem ("define Alarm_@ at +00:30:00 trigger Anwesenheit @");
}
if (% eq "closed" {
fhem ("delete Alarm_@)" if (Value("Alarm_@") ne "");
}
}



Es wird wenn ein Fenster Status sich verändert z.b in opened ein Alarm erstellt mit 30 Minuten.
Wenn das ganze nochmal durchläuft da sich wieder ein Status vom Fenster ändert und Fenster closed ist wird der Alarm wieder gelöscht.
Das habe ich ja verstanden.
Aber wie bringe ich nun nach ablauf der 30 minuten vom Alarm dazu das Alarm den Mail Befehl Verschickt MIT dem Richtigen Fensternamen ?
Und was ist wenn 2-3 Fenster Auf sind. Dann wird ja wenn ein anders Fenster geschlossen wird der Alarm gelöscht ?
Also müsste ich hier auch für jedes Fenster einen Alarm basteln ..

Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 14:15:20
Das ist das schöne am @ ;-)

Wenn EIN Fenster geöffnet wird (status open) wird für genau dieses Fenster der Alarm erzeugt.
z.B. Bad_Fenster open
dann hast du einen Alarm der sich
Alarm_Bad_Fenster nenn(t)en sollte.
Dieser Alarm löst nach 30 Minuten mit dem trigger
Anwesenheit Bad_Fenster
aus.
Genauso macht es WZ_Fenster open nur das der Alarm dann
Alarm_WZ_Fenster heissen müsste.

In Anwesenheit prüfst du dann ob ihr auch Abwesend seid und kannst dann ganz elegant nach @ (Bad_Fenster hier)
so auch die Mail loslassen.
Du musst nur evtl. die Anwesend-Prüfung etwas allgemeiner gestalten und dann von dort diverse Aktionen triggern lassen.
Dann hast du nicht alles in Anwesend stehen.

Ich muss nur noch nen Hefezopf machen mit meiner Frau und was umbauen dann versuch ichs mal bei uns ;-)

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 14:23:56
HI,
okay danke jetzt hab ich das zu mindest verstanden.

Erstmal unabhängig von der Anwesenheit erzeugt er bei jeder Fenster Änderung einen Alarm. Bzw Löscht diesen wieder.

Somit müsste ich dann eine neue Abwesenheits Geschichte erstellen.

Möchte ungerne meine jetzige so  umbasteln das die nicht mehr mit meinen anderen sachen Lampen / Heizungs Steuerung funktioniert.

Da brauch ich jedenfalls Hilfe :P

Werde auch erstmal den Alarm einbasteln kann jetzt von der Arbeit auch kein fenster aufmachen um es zu testen :P
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 14:49:15
Hallo,

ich würde nicht noch eine zusätzliche Anwesenheitsprüfung erstellen sondern die vorhandene soweit umbauen das darin
dann nicht nur das Licht geschaltet wird sondern auch Geräte ein- oder ausgeschaltet werden bzw. eben wie nun, eine
Mail geniert wird.
Da du das ja alles, logischerweise, von der Anwesenheit abhängig machst würde ich dort ansetzen ;-)

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 14:56:16
Oha bisher hab ich aber für alles was eigenes gebaut was auf Anwesenheit zu greift.

Also meiene Anwesenheitsprüfung ist nur per Ping mit dem ergebnis ON / Off
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 16:05:25
Hallo,

ja, ok.
Da müssen wir trennen anfangen.
Du hast einmal Anwesenheit per Ping <<-- sagen wir Anwesenheitsprüfung ,das ist so weit ok.

Dann hast du ja noch das notify welches du per Anwesenheit:.* (o.s.ä) aufrufst.
d.h. dieses notify triggert ja schon zum prüfen wer abwesend/anwesend ist.
Nach diesem Notify verteilst du ja schon Aktionen.
Mit diesem notify kannst du jetzt mehrere Dinge anstellen:
Du lässt es durchlaufen wenn sich ein Handy off / on meldet -- ok
Du kannst es auch durchlaufen lassen wenn ein Fenster / Tür offen ist ;-)
Du kannst es auch durchlaufen lassen wenn der Fernseher an ist.

Du musst dann nur in diesem notify die einzelnen Fälle abarbeiten welche du geprüft haben möchtest.

Ist eines Eurer Handys off / on -- ok, wird geprüft was zu machen ist.
Ist ein Fenster /Tür auf -- ab ins notify und schauen ob wer da ist dann Licht an sonst Mail raus.
Ist der Fernseher ein aber später als 23 Uhr - ok, das bekommst du damit jetzt (noch) nicht geprüft :-(

Wie gesagt.
Ich würd bei dir, soweit es geht, alles über das Anwesend-notify machen.

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 15 Januar 2013, 16:17:51
Hm ich glaub ich werd das alles nochmal neu angehen. Die Ping Prüfung taugt leider nichts habe da zu viele Fehler trotz meiner 10 Minuten Verlängerung. Scheint am Ping befehl zu liegen da mein CMD Ping zuverlässig ist.

Wenn ich aber alles in eins Packe ist das doch ziemlich unübersichtlich.

Am besten wäre das ich ertsmal ein zuverlässigen Status habe:

Zuhausestatus: Tanja / Chris /Tanja&Chris

Aber derzeit blick ich da gar nicht mehr durch HAHA :P
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: Puschel74 am 15 Januar 2013, 16:35:19
Na den Zuhause-Status hast du ja schon oder nicht?
Ich dachte die Ping-Prüfung wäre, mehr oder weniger, abgeschlossen?
Bis au, das sie relativ unzuverlässig zu sein scheint, aber dazu gibt es ja den Beitrag mit dem Online-Status im Router abfragen.
Diese "Baustelle" brauchen wir hier ja nicht auch noch aufgreifen ;-)

Aber ich dachte der Anwesenheits-Status wäre erledigt?
Darauf kannst du ja jetzt aufbauen.
Aber ich glaub wir machen erstmal per PM weiter und du postest das Ergebniss dann einfach hier.
Also schick mir doch bitte nochmal dein Anwesenheits-Notify welches auslöst sobald ein Handy on oder off "geht".

Grüße
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 16 Januar 2013, 19:56:54
Hallo,

hier das Fertige Ergebnis:

define Fenster_Abwesend_Check notify .*._Fenster:.*|Anwesenheit_.*:.* {\
  if (Value("@") eq "opened") {\
    if (Value("Anwesenheit_Einer") eq "off") {\
 Log (3,"Fenster auf gelassen und niemand zuhause");;\
fhem (system("wmail !!!!!ACHTUNG_ABWESEND!!!!!aber_@_noch_offen!!!!!"));;\
}\
if (Value("Anwesenheit_Einer") eq "on") {\
 Log (3,"Fenster auf und alle zuhause");;\
}\
  }\
  if (Value("@") eq "closed") {\
if (Value("Anwesenheit_Einer") eq "off") {\
 Log (3,"Fenster zu und niemand zuhause");;\
}\
if (Value("Anwesenheit_Einer") eq "on") {\
 Log (3,"Fenster zu und alle zuhause");;\
}\
  }\
}
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ext23 am 23 Januar 2013, 21:20:48
Guten Abend, ich hab mal eine Frage zur Syntax zu dem folgenden Code wo ich Chris sein Posting weiter oben als Grundlage benutzt habe:


define Fester_Alarm_Bad notify bz_Fenster:.* {\
  if (% eq "open") {\
    fhem("define Alarm_@ at +00:20:00 trigger az_SISPM_4 on");\
  }\
  if (% eq "closed") {\
    fhem("delete Alarm_@") if (Value("Alarm_@") ne "");\
  }\
}


In dem Code müssen noch Syntaxfehler sein aber ich sehe nicht wo.

Ich verstehe aber auch die Zeile "fhem("delete Alarm_@") if (Value("Alarm_@") ne "");" nicht so ganz, wieso die if Abfrage nach dem delete kommt? Hier stehe ich irgendwie auf dem Schlauch, vielleicht kann mir einer helfen denn das ist genau das was ich brauche, eine Alarmmeldung wenn das Badfenster vergessen wurde zu schließen.

danke.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 23 Januar 2013, 21:25:59
Hm Glaub ich hab da schon ne neuere Version ich Poste mal den Code der klappt bei mir dieser Code Prüft ob ein Fenster zu lange ( länger als 30 Min ) offen ist.
Abwesenheit Fenster Check ist noch im Bau.

#FENSTER VERGESSEN PRÜFUNGEN
define Fenster_Vergessen_Check notify .*._Fenster:.* { \
  if ("%" eq "opened") { \
      fhem ("define @_Alarm at +00:30:00 set @_vergessen offen") if (Value("@_Alarm") eq "");;\
  }\
  else {\
    fhem ("delete @_Alarm") if (Value("@_Alarm") ne "");;\
    fhem ("set @_vergessen geschlosssen") if (Value("@_vergessen") ne "geschlosssen");;\
  }\
}

define Fenster_Vergessen_Mail notify .*._Fenster_vergessen:.* {\
  if ("%" eq "offen") {\
fhem (system("wmail !!!!!ACHTUNG!!!!!_@!!!_zu_lange_%"));;\
fhem (sendNotify ("@ ist zu lange % bitte Schliessen","@ zu lange ","@ Zu Lange %","@ ist schon zu lange %",2));;\
  }\
}


Aber für jedes fenster muss ein dummy vergessen erstellt werden. z.B :
define Bad_Fenster_vergessen dummy

Hoffe es hilft.
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ext23 am 23 Januar 2013, 21:44:46
Ahh ok, ich hab den Fehler, ich habe die doppelten Semikolon vergessen am Ende der Zeile. Gut das mit dem if verstehe ich dennoch nicht aber ist eben die FHEM Syntax.

Danke!
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 24 Januar 2013, 10:43:45
hmm würde meinen Code gerne so erweitern das ich nach der 1. Mail jedesmal nach weiteren 15 Minuten eine Mail bekomme.
Müsst ich dafür doch normal nur bei der Mail folgendes hinzufügen:
fhem ("define @_Alarm at +00:15:00 set @_vergessen offen") if (Value("@_Alarm") eq "");;\

Somit ist es ja ein Kreislauf solange fenster auf ist :D
Titel: Aw: Fenster offen bei Abwesenheit = Mail
Beitrag von: ChrisW am 24 Januar 2013, 10:52:13
Klappt leider nicht ganz da er zwar nochmal einen durchlauf macht aber dann natürlich die änderung von dem anderen Dummy bekommt somit tauchen folgende Logs auf :
2013.01.24 10:49:04 3: Please define fake_Fenster_vergessen_vergessen first
Titel: Antw:Fenster offen bei Abwesenheit = Mail
Beitrag von: Jan Hertel am 05 März 2014, 17:30:48
Hallo,
würde auch gerne mail nur bei Abwesenheit bekommen, habe eine structure Handys absent-present, hier meine  config###Fenster Mail
define n_Fenster 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;; \
  FB_mail('*****@@msn.com',$subject,$fhttk_status);;\
  Log 3, "@: Window ".$window_state;;\
}\
}




wie kann ich das erweitern?