Hallo
Habe das Plugin mal etwas umgeschrieben, das man eine Rufumleitung mit einer GA EIN und wieder AUS schalten kann.
Gruß NetFritz
fritz_umleitung.pl
Habe das Plugin mal etwas umgeschrieben, das man eine Rufumleitung mit einer GA EIN und wieder AUS schalten kann.
Gruß NetFritz
fritz_umleitung.pl
Code:
######################
# Fritz-Box Rufumleitung EIN/AUS#
######################
# Wiregate-Plugin
# (c) 2012 Amaridian under the GNU Public License
# angepasst: KingOlli (KNX-User-Forum) am 02.05.2013
# Rufumleitung von NetFritz (KNX-User-Forum) 26.05.2013
# Die Rufumleitung muss in der FB programmiert werden
# funktioniert nur mit Fritz OS 5.50 oder höher
use LWP;
use Digest::MD5 'md5_hex';
#Cycle ist unerheblich
$plugin_info{$plugname.'_cycle'} = 86400;
# Definitionen
my $umleitung_ga = "2/1/1";
my $fritz_ip = '192.168.2.1';
my $id = "0"; # CallerIDActions0 für erste Umleitung
#Benutzer muss in der Web-Oberfläche der Fritzbox angelegt werden
my $fritz_user = 'xxx';
my $fritz_pw = 'xxxxxx';
#Gruppenadresse "abonnieren"
$plugin_subscribe{$umleitung_ga}{$plugname} = 1;
my $active;
# Bei einer gesendeten 1 und 0 reagieren
if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $umleitung_ga) {
if (int($msg{'data'}) == 1 ) {
$active = '1';
}
elsif (int($msg{'data'}) == 0 ) {
$active = '0';
}
# Login-Challenge und evtl. vorhandene Session-ID holen
my $user_agent = LWP::UserAgent->new;
my $http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua',
[
'sid' => defined($plugin_info{$plugname.'_sid'}) ? $plugin_info{$plugname.'_sid'} : '0',
],
);
$http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and my $sid = $1 and my $challengeStr = $2;
# Wenn noch eine gültige Session da ist, nehmen wir die
if($sid eq '0000000000000000'){
# Challenge zusammen mit PW hashen laut http://www.avm.de/de/Extern/files/session_id/AVM_Technical_Note_-_Session_ID.pdf
my $ch_Pw = "$challengeStr-$fritz_pw";
$ch_Pw =~ s/(.)/$1 . chr(0)/eg;
my $md5 = lc(md5_hex($ch_Pw)); #warum auch immer AVM hier UTF16LE haben möchte...
my $challenge_response = "$challengeStr-$md5";
# Mit der frisch errechneten Challenge-Response die Session-ID abholen
$http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua?username='.$fritz_user.'&response='.$challenge_response,
[
'getpage' => '../html/de/menus/menu2.html',
],
);
$http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and $sid = $1 ;
}
# Rufumleitung
# den gewünschten Befehl absetzen
$http_response = $user_agent->post('http://'.$fritz_ip.'/cgi-bin/webcm',
[
'getpage' => '../html/login_sid.xml',
'sid' => $sid,
'telcfg:settings/CallerIDActions'.$id.'/Active' => $active,
],
);
return("Rufumleitung ".$id." ist ".$active);
}



...
Kommentar