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?
Du könntest ein 2. notify definieren, welches auf "Tür zu" horcht und das notify "FS20_Anruf" im Falles des Falles löscht.
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)
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
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.
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?
schau dir den hinweis zum watchdog an. der ist genau dafür da.
gruss
andre
Ok, danke! Wenn ich's mit dem Watchdog geschafft habe, werde ich hier den Codeschnipsel reinschreiben!
ZitatOk, dann würde
fhem ("FHEM/FS20_Anruf.sh")
ja schonmal funktionieren.
Nein. Bitte die ' genau nachzaehlen.
Stimmt... :D
Kleiner Flüchtigkeitsfehler....
fhem ('"FHEM/FS20_Anruf.sh"')
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?
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 ;)
Besser so (?):
define Haustuer CUL_FHTTK xxxxxxxx
define w watchdog Haustuer.Window:Open 00:05 Haustuer.Window:Closed "my_script.sh"
triger w .
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
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.
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
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).
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
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... :-) )
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.
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!
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...