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