FritzBox: Rufumleitung automatisieren

Aus FHEMWiki
Version vom 24. Januar 2017, 15:30 Uhr von Krikan (Diskussion | Beiträge) (Typo)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Funktion FB_RULswitch

automatisiert die Rufumleitung (RUL) der Fritz!Box. In Anlehnung an die WLAN EIN/AUS Funktion FB_WLANswitch, die seit der FHEM Version 5.3 Bestandteil von FritzBoxUtils.pm ist, ist eine Funktion entstanden, die eine Rufumleitung durch FHEM ein- oder ausschalten, das Rufumleitungsziel verändern oder gar eine neue RUL anlegen kann. Sie unterstützt die Funktion von "WhoIsAtHome" mit den Stati "Anwesend" und "Abwesend". Damit kann zum Beispiel bei "Abwesenheit" einer Person, eine Rufumleitung auf eine beliebige Rufnummer gelegt und diese bei "Anwesenheit" wieder automatisch deaktiviert werden. In Anhängigkeit von beliebigen Ereignissen kann so eine Rufumleitung aktiviert, deaktiviert oder angelegt werden. Unterstützt werden alle Merkmale wie "sofort", "verzögert", " bei Besetzt", "parallel" und "bei Klingelsperre".

Der einfache Aufruf zum Ein- oder Ausschalten der RUL erfolgt z. Bsp. aus der fhem.cfg (oder der FHEMWEB-Komandozeile) heraus mit der Funktion {FB_RULswitch("%")}. Gültige Werte für "%" sind on, ON, off, OFF, Anwesend, Abwesend, 0 oder 1. "Anwesend" und "Abwesend" sind Rückgabewerte aus der WerIstZuHause Funktion. Daher wird bei "Abwesend" ein RUL "on" und bei "Anwesend" ein RUL "off" generiert.

Der Aufruf kann aber auch mit {FB_RULswitch('Rufumleitungsart','Nebenstelle',"Zielrufnummer")} erfolgen. Damit eröffnen sich noch mehr Möglichkeiten.


Sub z.B. 99 MyUtils.pm

######## Switch FB Rufumleitung on/off ############################################################################
#
# Aufruf mit {FB_RULswitch("%")} oder {FB_RULswitch('Rufumleitungsart','Nebenstelle',"Zielrufnummer")}
# mögliche Kommandos für "%" zum Deaktivieren der Rufumleitung: 0,oFF,AUS,ANwesend (Groß-/Kleinschreibung egal)
# 			   zum Aktivieren der Rufumleitung: z.Bsp. 1,On,Ein,Abwesend
# define RUL FS20
# attr RUL dummy 1
# define RULeinaus notify RUL {FB_RULswitch("%")}
sub
FB_RULswitch($@) {
 my $out = "";
 my $ret = "";       #### Hier erfolgt die Standardvorgabe der 3 Parameter Art,Nebenstelle,Zielrufnummer
 my $cmd = "";       # RUL deaktivieren: off,aus,anwesend; RUL aktivieren: z.Bsp. 1,on,ein,abwesend 
 my $art = "1";	      # Art: 1=sofort 2=verzögert 3=besetzt 4=2oder3 5=Parallelruf 6=bei Klingelsperre(0=Aus)
 my $nst = "1";	      # Nebenstelle, die umgeleitet werden soll 1=FON1 2=FON2 3=FON3 
 my $ziel = "0123456789";  # ZielRufnummer, auf die umgeleitet wird
 my $laenge = @_;
 return "Anzahl Parameter nicht korrekt. Erlaubt sind 1 oder 3, nicht aber $laenge!" if (($laenge ne 1)and($laenge ne 3));
if ($laenge eq 3){
 $art = $_[0];
 $nst = $_[1];
 $ziel = $_[2];
 return "Ungueltiges Datenformat!" if (($art !~/^[0-6]$/)|($nst !~/^[123]$/)|($ziel =~/\D/));
}
 $cmd = $_[0];
#############################################################################
if (($cmd =~ /Off/i)|($cmd =~ /Anwesend/i)|($cmd =~ /Aus/i)|($cmd eq 0)) { # Schreibweise ignorieren
   $art = "0";                              # RUL Aus
 }                                     # sonst RUL ein
 $out = "ATD#4" . "$art$nst" . "*" . "$ziel" . "*";            # Wählstring zusammensetzen
 $ret .= "ATD: " . `echo "$out" | nc 127.0.0.1 1011`;            # wählen
 sleep 1 ;                            	  #
 $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ; 	      # auflegen
 $ret =~ s,[\r\n]*,,g;                 	      # remove CR from return-string
 Log 1, "FB_RULswitch($cmd) send: $out returned: $ret";  	      # Ergebnis in Logdatei
}                              		  #
#############################################################################


Testaufruf

Eingabe im FHEM Frontend: {FB_RULswitch("Anwesend")} oder {FB_RULswitch("Abwesend")}

Beispiel in fhem.cfg

# Definition vom mein_Handy
define mein_Handy dummy
attr mein_Handy room WerIstZuHause
attr mein_Handy setList Anwesend Abwesend
#
# Definition von RUL als Dummy, um den Status anzeigen zu können. Für die eigentliche Funktion wird er nicht gebraucht.
define RUL dummy
attr RUL alias Rufumleitung
attr RUL eventMap Anwesend:Aus Abwesend:Ein # übersetzen der Ergebnisse aus FB_WLANswitch in Ein und Aus
attr RUL icon RUL.Ein
attr RUL room WerIstZuHause
#
# Bekannte Ermittlung des WerIstZuHause-Status via ping (wiki)
define WerDa notify WerDa {FhemLanStat("192.168.xxx.xxx","mein_Handy")} # xxx.xxx = IP vom Handy (aus FB auslesen)
#
# Nun der eigentliche "Akt" und Setzen des dummy-Status.
define RULeinaus notify mein_Handy {FB_RULswitch("$EVENT")} ; set RUL $EVENT

Hinweise

Getestet auf einer Fritzbox 7390 (FHEM-Image-5.3) und freiem FON1-Port. RUL in der FB eingerichtet.

Icon

RUL.ein.png und RUL.aus.png

Links