FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Terabyte am 18 Mai 2013, 08:48:14

Titel: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 08:48:14
Hallo

Ich würde gerne, wenn ein Türkontakt auslöst, dass zeitversetzt von fbmail eine Alarmmeldung gesendet wird, aber nur wenn innerhalb dieses "Countdowns" keine Person als anwesend registriert wird.(presence)

Diesen Befehl benutze ich zur Zeit.

define Alarmmeldung1 notify MAX_060f08:opened.* {if ( Value("ALARM") eq "on"){fb_mail ('xxxx@@gmail.com' (@@gmail.com'),'ALARM','Eingangstuer offen')}}

Das Problem hierbei ist, dass oft das Handy nicht schnell genug als "presence" erkannt wird und dann immer ein "falscher" Alarm ausgelöst wird.
Deshalb möchte ich, dass nachdem der Türkontakt geöffnet wurde, 1 Minute gewartet wird und wenn sich innerhalb von dieser Zeit niemand mit dem Smartphone auf presence meldet, das Mail geschickt wird.

Ist das möglich?

Danke
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 18 Mai 2013, 09:14:01
define Alarmmeldung1 notify MAX_060f08:opened.* {\
      if ( Value("ALARM") eq "on"){\
         fhem("define Latenz at +00:05:00 {\
               if (Value('presence') eq 'true')  {\
                   fb_mail ('xxxx@@gmail.com','ALARM','Eingangstuer offen');;\
               }\
        }");;\
      }\
}


MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 09:58:39
Hallo

Danke.
Aber leider bekomme ich da folgende Fehlermeldung im Log.

Alarmmeldung1 return value: Global symbol "@gmail" requires explicit package name at (eval 364392) line 1.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 18 Mai 2013, 14:09:45
define Alarmmeldung1 notify MAX_060f08:opened.* {\
      Log 3, 'Test läuft...';;\  
      if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
      }else (Value("presence") eq "true") {\
           fhem("define Latenz at +00:02:00 {fb_mail('xxxx@gmail.com','ALARM','Eingangstuer offen')}");;\
           Log 3, "Latenzzeit wurde als at angelegt...";;\
      }\
}


MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 15:22:38
Funktioniert leider auch nicht...

Alarmmeldung1 return value: syntax error at (eval 372753) line 1, near "else ("
syntax error at (eval 372753) line 1, near "} }"



Der "Befehl" Latenz ist für die Verzögerung zuständig?
Was bedeutet das Log3?
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 18 Mai 2013, 17:37:02
Jetzt aber!!!

define Alarmmeldung1 notify MAX.* {\
      Log 3, 'Test läuft...';;\  
      if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
      }else {if (Value("presence") eq "true"){\
           fhem("define Latenz at +00:02:00 {fb_mail('xxxx@gmail.com' ('xxxx@gmail.com'),'ALARM','Eingangstuer offen')}");;\
           Log 3, "Latenzzeit wurde als at angelegt...";;\
           }\
      }\
}

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 18:16:58
Jein :)

Zeit scheint korrekt zu laufen usw..
Er möchte auch eine Mail senden, bekomme aber folgende Fehlermeldung

2013.05.18 18:05:46 3: Test läuft...
2013.05.18 18:05:46 3: Latenzzeit wurde als at angelegt...
2013.05.18 18:05:56 3: Subroutine erhält folgende Parameter: xxxxMAXgmail.com, ALARM, Eingangstuer offen ...)
2013.05.18 18:05:59 3: Mail sent to xxxxMAXgmail.com

Es wird anscheinend aus dem "@" ein MAX gemacht...


Schreibe ich im Script bei der Mailadresse  xxxx@@gmail.com (@@gmail.com) (also mit 2 @), dann gibt es folgende Fehlermeldung

Alarmmeldung1 return value: Global symbol "@gmail" requires explicit package name at (eval 2539) line 1.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Ralph am 18 Mai 2013, 19:48:51
Probiere mai FB_mail statt fb_mail
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 19:53:49
Hilft leider auch nix.

Es wird immer noch aus dem @ ein MAX gemacht.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 18 Mai 2013, 19:57:29
Wie wäre es damit? ;o)

define Alarmmeldung1 notify MAX_060f08:opened.* {\
fhem("set ALARM on");;\
fhem("set presence true");;\
Log 3, 'Test läuft...';;\
if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
}else {if (Value("presence") eq "true"){\
my $Mail = 'xxxx@@gmail.com' (@@gmail.com');;\
fhem("define Latenz at +00:02:00 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
Log 3, "Latenzzeit wurde als at angelegt...";;\
}\
}\
}

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Mai 2013, 20:07:47
Vielen Dank :)

