Automatische Rufumleitung

Begonnen von Muk.s, 01 Mai 2014, 18:44:37

Vorheriges Thema - Nächstes Thema

Muk.s

Hallo Zusammen,
Nachdem ich hier schon einige Zeit mitlese und die eine oder andere Anregung bzw Problemlösung gefunden habe, hier mal ein kleiner Beitrag meinerseits.

Aus diversen Codeschnipsel hier habe ich mir eine eigene Version für das automatische Ein-Ausschalten der Rufumleitung auf der Fritzbox gebastelt (ohne Fhem Installation auf der Fritzbox). Grundlage ist eine eingerichtete Rufumleitung, die ich mittels Kurzwahl aktivierte bzw deaktivierte.

Über eine Anwesenheitsprüfung meines iPhone (mittels Bluetooth) steuere ich den Wert eines dummy (Rufumleitung). Über das folgende notify wird dann ein script in der 99_myUtils aufgerufen.

define RULeinaus notify Rufumleitung {MyFB_RULSwitch("%")}


Inhalt der 99_myUtils.pm

#
# MyFB_RULSwitch
# schaltet Rufumleitung ein/aus
#

sub
MyFB_RULSwitch($@) {
use Net::Telnet;
# fhem("sudo bash");
my $name = "MyFB_RULSwitch";
my $Cmd = "$_[0]";
my $Fon = "1";
my $CallNr = "**710"; # eingerichtete Kurzwahl auf der FB zum Einschalten der Rufumleitung
my $Duration = "5";
my $Port = "192.168.xxx.yyy";
my $User = "mein-fb-User";
my $Pass = "mein-fb-Passwort";
if (($Cmd =~ /off/i)|($Cmd =~ /Abwesend/i)|($Cmd =~ /aus/i)|($Cmd =~ /inaktiv/i)|($Cmd eq 0)) { 
   $CallNr = "**711";    # eingerichtete Kurzwahl auf der FB zum Ausschalten der Rufumleitung
}
my $telnet = new Net::Telnet ( Timeout=>10, Errmode=>'die');
Log GetLogLevel($name,1), "$name: Connecting to FritzBox:$Port";
$telnet->open($Port);
$telnet->waitfor('/user: $/i');
$telnet->print($User);
$telnet->waitfor('/password: $/i');
$telnet->print($Pass);
$telnet->waitfor('/# $/i');
Log GetLogLevel($name,1), "$name: Dialing to FritzBox: from:$Fon to:$CallNr...";
$telnet->print('echo "ATP'.$Fon.'2 ATD'.$CallNr.'" | nc 127.0.0.1 1011');
my $output = $telnet->waitfor('/# $/i'); print $output;
Log GetLogLevel($name,1), "$name: Dialing:$Duration seconds...";
sleep($Duration);
Log GetLogLevel($name,1), "$name: HangOn to FritzBox...";
$telnet->print('echo "ATH0" | nc 127.0.0.1 1011');
$output = $telnet->waitfor('/# $/i'); print $output;
Log GetLogLevel($name,1), "$name: Disconnecting...";
$telnet->print('exit');
return;
}
# end of MyFB_RULSwitch

Das ganze läuft jetzt schon einige Wochen ohne Probleme.
Vielleicht kann es ja jemand gebrauchen.

Grüße
Michael

Gisbert

Hallo Michael,

ich suche genau nach dieser Möglichkeit.
Dazu habe ich noch ein paar Fragen:

Wo ist in deinem Code der dummy für die Anwesenheitskennung zu finden? Wie heißt er?
Port: ist das die Fritzbox oder ist etwas anderes damit gemeint?
Nur um sicher zu sein: mein-fb-User und mein-fb-Passwort sind die, die in der Fritzbox eingerichtet sind. Was macht man, wenn man nur ein Passwort, aber keinen User eingerichtet hat?

LG
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY