- Mitglied seit
- 8 Sep 2010
- Beiträge
- 3,670
- Punkte für Reaktionen
- 688
- Punkte
- 113
Die Fritz!Box unterstützt bis zuletzt kein BLF (BusyLampField), trotzdem kommt dazu immer mal wieder eine Nachfrage auf.
Dieses Proof of Concept soll darlegen, dass es möglich ist, dies mit etwas Aufwand nachzurüsten. In wie weit der Aufwand sinnvoll gegenüber der Wahl einer "richtigen" Telefonanlage ist, soll hier nicht Thema sein.
Voraussetzungen:
Was funktioniert:
Bei zwei Telefonen ist jeweils eine Taste als
Was funktioniert nicht:
Einrichtung:
Anpassung der Konfigurationsdateien für die Telefone auf dem Provisionierungsserver. Betrachtet werden hier nur die Zeilen, die für die Funktion des BLF notwendig sind:
startup.cfg
Erläuterung:
Damit wird festgelegt, dass von dieser IP XML Code zum Telefon gesendet und dort ausgeführt werden darf.
<mac des telefons>.cfg für das Telefon mit der internen Nummer 620
Erläuterung:
Im ersten Teil wird das SIP Konto der Fritz!Box eingerichetet. Die Action URI werden beim jeweiligen Event aufgerufen.
Für dieses Telefon wurde die obere Taste mit der ID 12 als
<mac des telefons>.cfg für das Telefon mit der internen Nummer 621
Erläuterung:
Siehe Erläuterung Telefon 620.
Datei xml.php auf dem Webserver:
Erläuterung:
Diese PHP Script besteht aus zwei Teilen:
Das Script lässt sich natürlich um weitere Telefone erweitern. Bei 3 und mehr Telefonen lohnt dann aber wahrscheinlich schon der Einsatz einer Datenbank inkl. Schleifen. Damit ist es einfacher festzuhalten, welches Telefon, welche BLF an welcher Position eingerichetet hat.
Dieses Proof of Concept soll darlegen, dass es möglich ist, dies mit etwas Aufwand nachzurüsten. In wie weit der Aufwand sinnvoll gegenüber der Wahl einer "richtigen" Telefonanlage ist, soll hier nicht Thema sein.
Voraussetzungen:
- Fritz!Box (oder ein beliebiger anderer Router, die Einrichtung der SIP Konten muss dann entsprechend angepasst werden)
- zwei oder mehrere Mitel Telefone mit festen IP Adressen
- ein Webserver mit PHP im lokalen Netzwerk
- ein Provisionierungsserver (z.B. TFTP), alternativ können die Telefone auch von Hand konfiguriert werden
Was funktioniert:
Bei zwei Telefonen ist jeweils eine Taste als
BLF
eingerichtet und leuchtet entweder rot, wenn auf dem anderen Telefon gesprochen wird, blinkt (gelb) wenn auf dem anderen Telefon ein Anruf eingeht, oder ist aus (grün), wenn das Gespräch beendet wurde bzw. die Leitung frei ist. Zusätzlich kann mit einem Druck auf die Taste das andere Telefon gerufen werden.Was funktioniert nicht:
- Es ist kein Heranholen möglich. Mit dem Einsatz einer Datenbank und dem Zwischenspeichern des Status des jew. Telefons lässt sich das aber nachrüsten.
- Schnurlose, ISDN und analoge Telefone an der Fritz!Box werden nicht unterstützt. Die Fritz!Box bietet afaik keine Möglichkeit den Status bzw. ein Event zu einem Server zu senden. Es existiert zwar ein CallMonitor, dieser müsste aber aktiv abgefragt werden.
- Bei einem Neustart des Telefons ist der Status des anderen Telefons 'unbekannt'. Durch die Einbindung der Action URI
register
lässt sich das aber korrigieren.
Einrichtung:
Anpassung der Konfigurationsdateien für die Telefone auf dem Provisionierungsserver. Betrachtet werden hier nur die Zeilen, die für die Funktion des BLF notwendig sind:
startup.cfg
Code:
[...]
xml application post list: <ip des webservers>
[...]
Erläuterung:
Damit wird festgelegt, dass von dieser IP XML Code zum Telefon gesendet und dort ausgeführt werden darf.
<mac des telefons>.cfg für das Telefon mit der internen Nummer 620
Code:
[...]
sip line1 screen name: <name>
sip line1 screen name 2: <name>
sip line1 user name: <benutzername fritzbox ip telefon 620>
sip line1 display name: 620
sip line1 auth name: <benutzername fritzbox ip telefon 620>
sip line1 password: <passwort fritzbox ip telefon 620>
[...]
action uri incoming: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey12 type: xml
topsoftkey12 label: <beschriftung der taste>
topsoftkey12 value: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&call=**621
[...]
Erläuterung:
Im ersten Teil wird das SIP Konto der Fritz!Box eingerichetet. Die Action URI werden beim jeweiligen Event aufgerufen.
incoming
ist dabei ein eingehender Ruf, connected
ist ein laufendes Gespräch und disconnected
ist auflegen.Für dieses Telefon wurde die obere Taste mit der ID 12 als
BLF
ausgewählt. Durch die Definition als xml kann die Taste von außen manipuliert werden. In unserem Fall hier, soll sie blinken (Anruf geht ein), leuchten, oder aus sein. Bei Telefonen mit entsprechenden Displays soll das Event zusätzliche farblich marktiert werden: grün, wenn die Leitung frei ist, gelb blinkend, wenn ein Anruf eingeht und rot, wenn gesprochen wird. Beim drücken der Taste wird auch wieder eine URL aufgerufen, dazu später mehr.<mac des telefons>.cfg für das Telefon mit der internen Nummer 621
Code:
[...]
sip line1 screen name: <name>
sip line1 screen name 2: <name>
sip line1 user name: <benutzername fritzbox ip telefon 621>
sip line1 display name: 621
sip line1 auth name: <benutzername fritzbox ip telefon 621>
sip line1 password: <passwort fritzbox ip telefon 621>
[...]
action uri incoming: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey2 type: xml
topsoftkey2 label: <beschriftung der taste>
topsoftkey2 value: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&call=**620
[...]
Erläuterung:
Siehe Erläuterung Telefon 620.
Datei xml.php auf dem Webserver:
PHP:
<?php
function push2phone($server,$phone,$data)
{
$xml = "xml=".$data;
$post = "POST / HTTP/1.1\r\n";
$post .= "Host: $phone\r\n";
$post .= "Referer: $server\r\n";
$post .= "Connection: Keep-Alive\r\n";
$post .= "Content-Type: text/xml\r\n";
$post .= "Content-Length: ".strlen($xml)."\r\n\r\n";
$fp = @fsockopen ( $phone, 80, $errno, $errstr, 5);
if($fp)
{
fputs($fp, $post.$xml);
flush();
fclose($fp);
}
}
$server = '<ip des webservers';
if(isset($_GET['action'])) {
$action = $_GET['action'];
$nst = $_GET['nst'];
if($nst == 620) { $phoneip = '<ip des telefons mit der nst 621>'; $phonekey = 'topsoftkey2'; }
if($nst == 621) { $phoneip = '<ip des telefons mit der nst 620>'; $phonekey = 'topsoftkey12'; }
$actions = [
'incoming' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=fastflash:yellow"/></AastraIPPhoneExecute>',
'connected' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=on:red"/></AastraIPPhoneExecute>',
'disconnected' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=off:green"/></AastraIPPhoneExecute>',
];
$xml = $actions[$action];
push2phone($server,$phoneip,$xml);
}
if(isset($_GET['call'])) {
$call = $_GET['call'];
$nst = $_GET['nst'];
if($nst == 620) { $phoneip = '<ip des telefons mit der nst 620>'; }
if($nst == 621) { $phoneip = '<ip des telefons mit der nst 621>'; }
$xml = '<AastraIPPhoneExecute triggerDestroyOnExit="yes"><ExecuteItem URI="Dial:'.$call.'" interruptCall="yes" title="Test"/></AastraIPPhoneExecute>';
push2phone($server,$phoneip,$xml);
}
?>
Erläuterung:
Diese PHP Script besteht aus zwei Teilen:
action
für die Manipulation der BLF Taste und call
für den Ruf des jeweils anderen Telefons. Über die Funktion push2phone() wird das XML zum Telefon gesendet und dort ausgeführt. Hinweis für action
: Hier sind Nebenstelle und IP Adresse des Telefons vertauscht. Es soll ja die Taste des anderen Telefons blinken oder leuchten.Das Script lässt sich natürlich um weitere Telefone erweitern. Bei 3 und mehr Telefonen lohnt dann aber wahrscheinlich schon der Einsatz einer Datenbank inkl. Schleifen. Damit ist es einfacher festzuhalten, welches Telefon, welche BLF an welcher Position eingerichetet hat.