Damit wird zumindest schonmal das Mail zeitversetzt gesendet
my $Mail = 'xxxx@@gmail.com' (@@gmail.com');;\

Was ich jetzt noch testen muss, ob kein Alarm ausgelöst wird wenn innerhalb der Latenz Zeit jemand present ist.

Ich habe aber noch Fragen.

Was bedeutet dieses: Log 3, 'Test läuft...';;\
Hat das eine Funktion außer Textausgabe im Log?
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Puschel74 am 18 Mai 2013, 20:12:00
Hallo,

nein, es dient einzig nur damit um zu prüfen ob das notify überhaupt angesprungen wird.
Das sind recht feine Kniffe um zu sehen ob etwas überhaupt auslöst ;-)

Grüße

P.S.: Sorry MisterEltako das ich dir zumindest bei dieser Antwort vorgreife - für den Rest bist du besser drauf ;-)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 18 Mai 2013, 20:29:16
@Puschel
Das ist doch kein Wettbewerb wer zu erst antwortet, sondern eine prima Zusammenarbeit, die meistens zur Lösung des Problems führt. Man kann immer etwas dazu lernen ;o)

@Terabyte

Du musst für diesen Fall noch Nachfolgendes einfügen zum simulieren:

define Alarmmeldung1 notify MAX.* {\
fhem("set ALARM off");;\
fhem("set presence true");;\
Log 3, 'Test läuft...';;\
if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
}else {if (Value("presence") eq "true"){\
my $Mail = 'xxxx@@gmail.com (@@gmail.com)';;\
fhem("define Latenz at +00:00:02 {fbmail('$Mail','ALARM','Eingangstuer offen')}");;\
Log 3, "Latenzzeit wurde als at angelegt...";;\
}\
}\
}


Das müsste zunächst funktionieren. Falls die Log's dich nerven kannst du sie ohne Funktionsverlust löschen. Ich finde es gut eine Kontrolle zu haben, was so abläuft im Hintergrund.

MFG, MisterEltako.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 08:59:42
Hallo

Da bekomme ich leider folgdene Fehlermeldung

