poc_einfaches_blf_mitel_telefone_6800_6900_verbindung_fritz_box

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:

  • 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

[...]

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

[...]
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

[...]
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
 
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.

  • poc_einfaches_blf_mitel_telefone_6800_6900_verbindung_fritz_box.txt
  • Zuletzt geändert: 2024/08/07 14:29
  • von Admin