RWN
7. Oktober 2009 um 17:01
21
Bitte schön. Ausführen als Script.
<?
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$password = 'xxxxx';
$aus = '0';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
$login = array('getpage' => $fritzseite, 'login:command/response' => $response);
$sendlogin = http_post_fields($fritzgui, $login);
preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
else
{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
$clearjournal = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:pagename' => 'foncalls', 'telcfg:settings/ClearJournal' => $aus));
$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);
?>
Hallo RWN,
Und jetzt noch die Rufumleitung ein und ausschalten können… :rolleyes:
Das wird ja langsam zu einer Fernbedienung der Fritzbox, super!
Gruß
Klaus
RWN
7. Oktober 2009 um 18:11
23
ungetestet. Schaltet Umleitung 1 Ein oder Aus.
if ($IPS_VALUE)
{
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
}
else
{
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
}
$checksetting = array('getpage' => $fritzseite, 'var:menu' => 'fon', 'var:pagename' => 'rulall');
$sendcheck = http_post_fields($fritzgui, $checksetting);
preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);
if (isset($matches[1]) && $matches[1] == 1)
{
SetValue(55119 /*[Umleitung]*/, 1);
}
else
{
SetValue(55119 /*[Umleitung]*/, 0);
}
Hallo Rainer,
ich habe den Kopf vom Anrufer Script dazu gepackt, damit ich das Script einzeln aufrufen kann.
Es kommt keine Fehlermeldung aber es wird auch nicht umgeschaltet. :o
<?
$anrufliste="";
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$filename = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\Anrufliste.csv";// anpassen
$password = 'xx';
$ein = '1';
$aus = '0';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
$login = array('getpage' => $fritzseite, 'login:command/response' => $response);
$sendlogin = http_post_fields($fritzgui, $login);
preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
else
{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
if ($IPS_VALUE)
{
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
}
else
{
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
}
$checksetting = array('getpage' => $fritzseite, 'var:menu' => 'fon', 'var:pagename' => 'rulall');
$sendcheck = http_post_fields($fritzgui, $checksetting);
preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);
if (isset($matches[1]) && $matches[1] == 1)
{
SetValue(22437 /*[Telefon\Telefon\Anrufumleitung1]*/, 1);
}
else
{
SetValue(22437 /*[Telefon\Telefon\Anrufumleitung1]*/, 0);
}
?>
Gruß
Klaus
coolice
7. Oktober 2009 um 21:13
25
und das noch mit einer kleinen Auswahl von Rufnummern aus der man eine wählt auf die umgeleitet wird.
Wie immer. Mein Dank gehört dir.
Grüße Mirco
Liste löschen funktioniert prima
Vielen Dank Rainer!
RWN
7. Oktober 2009 um 21:50
27
… das schau ich mir morgen noch mal am lebenden Objekt an :rolleyes:
RWN
8. Oktober 2009 um 17:18
28
Hallo Klaus,
ich habe es gerade bei mir getestet. Funktioniert so wie oben angegeben einwandfrei.
und das noch mit einer kleinen Auswahl von Rufnummern aus der man eine wählt auf die umgeleitet wird
Sollte kein Problem sein. Man kann sich eine Auswahl Variable im Webfront mit verschiedenen Nummern anlegen.
Voraussetzung das die umgeleitete Nummer immer der selben Person zugewiesen wird.
coolice
8. Oktober 2009 um 20:54
29
Sollte kein Problem sein. Man kann sich eine Auswahl Variable im Webfront mit verschiedenen Nummern anlegen.
Voraussetzung das die umgeleitete Nummer immer der selben Person zugewiesen wird
Hä?
Wie jetzt? Wie muss sowas aussehen?
RWN
9. Oktober 2009 um 14:14
30
Hallo Mirco,
es könnte z.B. so aussehen.
<?
if ($IPS_SENDER == "WebFront")
{
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$password = 'xxxxxx';
$ein = '1';
$aus = '0';
$nummerhandy = '12345';
$nummerbuero = '56789';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
$login = array('getpage' => $fritzseite, 'login:command/response' => $response);
$sendlogin = http_post_fields($fritzgui, $login);
preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
else
{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
switch($IPS_VALUE)
{
case 0:
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
break;
case 1:
$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
break;
case 12345: // Wert der Integervariable
SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,12345);
$handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerhandy));
break;
case 56789: // Wert der Integervariable
SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,56789);
$buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerbuero));
break;
}
$checksetting = array('getpage' => $fritzseite, 'var:menu' => 'fon', 'var:pagename' => 'rulall');
$sendcheck = http_post_fields($fritzgui, $checksetting);
preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);
if (isset($matches[1]) && $matches[1] == 1)
{
SetValue(40159 /*[Fritzbox\Rufumleitungen\Rufumleitung Telefon Werkstatt]*/ , 1);
}
else
{
SetValue(40159 /*[Fritzbox\Rufumleitungen\Rufumleitung Telefon Werkstatt]*/ , 0);
}
$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);
}
?>
coolice
9. Oktober 2009 um 18:35
31
Hallo Rainer,
danke dafür. Habe das Script angepasst.
Würdest Du für jemanden wie mich noch eine Kurze Anleitung schreiben was für Variablen benötigt werden und wie das ganze für das WF zu konfigurieren ist. Sieht bei Dir echt gut aus.
Mirco
RWN
10. Oktober 2009 um 09:06
32
Hallo Mirco,
das ist im Prinzip immer das gleiche.
Dummymodul, Boolvariable, Intvariable.
Profil Bool => Switch,
Profil Int => erstellen Rufumleitung, Wert und Text zuweisen.
Beide Variablen dem Script zuweisen.
coolice
10. Oktober 2009 um 19:24
33
Hallo Rainer,
schnell noch 1 bis 2 Fragen.
Muss das
case 12345: // Wert der Integervariable
SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,12345);
$handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerhandy));
break;
case 56789: // Wert der Integervariable
SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,56789);
$buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerbuero));
so aussehen
case 0: // Wert der Integervariable
SetValue(43754 /*[Nachrichten\Rufumleitungen\umleiten zu]*/,017157xxxxx);
$handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handysassi));
break;
case 1: // Wert der Integervariable
SetValue(43754 /*[Nachrichten\Rufumleitungen\umleiten zu]*/,0172xxxxxxx);
$buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handymirco));
„43754“ ist meine Integer Variable und !10949" meine Boolean.
Grüße Mirco
Hallo Rainer,
habe gerade noch mal Dein neues Script für die Rufweiterleitung ausprobiert.
Leider wieder kein Erfolg. Meine Softwareversion auf der Fritzbox ist 29.04.76.
Kann es sein, das sich etwas geändert hat? (oder hast Du die gleiche?)
Ich bekomme keine Fehlermeldung in IPS, im Fritzlog steht nur angemeldet von IP x.x.x.x
Gruß
Klaus
RWN
14. Oktober 2009 um 06:20
35
Moin Klaus,
bei mir läuft die Labor Firmware. 54.04.99-14869
Mach doch mal einen Shot von deinen Einstellungen der Rufumleitung(FrameQuelltext ganz unten)
Hallo Rainer,
ich werde heute Abend mal die gleiche Softwareversion aufspielen.
Mal sehen, ob es dann geht.
Gruß
Klaus
Sven
14. Oktober 2009 um 16:16
37
Ich habe mich heute mal rangesetz Statusmeldungen aus der Fritzbox aus zu lesen.
Mit dem Status der Anrufbeantworter 1-3 hab ich es ja auch hin bekommen, aber mit den Status von WLAN / DSL und der Rufumleitungen komme ich nicht weiter.
Gibt es den im Netz eine Beschreibung der Parameter ?
'getpage' => $fritzseite,
'var:menu' => 'home',
'var:pagemaster' => 'fondevices',
'var:pagename' => 'fondevices'
Ich möchte beim Aufruf der Fritzseite im Webinterface erstmal den aktuellen Stand aller wichtigen Informationen aus der Box auslesen.
Gruß Sven
RWN
14. Oktober 2009 um 16:19
38
Hallo Sven,
Wlan steht im 2ten Post.
Ob es eine Beschreibung für die Parameter gibt, weis ich nicht.
Rausfinden kann man diese selber, indem man auf der entsprechenden Unterseite in den Framequelltext geht.
Sven
14. Oktober 2009 um 16:24
39
im 2ten Post steht wie man das Wlan an/abschaltet, nicht wie man den Status aus der Box ausliest oder ???
Gruß und danke Sven
RWN
14. Oktober 2009 um 16:30
40
Das geht aus dem ersten Post hervor. Du musst nur die entsprechenden Parameter übergeben, dann hast Du auch den Status.
als Beispiel Wlan mit Status.
if ($IPS_VALUE)
{
$wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $ein));
}
else
{
$wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $aus));
}
$checksetting = array('getpage' => $fritzseite, 'var:menu' => 'wlan', 'var:pagename' => 'common');
$sendcheck = http_post_fields($fritzgui, $checksetting);
preg_match('@name="wlan:settings/ap_enabled" value="([10])"@i', $sendcheck, $matches);
if (isset($matches[1]) && $matches[1] == 1)
{
SetValue(55119 /*[Fritzbox\Wlan 5 GHz\Wlan]*/, 1);
}
else
{
SetValue(55119 /*[Fritzbox\Wlan 5 GHz\Wlan]*/, 0);
}