FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Frank am 08 Januar 2014, 12:42:32

Titel: Offene Haustür als Handyanruf melden
Beitrag von: Frank am 08 Januar 2014, 12:42:32
Ich hab jetzt viel gestöbert, aber die richtige Lösung konnte ich bisher noch nicht implementieren.

Was ich möchte: Wenn die Haustür länger als z.B. 5 Minuten offen steht, soll meine Fritzbox mein Handy anrufen.
(Als Sensor würde ich einen FS20_TFK nehmen, oder wäre ein FHT80TF besser?)

Was ich bisher herausgefunden habe:

Anrufen über die Fritzbox am einfachsten über ein Script:
#!/bin/sh
echo "ATDT*121#01701234567" | nc 127.0.0.1 1011
sleep 10
echo "ATH" | nc 127.0.0.1 1011

Damit wird über die erste eingetragene Telefonnummer die Handynummer angerufen. Soweit ok!

Script aufrufen, wenn die Haustür länger als 5 Minuten offen ist:
define FS20_Anruf notify FS20_xxxxxx:on sleep 5*60;; "FHEM/FS20_Anruf.sh"

Das müsste so auch funktionieren, nur wie baue ich es ein, dass wenn die Tür ZWISCHENDURCH wieder zu ist, dass dann das Script NICHT aufgerufen wird. Hat da einer eine Idee?
Titel: Antw:Offene Hasutür als Handyanruf melden
Beitrag von: marvin78 am 08 Januar 2014, 13:53:03
Du könntest ein 2. notify definieren, welches auf "Tür zu" horcht und das notify "FS20_Anruf" im Falles des Falles löscht.
Titel: Antw:Offene Hasutür als Handyanruf melden
Beitrag von: Rossini600 am 08 Januar 2014, 13:59:48
Dafür ist meiner Meinung nach genau der Watchdog da.
Schau mal in der CommandRef.
Das erste Regex steht dann für Tür offen. Das zweite für Tür geschlossen.
Sobald der erste RegEx Fall eingetroffen ist, wird der Timer gestartet.
Wenn in dieser Zeit dann der zweite RegEx fall nicht eintritt wird das Watchdog ausgelöst.
Wenn der weiter Fall doch auftritt (Tür wieder geschlossen) wird der Watchdog wieder zürückgesetzt.
Mit    trigger <Watchdog> .    kannst du nach ausgeführten Watchdog diesen wieder starten. (Punkt hinten ist notwendig)
Titel: Antw:Offene Hasutür als Handyanruf melden
Beitrag von: Octopus am 08 Januar 2014, 14:39:12
Oder vielleicht so:


define FS20_Anruf notify FS20_xxxxxx:on define warte5min at +00:05:00 { if Value("FS20_xxxxxx" eq "on") { fhem ("FHEM/FS20_Anruf.sh") } }


Über das 2. Define wird nach 5 min geprüft, ob die Tür noch auf ist, wenn ja, dann Script ausführen. Ob ein Script-Aufruf so überhaupt funktioniert (FHEM/FS20_Anruf.sh) hab ich nicht geprüft.

Gruß
Octopus
Titel: Antw:Offene Hasutür als Handyanruf melden
Beitrag von: rudolfkoenig am 08 Januar 2014, 17:18:32
Skriptaufruf aus perl heraus geht mit system("programm&") oder mit fhem('"programm"').

Btw. die notify+at Variante meldet auch, wenn ich die Tuer kurz oeffne/zumache, und nach genau 5 minuten wieder kurz oeffne.
Titel: Antw:Offene Hasutür als Handyanruf melden
Beitrag von: Frank am 08 Januar 2014, 19:42:36
Ok, dann würde fhem ("FHEM/FS20_Anruf.sh") ja schonmal funktionieren.
Das mit dem kurz öffnen und dann nach 5 Minuten nochmal öffnen stimmt natürlich. Dies würde auch den Anruf ausführen. Gibt's da eine andere Möglichkeit?
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: justme1968 am 08 Januar 2014, 19:48:57
schau dir den hinweis zum watchdog an. der ist genau dafür da.