Alarmmeldung1 return value: Unknown command {\
fhem("set, try help
Unknown command fhem("set, try help
Unknown command Log, try help
Unknown command if, try help
Unknown command }else, try help
Unknown command fhem("define, try help
Unknown command Log, try help
Unknown command }\
, try help


Mit dem anderen Script funktioniert das Zeitversetzte senden vom Mail problemlos. Was aber leider nicht funktioniert. Das Mail wird auch gesendet wenn sich in der eingestellten Zeit jemand auf PRESENCE befindet.
Da soll eigentlich nichts geschickt werden
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 19 Mai 2013, 11:46:26
define Alarmmeldung1 notify MAX_060f08:opened.* {\
 fhem("set ALARM on");;\
 fhem("set presence false");;\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
 }else {\
 if (Value("presence") eq "true"){\
    my $Mail = 'xxxx@@gmail.com';;\
    fhem("define Latenz at +00:02:00 {fbmail('$Mail','ALARM','Eingangstuer offen')}");;\
    Log 3, "Latenzzeit wurde als at angelegt...";;\
    }\
 }\
}


Das
 fhem("set ALARM on");;\
 fhem("set presence false");;\
dient nur zur Simulation der einzelnen Fensterkontakt und Presencezustände. Das musst du bei dir nach dem Testen natürlich löschen. Bei mir hat das in verschiedenen Kombinationen richtig funktioniert.

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 14:19:34
Hallo

Funktioniert leider immer noch nicht :(

Es bleibt bei folgender Meldung stecken: 2013.05.19 14:05:15 3: Alarmmeldung wird geprüft...

Folgendes habe ich dabei aber rausgelöscht:
 fhem("set ALARM on");;\           ALARM ist bei mir ein Dummy Schalter den ich im WebIF on off schalten kann
 fhem("set presence false");;\     Für die Überwachung benutze ich folgendes "define Handy PRESENCE fritzbox Nexus"


Wenn ich das ganze folgendermaßen mache, dann funktioniert die deaktivierung innerhalb der Latenzzeit nicht:


define Alarmmeldung1 notify MAX:on.* {\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
 }else {\
 if (Value("Handy") eq "absent"){\
    my $Mail = 'xxxx@@gmail.com';;\
    fhem("define Latenz at +00:00:30 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
    Log 3, "Latenzzeit wurde als at angelegt...";;\
    }\
 }\
}


MAX ist hier ein weiterer Dummy Schalter damit ich nicht immer zur Tür rennen muss und die auf und zu machen :)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 19 Mai 2013, 18:26:10
Bei Alarm ist "on"  und Handy "present" ist das so ok.

ALARM +   Handy = Logmeldung
on          +  present = Alarmmeldung wird geprüft
on          +  absent  = Email
off          +  present = kein Alarm eingeschaltet
off          +  absent  = kein Alarm eingeschaltet

MfG, MisterEltako

Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 18:40:46
Hallo

Ok. Wenn ich das mache bleibt er aber wieder bei folgender Meldung hängen..

2013.05.19 18:39:46 3: Alarmmeldung wird geprüft...
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 19 Mai 2013, 19:05:53
Also müssen deine Device andere state's haben als in den Vergleichen geprüft wird.

Bitte im bisherigen Code die Zeile:

Log 3, 'Alarmmeldung wird geprüft...';;\

bitte ergänzen bzw. erweitern um:

my $Alarm= Value("ALARM");;\
my $Handy=Value("Handy");;\
my $Max=Value("MAX");;\
Log 3, "Alarmmeldung wird geprüft:.....ALARM: $Alarm, HANDY: $Handy, MAX: $Max";;\

und Logmeldungen  für die verschiedenen Kombinationen posten.

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 19:09:35
Hier das Log

2013.05.19 19:08:20 3: Alarmmeldung wird geprüft:.....ALARM: on, HANDY: absent, MAX: on
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 21:04:05
2013.05.19 21:04:47 3: Alarmmeldung wird geprüft:.....ALARM: off, HANDY: present, MAX: on
2013.05.19 21:04:47 3: kein Alarm eingeschaltet!

Scheint so als würde alles richtig erkannt werden.

Nur ausgelöst wird nicht richtig hmmmm
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 19 Mai 2013, 21:52:42
define MAX dummy
 define ALARM dummy
 define Handy dummy

 define Alarmmeldung1 notify MAX:on.* {\
 fhem("set ALARM on");;\
 fhem("set Handy absent");;\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (Value("ALARM") ne "on") {\
   Log 3, "kein Alarm eingeschaltet!";;\
 }else {\
   if (Value("Handy") eq "absent"){\
     my $Mail = 'xxxx[email]@@gmail.com'[/email];;\
     fhem("define Latenz at +00:00:30 {\
         fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
     Log 3, "Latenzzeit wurde als at angelegt...";;\
   }else {Log 3, "Kein Alarm - Person anwesend!"}\
   }\
 }


auslösbar mit: "trigger MAX on"

funktioniert!!!! Extra Logeintrag für dich zugefügt ;-)

MfG,MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 22:10:44
Ich versteh das nicht warum das bei dir funktioniert und ich wieder mal eine Fehlermeldung im Log bekomme obwohl ich alles 1 zu 1 kopiert habe :(


2013.05.19 22:08:33 3: Alarmmeldung1 return value: Search pattern not terminated at (eval 43037) line 1.

Auf jeden Fall Danke ich dir schon mal für deine Mühe und Geduld :)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 19 Mai 2013, 22:23:24
Ok.

Wenn ich das  entferne ist die Fehlermeldung weg.Problem ist aber leider noch immer, dass sich das Mail senden nicht deaktivieren lässt sobald die Latenzzeit läuft.Einmal aktiviert wird das Mail geschickt, egal ob jemand anwesend ist oder nicht...2013.05.19 22:26:21 1: dummy set MAX on2013.05.19 22:26:21 3: Alarmmeldung wird geprüft...2013.05.19 22:26:21 3: Latenzzeit wurde als at angelegt...2013.05.19 22:26:32 1: dummy set Handy on  (Anwesenheit simuliert)2013.05.19 22:26:51 3: Subroutine erhält folgende Parameter: [email=xxxx@gmail.com]xxxx@gmail.com, ALARM, Eingangstuer offen ...)
2013.05.19 22:26:53 3: Mail sent to xxxx@gmail.com (xxxx@gmail.com)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 19 Mai 2013, 23:42:59
OK, das ist doch schon fast geschafft. Nun noch nachfolgende Eintrage, die das Löschen des "AT" veranlassen, wenn es schon da ist oder wenn es nicht mehr gültig ist.

Weiterhin muss auch ein notify-Event kommen, wenn du das Fenster schliesst:

....notify MAX:(on.|off.*)....!

Das mit den   ( ) kann man leider nicht beeinflussen, das macht das Forum automatisch!!!

define MAX dummy
define ALARM dummy
define Handy dummy

