FritzBox: Weckzeit einstellen

Aus FHEMWiki
Version vom 19. Januar 2017, 21:44 Uhr von Krikan (Diskussion | Beiträge) (Intrawiki-Links korrigiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die Funktion stellt die Weckzeiten auf der FritzBox ein. Alternativ kann eine Weckzeit aktiviert oder deaktiviert werden.

fhem.cfg (Beispiel)

define FBWeckzeit dummy
 attr FBWeckzeit setList state:time
define n_FBWeckzeit_In_FHEM_verstellt notify FBWeckzeit {\
    {FB_WeckerStellen(3,Value("FBWeckzeit"),"FritzFon",3)}\
    {Log 3, (' n_FBWeckzeit_In_FHEM_verstellt: $EVENT')}\
}

Sub (z.B. 99_myutils.pm)

######## FB_WeckerStellen ##############################################################################
## Einstellen der Weckzeiten auf der Fritzbox (7390)            Erstellt: LaLeLu, 16.12.2012
## What  : Set Alarm or Switches Alarm on or off
## Call  : { FB_WeckerStellen(WeckrufNr,Weckzeit,Telefon,Wiederholung) }
##
## Folgende Parameter sind zu übergeben:
## 1. $pWeckNr:    1-3                (Default: 3)
## 2. $pZeit:     "hh:mm","On","An","Off","Aus"
## 3. $pTelefon:   "FritzFon","Siemens","Alle"    (Default: Alle) (Optional)
## 4. $pWiederholung: 0-3                (Default: 3)  (Optional)
##
## Beispiele: {FB_WeckerStellen(3,"12:34","FritzFon",3)}
##      {FB_WeckerStellen(2,"Aus")}
##      {FB_WeckerStellen(1,"On")}
##
## Tastencode		Funktion
## #88w*hhmmd*ns*	Weckruf konfigurieren und aktivieren
## #88w**	 		Weckruf aktivieren
## #88w#	 		Weckruf deaktivieren
##  w: Wecker 1-3
##   hh: Stunde 00-23
##    mm: Minute 00-59
##     d: Wiederholung: 0=MO-FR, 1=SA-SO, 2=MO-SO, 3=keine Wdh.
##      ns: Interne Nummer der Nebenstelle
##
## angelehnt an: http://wiki.fhem.de/wiki/Fritzbox:_WLAN_ein/ausschalten
##  siehe auch: http://www.wehavemorefun.de/fritzbox/Weckruf
########################################################################################################
sub
FB_WeckerStellen($$;$$) {
 my $pWeckNr    = shift;
 my $pZeit     = shift;
 my $pTelefon   = shift;
 my $pWiederholung = shift;
 my $ret      = "";
 
 my $info = "Weckruf: $pWeckNr";
 if ($pWeckNr < 1 or $pWeckNr > 3 or length($pWeckNr)==0) {$pWeckNr = 3; $info .= '? => 3'};
 

 $info .= ", Telefon: $pTelefon";
 if  ($pTelefon =~ /FritzFon/i) { $pTelefon = 60 }
 elsif ($pTelefon =~ /Siemens/i) { $pTelefon = 61 }
 elsif ($pTelefon =~ /Alle/i)  { $pTelefon = 9 }
 else              { $pTelefon = 9; $info .= '? => Alle'};
 if  ($pWiederholung == 0 and length($pWiederholung) == 1) {$info .= ', Wiederholung: 0=MO-FR'}
 elsif ($pWiederholung == 1) {$info .= ', Wiederholung: 1=SA-SO'}
 elsif ($pWiederholung == 2) {$info .= ', Wiederholung: 2=MO-SO'}
 elsif ($pWiederholung == 3) {$info .= ', Wiederholung: 3=Einmal wecken (keine Wiederholung)'}
 else            {$pWiederholung = 3; $info .= ', Wiederholung: ? => 3=Einmal wecken (keine Wiederholung)'};
 if ($pZeit  =~ /An/i or $pZeit  =~ /On/i) {
        $info = "Weckruf: $pWeckNr $pZeit";
        my $atd = '"ATD#88'.$pWeckNr.'**"';
        $ret = "ATD: " . `echo $atd | nc 127.0.0.1 1011` ;
        sleep 1 ;
        $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
        $ret =~ s,[\r\n]*,,g;    # remove CR from return-string
        Log 3, "FB_WeckerStellen($info) ($atd) returned: $ret";
 }
 elsif ($pZeit  =~ /Aus/i or $pZeit  =~ /Off/i) {
        $info = "Weckruf: $pWeckNr $pZeit";
        my $atd = '"ATD#88'.$pWeckNr.'#"';
        $ret = "ATD: " . `echo $atd | nc 127.0.0.1 1011` ;
        sleep 1 ;
        $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
        $ret =~ s,[\r\n]*,,g;    # remove CR from return-string
        Log 3, "FB_WeckerStellen($info) ($atd) returned: $ret";
 }
 elsif ($pZeit  =~ /[0-2][0-9]:[0-5][0-9]/) {
        $info .= ", Zeit: $pZeit";
        $pZeit =~ s/://;
        my $atd = '"ATD#88'.$pWeckNr.'*'.$pZeit.$pWiederholung.'*'.$pTelefon.'*"';
        $ret = "ATD: " . `echo $atd | nc 127.0.0.1 1011` ;
        sleep 1 ;
        $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
        $ret =~ s,[\r\n]*,,g;    # remove CR from return-string
        Log 3, "FB_WeckerStellen($info) ($atd) returned: $ret";
 }
 else {
  $info .= "? => Uhrzeit ist falsch!" ;
 Log 3, "FB_WeckerStellen($info) returned: $ret";
 };
 my $ReturnText = $info;
}

Bemerkungen

Diese Funktion ist getestet auf einer FritzBox 7390.

Links

FritzBox Offset-Uhrzeit aus Weckzeit berechnen