gruss
  andre
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 08 Januar 2014, 19:57:31
Ok, danke! Wenn ich's mit dem Watchdog geschafft habe, werde ich hier den Codeschnipsel reinschreiben!
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: rudolfkoenig am 08 Januar 2014, 20:08:05
ZitatOk, dann würde
fhem ("FHEM/FS20_Anruf.sh")
ja schonmal funktionieren.

Nein. Bitte die ' genau nachzaehlen.
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 08 Januar 2014, 20:12:12
Stimmt... :D
Kleiner Flüchtigkeitsfehler....

fhem ('"FHEM/FS20_Anruf.sh"')
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 09 Januar 2014, 07:55:49
Scheint ja ganz einfach zu sein:


define myFHT80 CUL_FHTTK xxxxxxxx

define w watchdog myFHT80.window:open 00:05 myFHT80.window:closed "my_script.sh"
triger w .


Wobei das Script einfach im fhem Verzeichnis stehen muss. Sollte doch eingentlich so funktionieren, oder? (Kann es leider noch nicht ausprobieren, da mir der FHT80TF noch fehlt...Ist die Abfrage auf "open" und "closed" so richtig?
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Puschel74 am 09 Januar 2014, 08:57:36
Hallo,

ZitatIst die Abfrage auf "open" und "closed" so richtig?
Fast  8)

Ich hab dir mal die Readings eines FHTTK im Screenshot angehängt.

Grüße

P.S.: Ja ich weiß - ein einfaches berichtigen des Codes hätte es auch getan aber du willst ja lernen, oder?  ;)

Edith: Grad aufgefallen: define myFHT80 CUL_FHTTK xxxxxxxx
myFHT80 ist evtl. ein unglücklicher Name für eine Tür  ;D
Du kannst auch "EG_Eingang_Tuer" schreiben oder einen anderen aussagekräftigen Namen verwenden.
Lässt sich bei mehreren FHTTK später mal leichter unterscheiden  ;)
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 09 Januar 2014, 09:05:53
Besser so (?):


define Haustuer CUL_FHTTK xxxxxxxx

define w watchdog Haustuer.Window:Open 00:05 Haustuer.Window:Closed "my_script.sh"
triger w .
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Puschel74 am 09 Januar 2014, 09:41:14
Hallo,

ZitatBesser so (?):
Wie du den FHTTK benennst ist deine Sache  ;)

Haustuer:Window.Open oder Haustuer:Window:.Open
Da bin ich mir grad nicht sicher da ich das notify auf "Haustuer:Window.*" lauschen lasse und im Code dann erst zwischen Open und Closed unterscheide.

$DEVICE = Haustuer
$EVENT = Window: Open
oder      = Window: Closed
Achtung! Zwischen : und Open (oder Closed) ist ein Leerzeichen.
Ich denke mal die zweite Variante Haustuer:Window:.Open sollte eher passen.

Alle Angaben ohne Gewähr.

Grüße
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 10 Januar 2014, 07:52:29
Irgendwie scheint es nicht zu funktionieren. Ich habe jetzt folgendes mal ausprobiert (mein FHTTK ist noch nicht da, deshalb habe ich es mit meinem Dämmerungssensor mal getestet..):


define myWatchdog watchdog Daemmerung:on 00:05 Daemmerung:off "Anruf.sh"
trigger myWatchdog .


Der Anruf wird jetzt nach 5 Minuten ausgelöst (einmal!), egal ob die erste Bedingung (Daemmerung:on) zutrifft, oder nicht. Woran kann das liegen? Ist die Abfrage ":on" falsch?! "Daemmerung" ist ein FS20 Gerät.
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Puschel74 am 10 Januar 2014, 07:56:33
Hallo,

mach mal den Event Monitor auf und lös deinen Dämmerungssensor aus.
Im Event Monitor siehst du dann was der genau sendet.
Nur einmal öffnen und dann warten.