define Alarmmeldung1 notify MAX:(on.|off.*) {\
 fhem("set ALARM on");;\
 fhem("set Handy present");;\
 Log 3, 'Alarmmeldung wird geprüft...';;\
  if (Value("ALARM") ne "on") {Log 3, "kein Alarm eingeschaltet!";;\
   if (defined($defs{Latenz})){fhem('delete Latenz')};;\
  }else {\
   if (Value("Handy") eq "absent"){\
    my $Mail = 'xxxx@@gmail.com';;\
    if (defined($defs{Latenz})){fhem('delete Latenz')};;\
    fhem("define Latenz at +00:00:30 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
    Log 3, "Latenzzeit wurde als at angelegt...";;\
   }else {\
    Log 3, "Kein Alarm - Person anwesend!";;\
    if (defined($defs{Latenz})){fhem('delete Latenz')};;\
   }\
 }\
}


MfG, MisterEltako.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 20 Mai 2013, 10:32:57
Leider wird auch damit nach Ablauf der Latenzzeit das Mail gesendet. Unabhängig davon ob in der Zwischenzeit jemand anwesend ist oder nicht....


Ich hab mir gerade überlegt ob man das nicht vielleicht mit 2 zusätzlichen Dummy's lösen könnte

Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 20 Mai 2013, 11:02:43
Ok, jetzt habe ich verstanden, was du wolltest.

So müsste das jetzt gehen. Man kann einen zusätzlichen Dummy verwenden (s.u.) oder in die Readings z.B. von ALARM schreiben. Schreibe einfach was die lieber wäre.

define MAX dummy
define ALARM dummy
define Handy dummy
define Email dummy

define Alarmmeldung1 notify Max:(on.*|off.*){\
 fhem("set ALARM on");;\
 fhem("set Handy present");;\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (Value("ALARM") ne "on") {\
   Log 3, "kein Alarm eingeschaltet!";;\
   fhem("set Email 0");;\
   if (defined($defs{Latenz})){fhem('delete Latenz')};;\
 }else {\
   if (Value(("Handy") eq "absent") && (Value("Email")){\
      my $Mail = 'xxxx@@gmail.com';;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("define Latenz at +00:00:30 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
      fhem("set Email 1");;\
      Log 3, "Latenzzeit wurde als at angelegt...";;\
   }else {Log 3, "Kein Alarm - Person anwesend!";;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("set Email 0");;\
   }\
 }\
}


Wenn das o.g. funktioniert, solltest du es noch als eigene Funktion in die 99_Utils.pm auslagern und per Aufruf aus der FHEM.cfg starten, da es inzwischen doch etwas mehr Codezeielen geworden sind...

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 20 Mai 2013, 11:54:34
Leider wird auch damit wieder das Mail nach Ablauf der Latenzzeit gesendet. :(

Vielleicht funktioniert das gar nicht was ich möchte....

Ich probiere es aber trotzdem noch einmal erklären.

Den Alarm Schalte ich mit einem Dummy Schalter on off

Funktioniert
Wenn der Alarm on ist und die Tür geöffnet wird soll der Countdown zu laufen beginnen.
Meldet sich innerhalb dieser Countdown Zeit niemand mit dem Handy an, dann soll per Mail die Alarmmeldung gesendet werden.

Funktioniert leider nicht
Wird aber innerhalb dieser Zeit ein Handy als present erkannt dann soll der Countdown stoppen und KEIN Mail gesendet werden.


Ich war gar nicht ob das so überhaupt möglich ist mit FHEM....
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 20 Mai 2013, 13:45:51


define MAX dummy
define ALARM dummy
define Handy dummy
define Email dummy
#fhem("set ALARM on");;\
# fhem("set Handy absent");;\


define Alarmmeldung1 notify MAX {\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy')};;\
 if (defined($defs{Latenz})){fhem('delete Latenz')};;\
 if (Value("ALARM") ne "on") {\
   Log 3, "kein Alarm eingeschaltet!";;\
   fhem("set Email 0");;\
   if (defined($defs{Latenz})){fhem('delete Latenz')};;\
 }else {\
   if ((Value("Handy") eq "absent") && (Value("Email"))){\
      my $Mail = 'xxxx@@gmail.com';;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("define Latenz at +00:05:00 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
      fhem("define WarteaufHandy notify Handy:present.* trigger MAX on");;\
      fhem("set Email 1");;\
      Log 3, "Latenzzeit wurde als at angelegt...";;\
   }else {Log 3, "Kein Alarm - Person anwesend!";;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("set Email 0");;\
   }\
 }\
}


MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 20 Mai 2013, 14:26:24
Jetzt bekomme ich nur noch folgendes im Log

2013.05.20 14:01:21 3: Alarmmeldung wird geprüft...
2013.05.20 14:01:21 3: Kein Alarm - Person anwesend!
2013.05.20 14:01:36 1: dummy set MAX off
2013.05.20 14:01:36 3: Alarmmeldung wird geprüft...
2013.05.20 14:01:36 3: Kein Alarm - Person anwesend!
2013.05.20 14:01:52 1: dummy set MAX on
2013.05.20 14:01:52 3: Alarmmeldung wird geprüft...
2013.05.20 14:01:52 3: Kein Alarm - Person anwesend!
2013.05.20 14:02:12 1: dummy set Handy on
2013.05.20 14:02:15 1: dummy set MAX off
2013.05.20 14:02:15 3: Alarmmeldung wird geprüft...
2013.05.20 14:02:15 3: Kein Alarm - Person anwesend!
2013.05.20 14:02:27 1: dummy set MAX on
2013.05.20 14:02:27 3: Alarmmeldung wird geprüft...
2013.05.20 14:02:27 3: Kein Alarm - Person anwesend!
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 20 Mai 2013, 16:41:15
statt:

fhem("define WarteaufHandy notify Handy:present.* trigger MAX on");;\

bitte:

fhem("define WarteaufHandy notify Handy:present.* {\
     if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy;;;;delete Latenz')};;\
}\

und:

Log 3, 'Alarmmeldung wird geprüft...';;\
 if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy')};;\

zu:
Log 3, 'Alarmmeldung wird geprüft...';;\

MfG, MisterEltako.
     
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 20 Mai 2013, 18:07:11
Das ganze sieht nun so aus


define Alarmmeldung1 notify MAX {\
 Log 3, 'Alarmmeldung wird geprüft...';;\
 if (defined($defs{Latenz})){fhem('delete Latenz')};;\
 if (Value("ALARM1") ne "on") {\
   Log 3, "kein Alarm eingeschaltet!";;\
   fhem("set Email off");;\
   if (defined($defs{Latenz})){fhem('delete Latenz')};;\
 }else {\
   if ((Value("Handy") eq "absent") && (Value("Email"))){\
      my $Mail = 'xxxx@@gmail.com';;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("define Latenz at +00:05:00 {fb_mail('$Mail','ALARM','Eingangstuer offen')}");;\
      fhem("define WarteaufHandy notify Handy:present.* {\
if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy;;;;delete Latenz')};;\
}\
      fhem("set Email on");;\
      Log 3, "Latenzzeit wurde als at angelegt...";;\
   }else {Log 3, "Kein Alarm - Person anwesend!";;\
      if (defined($defs{Latenz})){fhem('delete Latenz')};;\
      fhem("set Email off");;\
   }\
 }\
}


Gibt aber leider folgende Meldung

2013.05.20 18:05:47 3: Alarmmeldung1 return value: Can't find string terminator '"' anywhere before EOF at (eval 74081) line 1.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 20 Mai 2013, 18:20:58
fhem("define WarteaufHandy notify Handy:present.* {\
 if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy;;;;delete Latenz')}}");;\


MfG, MisterEltako.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 22 Mai 2013, 17:52:13
Hallo

Danke schonmal.

Kann es aber erst am WE Testen.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: abc2006 am 23 Mai 2013, 13:43:50
Ich mal wieder:


define Alarmmeldung1 notify MAX_060f08:opened.* {if ( Value("ALARM") eq "on"){set ALARM defined}
define ALARM watchdog {Value("presence") eq "true"} 00:02 {Value("presence") eq "false"} {fb_mail('xxxx@gmail.com','ALARM','Eingangstuer offen')}


willst du das mal ausprobieren?

ein bisschen weniger Code, aber ich bin noch nicht so erfahren, um beurteilen zu können, ob das funktioniert... ;-)

lg
stephan
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 24 Mai 2013, 10:14:57
Bist du schon zum Testen gekommen?

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 25 Mai 2013, 09:11:30
Hallo

Werde ich heute im Laufe des Tages machen und dann berichten.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 25 Mai 2013, 13:18:29
Zitat von: MisterEltako schrieb am Mo, 20 Mai 2013 18:20fhem("define WarteaufHandy notify Handy:present.* {\
 if (defined($defs{WarteaufHandy})){fhem('delete WarteaufHandy;;;;delete Latenz')}}");;\


MfG, MisterEltako.


Hallo

Auch hiermit gibt es leider eine Fehlermeldung im Log


2013.05.25 13:16:40 3: Alarmmeldung1 return value: syntax error at (eval 230049) line 1, near "}else"
syntax error at (eval 230049) line 1, near "}  }"
Unmatched right curly bracket at (eval 230049) line 1, at end of line
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 25 Mai 2013, 13:22:26
Zitat von: abc2006 schrieb am Do, 23 Mai 2013 13:43Ich mal wieder:


define Alarmmeldung1 notify MAX_060f08:opened.* {if ( Value("ALARM") eq "on"){set ALARM defined}
define ALARM watchdog {Value("presence") eq "true"} 00:02 {Value("presence") eq "false"} {fb_mail('xxxx@gmail.com','ALARM','Eingangstuer offen')}


willst du das mal ausprobieren?

ein bisschen weniger Code, aber ich bin noch nicht so erfahren, um beurteilen zu können, ob das funktioniert... ;-)

lg
stephan

Damit bekomm ich immer

Wrong timespec, must be HH:MM[:SS]

Auch wenn ich 00:02:00 mache, gibt es die selbe Fehlermeldung
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 26 Mai 2013, 22:13:03
Ok, dasmit watchdog habe ich bisher selbst nicht eingebaut, macht hier aber Sinn. Das müsste dann aber entsprechend deinen Vorgaben so lauten:

#Watchdog der darauf wartet, dass das Handy 5 Minuten durchgängig nicht im WLAN ist. Dann eine Mail sendet wenn Tuer noch offen und
#Alarm-Dummy eingeschaltet und den Watchdog für die Rückkehr scharf schaltet

define wdog_weg watchdog Handy:absent 00:05 Handy:present {\
if ((Value("Max") eq "open") && (Value("ALARM") eq "on")) {\
use FritzBoxUtils;;fb_mail('mail@domain.de' ('mail@domain.de'),'ALARM','Eingangstuer ist offen');;\
fhem("setstate wdog_da defined")}}

#Watchdog der darauf wartet, dass das Handy 1 Minute durchgängig am Netz ist. Dann eine Mail sendet und den Watchdog für das
#Verlassen scharf schaltet

define wdog_da watchdog Handy:present 00:01 Handy:absent {\
use FritzBoxUtils;fb_mail('mail@domain.de' ('mail@domain.de'),'ALARM','Handy ist wieder in Reichweite');;\
fhem("setstate wdog_weg defined")}

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: AnonymousHolger am 26 Mai 2013, 22:18:55
Klingt alles sehr gut .... bitte wenn es läuft in die Wiki stellen.

Sonst frage ich euch in X Monaten diesbezüglich das Gleiche noch mal ;-P

Danke

Gruss

Holger
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 27 Mai 2013, 10:13:31
Hallo

Es scheint so als würde dieses Script funktionieren wie gewollt. Werde es aber noch im Praxiseinsatz testen :)

define wdog_weg watchdog MAX:on 00:00:30 Handy:on {\
if ((Value("Handy") eq "off") && (Value("ALARM1") eq "on")) {\
fb_mail('xxxx@gmail.com' ('xxxx@gmail.com'),'ALARM','Eingangstuer ist offen');;\
fhem("setstate wdog_weg defined")}}


Danke MisterEltako für deine Mühe und Hilfe
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 27 Mai 2013, 15:37:10
So. Eine Kleinigkeit funktioniert leider noch nicht.

Und zwar wenn der Watchdog "unterbrochen" wird, also sich ein Handy anmeldet und dementsprechend kein Mail gesendet wird, dann bleibt der Watchdog auf triggered und funktioniert demnach nicht mehr.

Es fehlt also noch irgendwie das Kommando, dass er sich bei keinem Mail Versand auch wieder auf defined stellt
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 27 Mai 2013, 16:03:32
Du hast ja auch den Teil des Codes zur Reaktivierung weggelassen

define wdog_weg watchdog MAX:on 00:00:30 Max:off {\
if ((Value("Handy") eq "off") && (Value("ALARM1") eq "on")) {\
fb_mail('xxxx@gmail.com' ('xxxx@gmail.com'),'ALARM','Eingangstuer ist offen');;\
fhem("setstate wdog_da defined")}}

#wartet bis Handy mindestens 1min in Reichweite ist....
define wdog_da watchdog Handy:on 00:01 Handy:off {\
fb_mail('xxxx@gmail.com' ('xxxx@gmail.com'),'ALARM','Handy-Besitzer ist wieder in Reichweite...');;\
fhem("setstate wdog_weg defined")}

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 27 Mai 2013, 16:29:06
Achsoo..

Lässt sich das zum Reaktivieren nicht irgendwie hier integrieren?

define ALARM_OFF at +*00:01:00 {if (( Value("Handy1") eq "present" || Value("Handy2") eq "present") && Value("ALARM") eq "on") { fhem("set ALARM off")}}

Ich hab auch schon folgendes versucht. Funktioniert aber leider nicht.

define ALARM_OFF at +*00:01:00 {if (( Value("Handy1") eq "present" || Value("Handy2") eq "present") && Value("ALARM") eq "on") { fhem("set ALARM off ;; setstate wdog_da defined")}}
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 29 Mai 2013, 20:47:46
Ist es prinzipiell nicht möglich mittels "at" den watchdog auf defined zu setzen?

Fehlermeldung hab ich aber keine im Log
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 29 Mai 2013, 22:08:00
define wdog_weg watchdog MAX:on 00:00:30 Max:off {\
if ((Value("Handy") eq "off") && (Value("ALARM1") eq "on")) {\
fb_mail('xxxx@gmail.com','ALARM','Eingangstuer ist offen');;\
}}


define ALARM_OFF at +*00:01:00 {\
  if ((( Value("Handy1") eq "present") || (Value("Handy2") eq "present")) && (Value("ALARM") eq "on")) {\
        fhem("set ALARM off ;; setstate wdog_weg defined");;\
    }\
}



funktioniert bei mir im Test....


MfG, MisterEltako.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 31 Mai 2013, 10:38:10
Danke

Werde ich testen :)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 04 Juni 2013, 19:31:58
Hallo

Hab ich nun getestet. Eine Kleinigkeit funktioniert leider noch nicht.

Und zwar bleibt bei der Alarmmeldung anscheinend der Status des "ALARM" Dummy Schalter unberücksichtigt.


define Alarmmeldung1 watchdog MAX_060f08:opened 00:01:30 Handy1&Handy2:present {\
if ((Value("Handy1") eq "absent" && Value("Handy2") eq "absent") && (Value("ALARM") eq "on")) {\
fb_mail('xxxx@gmail.com','ALARM','Eingangstuer ist offen');;\
fhem("setstate Alarmmeldung1 defined")}}


Wenn Handy1 oder 2 als anwesend registriert werden dann funktioniert alles wie gewollt. Weiters wird mit dieser Anwesenheit der ALARM Dummy auf off gestellt.

Ist nun aber bereits eines der beiden Handy´s anwesend und der Alarm bereits off und das 2. Handy "kommt", dann wird die Alarmmeldung1 erneut komplett durchlaufen.

Negativ dabei: Dieser Alarmmeldung1 watchdog bleibt dann auf triggered, weil ja durch das ALARM_OFF vom 1. Handy, der Alarmmeldung1 watchdog auf defined gesetzt wurde, wird er beim 2. dann nicht mehr gesetzt weil ja der ALARM Dummy bereits off ist.


Als Workaround könnte ich jetzt beim ALARM_OFF die Abfrage rausnehmen ob der ALARM Dummy auf "on" steht. Dies müsste ja bewirken, dass das ALARM_OFF dann immer ausgeführt wird und die Alarmmeldung1 auf defined setzt.


Aber rein aus Interesse, würde mich interessieren warum der ALARM Dummy Status nicht berücksichtigt wird bei der Alarmmeldung

Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Puschel74 am 04 Juni 2013, 19:47:38
Hallo,

nur weil ich selbst schon drüber gestolpert bin ...
Steht den on und off im STATE (also nicht im state)
Value fragt nämlich STATE ab.

Grüße
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 04 Juni 2013, 19:53:59
Hallo

Meinst du das hier auf dem Bild?
Wenn ja, das wäre doch STATE?

Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Puschel74 am 04 Juni 2013, 20:18:47
Hallo,

ja genau das meinte ich.

Das wird durch Value abgefragt - ok ist bei dir on und off.
Dann zieh ich mich mal wieder unwissend zurück und lese weiterhin nur mit.
Sorry das ich nicht mehr helfen konnte.

Grüße
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 04 Juni 2013, 20:23:12
Hallo

Klar hast du mir geholfen. Zwar leider nicht zur Lösung aber zumindest eine Fehlerquelle ausgeschlossen :)

Also auch Danke hierfür :)
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 05 Juni 2013, 23:52:38
Baue doch einfach eine Logabfrage ein

...
my $Test;;\
Log 3, "ALARM-Value: $Test;;\
...

Dann siehst du ja, was ausgewertet wird.

MfG, MisterEltako.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 06 Juni 2013, 19:29:13
Du meinst so?


define Alarmmeldung1 watchdog MAX_060f08:opened 00:01:30 Handy1&Handy2:present {\
if ((Value("Handy1") eq "absent" && Value("Handy2") eq "absent") && (Value("ALARM") eq "on")) {\
fb_mail('xxxx@gmail.com','ALARM','Eingangstuer ist offen');;\
fhem("setstate Alarmmeldung1 defined")
my $Test;;\
Log 3, "ALARM-Value: $Test;;\}}
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 06 Juni 2013, 20:28:46
Bitte so versuchen:

define Alarmmeldung1 watchdog MAX_060f08:opened 00:01:30 Handy1&Handy2:present {\
       my $Test = Value("ALARM");;\
       Log 3, "ALARM-Value: $Test;;\
       if ( (Value("Handy1") eq "absent") && (Value("Handy2") eq "absent") ) {\
            if (Value("ALARM") eq "on") {\
               fb_mail([email]'xxxx@gmail.com'[/email],'ALARM','Eingangstuer ist offen');;\
               fhem("setstate Alarmmeldung1 defined");;\
            } else { fhem("setstate Alarmmeldung1 triggered");;\
            }
       }
}


MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 10 Juni 2013, 18:37:10
Hallo

Das ist nun die Ausgabe:


2013.06.10 14:36:01 3: Watchdog Alarmmeldung1 triggered
Bareword found where operator expected at (eval 146821) line 1, near ""ALARM-Value: $Test;        if ( (Value("Handy1"
(Missing operator before Handy1?)
String found where operator expected at (eval 146821) line 1, near "Handy1") eq ""
Bareword found where operator expected at (eval 146821) line 1, near "") eq "absent"
(Missing operator before absent?)
String found where operator expected at (eval 146821) line 1, near "absent") && (Value(""
Bareword found where operator expected at (eval 146821) line 1, near "") && (Value("Handy2"
(Missing operator before Handy2?)
String found where operator expected at (eval 146821) line 1, near "Handy2") eq ""
Bareword found where operator expected at (eval 146821) line 1, near "") eq "absent"
(Missing operator before absent?)
String found where operator expected at (eval 146821) line 1, near "absent") ) {             if (Value(""
Bareword found where operator expected at (eval 146821) line 1, near "") ) {             if (Value("ALARM"
(Missing operator before ALARM?)
String found where operator expected at (eval 146821) line 1, near "ALARM") eq ""
Bareword found where operator expected at (eval 146821) line 1, near "") eq "on"
(Missing operator before on?)
String found where operator expected at (eval 146821) line 1, near "on") {                fb_mail('xxxx@gmail.com','ALARM','Eingangstuer ist offen');                fhem(""
Bareword found where operator expected at (eval 146821) line 1, near "");             } else { fhem("setstate"
(Missing operator before setstate?)
String found where operator expected at (eval 146821) line 1, at end of line
(Missing semicolon on previous line?)
2013.06.10 14:36:01 3: Can't find string terminator '"' anywhere before EOF at (eval 146821) line 1.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Puschel74 am 10 Juni 2013, 18:38:32
Hallo,

es fehlt ein ".

Grüße
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 10 Juni 2013, 18:41:23
Die Frage ist nur wo :D
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Puschel74 am 10 Juni 2013, 18:51:59
Hallo,

mit den " verhält es sich so wie mit den ( und {.
Es gehören immer 2 zusammen.
In diesem Fall fehlt hier
ZitatLog 3, "ALARM-Value: $Test;;\
noch eines.

Da ich die Log-Zeile aber anders schreibe als MisterEltako hier mal meine Lösung
Log 3,("ALARM-Value: ".$Test);;\

Grüße

P.S.: Schön langsam wird es aber mal Zeit das Einsteiger.pdf durchzulesen und auch mal im Wiki zu stöbern.
Dort hat es jede Menge solcher Beispiele.
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 10 Juni 2013, 21:40:16
Ja das kleine " fehlt in der genannten Zeile und bringt natürlich den ganzen nachfolgenden Code durch einander, deswegen so viele Fehlermeldungen.

Geht es jetzt?

MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 16 Juni 2013, 08:25:19
Hallo

Ergibt nun folgendes


Scalar found where operator expected at (eval 217211) line 1, near ""ALARM-Value: "$Test"
(Missing operator before $Test?)
2013.06.16 05:48:44 3: syntax error at (eval 217211) line 1, near ""ALARM-Value: "$Test"
syntax error at (eval 217211) line 1, at EOF


Edit: Werde mal die Logzeile von Puschel74 testen
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 16 Juni 2013, 15:36:53

2013.06.16 15:39:43 3: Watchdog Alarmmeldung1 triggered
2013.06.16 15:39:43 3: syntax error at (eval 222336) line 1, at EOF
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: MisterEltako am 16 Juni 2013, 18:54:46
So gibt es bei mir keine Fehlermeldung:

define Alarmmeldung1 notify MAX_060f08 {\
       Log 3, "ALARM ist ".Value("ALARM");;\
       if ( (Value("Handy1") eq "absent") && (Value("Handy2") eq "absent") ) {\
            if (Value("ALARM") eq "on") {\
               my $adress = 'xxxx@gmail.com';;\
               fb_mail('$adress','ALARM','Eingangstuer ist offen');;\
               fhem("setstate Alarmmeldung1 defined");;\
            } else { fhem("setstate Alarmmeldung1 triggered");;\
            };;\
       }\
}


MfG, MisterEltako
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 16 Juni 2013, 19:37:10
Hallo

Danke. So funktioniert es.
Ich werde mal beobachten was sich nun so im Log tut
Titel: Aw: fbmail zeitversetzt ausführen
Beitrag von: Terabyte am 18 Juni 2013, 18:20:53
Hallo

Anbei nun das Log


2013.06.18 14:45:07 1: dummy set ALARM off
2013.06.18 14:46:38 1: ShutterContact isopen 1, rferror 0, battery 0, unkbits 0
2013.06.18 14:46:41 1: ShutterContact isopen 0, rferror 0, battery 0, unkbits 0
2013.06.18 14:48:08 3: Watchdog Alarmmeldung1 triggered
2013.06.18 14:48:08 3: ALARM ist off


Man kann hier glaub ich erkennen, dass die Alarmmeldung trotz ALARM off "durchlaufen" wird und deshalb die Alarmmeldung1 auf triggered gesetzt wird.