[gelöst] Wecker in Fritzbox auf jetzt + x Minuten setzen

Begonnen von iron.eagle, 15 März 2015, 14:58:46

Vorheriges Thema - Nächstes Thema

iron.eagle

Hallo,

ich beginne gerade mich mit FHEM zu beschäftigen. FHEM läuft auf meinem Raspi und das schalten von Steckdosen funktioniert bereits.
Jetzt soll es weitergehen.
Als Erinnungsfunktion würde ich gern den Wecker meiner Fritzbox nutzen. Der Wecker muss beim Auftreten eines Ereignisses auf jetzt + x Minuten gesetzt werden. Das setzen des Weckers beim Ereignis klappt, allerdings nur starr mit set Fritzbox alarm 3 on 20:00 once.
Wie muss die Zeit eingefügt werden, damit der Wecker auf z.B. jetzt + 30 min. gesetzt wird?

Gruß
Torsten

David1977

http://fhem.de/commandref_DE.html#set

on-for-timer könnte hilfreich sein.

ZitatDas Gerät wird per "on" eingeschaltet, und ein interner Zeitgeber wird erstellt, um nach <sekunden> ein "off" Kommando auszuführen.

Als Beispiel:
set switch on-for-timer 12.5

iron.eagle

Hallo,

tut mit leid, ich versteh nicht, wie mir der on-for-timer beim setzen des Weckers in der Fritzbox helfen soll. Der Wecker verlangt eine Zeitangabe und die soll variabel jetzt + x Minuten sein.

Tschau
Torsten

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

iron.eagle

Hallo Otto,

sieht interessant. Danke erstmal.

Grüße
Torsten

iron.eagle

Hallo,

mit folgendem Code funktioniert das Setzen des Alarms auf jetzt plus 30 min..

define Fenster_offen notify Fensterkontakt:open { if ( ReadingsVal("Fritzbox", "alarm3_state", "off") eq "off") { my $time = time;; $time = $time +1800;; my ($sec, $min, $hour, $day,$month,$year) = (localtime($time))[0,1,2,3,4,5];; fhem("set Fritzbox alarm 3 on " . $hour .":". substr("0".$min,-2,2) . " once");; }}


Zweck:
Die Wecker soll mich erinnern, dass ich ein Fenster geöffnet habe, damit es nicht zu lange offen ist. Der Fensterkontakt meldet das öffnen und FHEM setzt den Wecker in der Fritzbox auf jetzt + 1800 s. Wird das Fenster (vorher) wieder geschlossen, löscht folgender Code den Wecker:

define Fenster_geschlossen notify Fensterkontakt:closed { if ( ReadingsVal("Fritzbox", "alarm3_state", "on") eq "on") {fhem("set Fritzbox alarm 3 off")} }


Ob der Perlcode effizient ist, weiß ich nicht ... ist nicht so meine Sprache; aber es funktioniert.

Schön wäre noch, wenn z.B. 25 min. gewartet wird und dann der Wecker auf jetzt plus 5 min. gesetzt wird. Wird das Fenster innerhalb der 25 min. wieder geschlossen, müsste das Setzen des Weckers natürlich abgebrochen werden. So spart man sich manchmal das Schreiben in die Fritzbox.

Tschau
Torsten

tupol

Anderer Vorschlag:
Das Öffnen das Bad-Fensters erzeugt bei mir eine Folge von at-Befehlen. Diese lassen dann in Abhängigkeit von der Außentemperatur in regelmäßigen Abständen das Telefon klingeln und sprechen. Das Schließen des Fensters löscht die verbleibenden at-Befehle.

Damian

Zitat von: iron.eagle am 21 März 2015, 20:55:53
Hallo,

mit folgendem Code funktioniert das Setzen des Alarms auf jetzt plus 30 min..

define Fenster_offen notify Fensterkontakt:open { if ( ReadingsVal("Fritzbox", "alarm3_state", "off") eq "off") { my $time = time;; $time = $time +1800;; my ($sec, $min, $hour, $day,$month,$year) = (localtime($time))[0,1,2,3,4,5];; fhem("set Fritzbox alarm 3 on " . $hour .":". substr("0".$min,-2,2) . " once");; }}


Zweck:
Die Wecker soll mich erinnern, dass ich ein Fenster geöffnet habe, damit es nicht zu lange offen ist. Der Fensterkontakt meldet das öffnen und FHEM setzt den Wecker in der Fritzbox auf jetzt + 1800 s. Wird das Fenster (vorher) wieder geschlossen, löscht folgender Code den Wecker:

define Fenster_geschlossen notify Fensterkontakt:closed { if ( ReadingsVal("Fritzbox", "alarm3_state", "on") eq "on") {fhem("set Fritzbox alarm 3 off")} }


Ob der Perlcode effizient ist, weiß ich nicht ... ist nicht so meine Sprache; aber es funktioniert.

Schön wäre noch, wenn z.B. 25 min. gewartet wird und dann der Wecker auf jetzt plus 5 min. gesetzt wird. Wird das Fenster innerhalb der 25 min. wieder geschlossen, müsste das Setzen des Weckers natürlich abgebrochen werden. So spart man sich manchmal das Schreiben in die Fritzbox.

Tschau
Torsten

Ich würde es mit einem Zweizeiler ohne Perl versuchen: ;)

define Fenster_offen DOIF ([Fensterkontakt] eq "open") (set Fritzbox alarm)
attr Fenster_offen wait 1800


Der set-Befehl kommt 30 Minuten später, wenn das Fenster zwischendurch nicht wieder geschlossen wird.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iron.eagle

Hallo Damian,

Zitat von: Damian am 21 März 2015, 21:48:10
Ich würde es mit einem Zweizeiler ohne Perl versuchen: ;)

define Fenster_offen DOIF ([Fensterkontakt] eq "open") (set Fritzbox alarm)
attr Fenster_offen wait 1800


Der set-Befehl kommt 30 Minuten später, wenn das Fenster zwischendurch nicht wieder geschlossen wird.

Danke für den Tipp, wie der Befehl erst später ausgeführt wird. Solange beschäftige ich mich noch nicht mit FHEM.
Benötigt das Setzen des Weckers in der Fritzbox nicht eine Uhrzeit? Bzw. die Uhrzeit ändert sich ja bei jedem öffnen, also muss sie ja mit übergeben werden.

Tschau
Torsten

iron.eagle

Hallo Tupol,

Zitat von: tupol am 21 März 2015, 21:35:44
Anderer Vorschlag:
Das Öffnen das Bad-Fensters erzeugt bei mir eine Folge von at-Befehlen. Diese lassen dann in Abhängigkeit von der Außentemperatur in regelmäßigen Abständen das Telefon klingeln und sprechen. Das Schließen des Fensters löscht die verbleibenden at-Befehle.

Könntest du die Befehle mal zeigen?
Zuerst wollte ich auch einen richtigen Anruf mit dem entsprechenden Ansagetext; habt das aber nicht hinbekommen. Daher die Lösung mit dem Wecker.

Tschau
Torsten

Damian

Zitat von: iron.eagle am 22 März 2015, 13:56:51
Hallo Damian,

Danke für den Tipp, wie der Befehl erst später ausgeführt wird. Solange beschäftige ich mich noch nicht mit FHEM.
Benötigt das Setzen des Weckers in der Fritzbox nicht eine Uhrzeit? Bzw. die Uhrzeit ändert sich ja bei jedem öffnen, also muss sie ja mit übergeben werden.

Tschau
Torsten

Die Syntax zum Setzen des Weckers in der Fritzbox kenne ich nicht. Du müsstest in diesem Fall den Wecker auf "sofort" stellen oder etwas anderes verwenden, was sofort eine Meldung liefert, weil die Verzögerung bereits im DOIF-Modul steckt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iron.eagle

Hallo Damian,

ich habe mich nochmal mit dem DOIF beschäftigt. Ich habe deine vorgeschlagene Zeile:

Zitat von: Damian am 21 März 2015, 21:48:10
define Fenster_offen DOIF ([Fensterkontakt] eq "open") (set Fritzbox alarm)
attr Fenster_offen wait 1800


um meinem Perlcode ergänzt:


define Fenster_offen DOIF ([Fensterkontak] eq "open") ( { my $time = time;; $time = $time +1800;; my ($sec, $min, $hour, $day,$month,$year) = (localtime($time))[0,1,2,3,4,5];; fhem("set Fritzbox alarm 3 on " . $hour .":". substr("0".$min,-2,2) . " once");; } )


Leider funktioniert das nicht. Im Log erscheint:

2015.03.29 13:28:16 2: Fenster_offen: { my $time = time; $time = $time +1800; my ($sec, $min, $hour, $day,$month,$year) = (localtime($time))[0,1,2,3,4,5]; fhem("set Fritzbox alarm 3 on " . $hour .":". substr("0".$min,-2,2) . " once"); }: Unknown command {, try help.
Unknown command $time, try help.
Unknown command my, try help.
Unknown command fhem("set, try help.
Unknown command }, try help.


Funktioniert Perlcode an dieser Stelle nicht oder habe ich was übersehen?

Grüße
Torsten