Grüße
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 10 Januar 2014, 08:00:33
Leider keine Ahnung, wie ich einen Eventmonitor starte... :-(

Was ich aber gerade herausgefunden habe: Egal, was ich als erstes RegEx eingebe, er löst immer den Watchdog aus. Selbst, wenn ich eine Variable angebe, die es gar nicht gibt! (z.B. Hhsduhdshu).
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Puschel74 am 10 Januar 2014, 08:28:25
Hallo,

ZitatLeider keine Ahnung, wie ich einen Eventmonitor starte... :-(
Guckst du Screenshot  ;)

Leider habe ich auch keine Ahnung mit watchdog - aber das regexp sollte auf alle Fälle stimmen bevor du dich um den watchdog kümmerst.

Grüße
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 10 Januar 2014, 08:44:51
Ich glaube, ich habe den Fehler gefunden. Das Retriggern des Watchdog's geschieht ja direkt nach dem ich den Watchdog definiert habe, d.h. er wird IMMER ausgelöst, egal was als RegEx1 definiert ist. Und nach dem ersten Triggern kommt er nie wieder.

Ss ist es falsch:


define myWatchdog watchdog Daemmerung:on 00:05 Daemmerung:off "Anruf.sh"
trigger myWatchdog .


Und so richtig:


define myWatchdog watchdog Daemmerung:on 00:05 Daemmerung:off "Anruf.sh";; trigger myWatchdog .


(Hoffe ich... :-) )
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: rudolfkoenig am 10 Januar 2014, 10:09:37
Falls der watchdog einmal ausgeloest hat, dann muss man ihn explizit wieder scharfstellen. Hintergrund ist, dass ich pro offenen Fenster nur ein Email bekommen will, und nicht alle fuenf Minuten eins.
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: Frank am 10 Januar 2014, 21:20:54
So, im Prinzip funktioniert jetzt alles. Was noch etwas seltsam ist, ist die Tatsache, dass der Watchdog IMMER eine Minute drauf rechnet.

Beispiel:

Watchdog soll nach 5 Minuten "Tür-ist-noch-offen" auslösen.

20:00 Uhr: Watchdog löst aus, da erste Bedingung zutrifft (Tür ist offen). Dann wird die Auslösezeit auf 20:05 gesetzt. Soweit ok.
20:01 Uhr: Die Auslösezeit wird auf einmal um eine Minute erhöht, also auf 20:06 Uhr gesetzt.
20:06 Uhr: Der Watchdog löst aus. Vorausgesetzt, die zweite Bedingung trifft nicht zu.

Wieso wird immer eine Minute draufgerechnet?
Ist zwar nur ein Schönheitsfehler, aber trotzdem interessant...

Code sieht so aus:

define WatchdogHaustuer watchdog Haustuer:Window:.Open 00:05:00 Haustuer:Window:.Closed "Anruf.sh";; trigger WatchdogHaustuer .


EDIT: Weiteres Problem ist, das der Watchdog immer wieder alle 5 Minuten ausgelöst wird, wenn die Tür noch offen ist!
Titel: Antw:Offene Haustür als Handyanruf melden
Beitrag von: mbenker am 27 Januar 2014, 19:21:40
ICh habe mich heute auch mit Watchdog beschäftigt um einige meiner Fenster/Türen zu prüfen.

Ich habe es folgendermassen gelöst :

Zitatdefine WDTest watchdog TestDummy:on 00:00:15 TestDummy:off {fb_mail('xx@xx.de','Badezimmerfenster noch auf','ACHTUNG das Badezimmerfenster ist seit 15min offen...Bitte schliessen');;fb_mail('xx@xx.de','Badezimmerfenster noch auf','ACHTUNG das Badezimmerfenster ist seit 15min offen...Bitte schliessen');;fhem('setstate WDTest defined')}

Funtioniert super und ich erhalte je Mailadresse eine E-Mail wenn das fenster nicht geschlossen wurde, bevor die 15min (das hier ist Testumgebund daher hier 15sek) um sind...