[Release] Fritz.box Cisco Phonebook XML Applikation

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
XML Applikation für Cisco Phones.

Features:
* Automatische Erzeugung des Cisco Telefonbuches aus dem Fritzbox Telefonbuch
* Auswahl des verwendeten Fritzbox Telefonbuches über die Directory.xml
* Suchfunktion (Freitextsuche in den Namen)
* Blättern nach Buchstaben
* Support von "Durchblättern" mehrseitiger Ergebnislisten
* Ohne Freetz möglich ( ein Webserver auf fritzbox ist einzige Voraussetzung )
* Ohne PC und anderes Zusatzgeräte

TODO:
* pro Telefon ein anderes buch. zur Zeit wird das Tempfile gemeinsam genutzt
* eventuell Auslagerung der Bucherstellung in eine Services.xml zum manuellen Updaten. Dadurch wird die Aufrufzeit des Telefonbuches verkürzt, aber man muss eben manuell Updaten. Kann ggf später mal durch cron automatisiert nachts gemacht werden oder so.


Alle hier geposteten Sniplets und Codezeilen sind frei für jeden verwendbar.
Meine einzige Bedingung:
Wenn ihr den Code verbessert und weiter entwickelt postet ihn bitte auch hier damit alle was davon haben!

Aktuelle Version:
Version 3.1

Anleitung:
1) Webserver auf Fritzbox aktivieren ( Forumsuche )
2) Verzeichnis /www/ aus dem ZIP-Archiv in die www-root.
3) Ggf Konstanten anpassen in den shellfiles ( z.B. Fritzbox-IP, Pfade etc)
4) Directory xml in /www/ anpassen. Diese in die Phoneconfig eintragen ( Forumsuche )

Die im ZIP Archiv enthaltenen Dateien sind vorbereitet für eine fritzbox unter der IP 192.168.2.2 mit einem Webserver auf port 81.
Dies kann in der Datei "PB-Full.sh","Directory.xml" und "PB-Search.xml" geändert werden.
Die weiteren Beispieldateien (debug.sh, tftp-binary, http binary, ...) sind für eine 7270v3.

Support für das Einspielen der Dateien bitte in anderen Threads ( Forensuche ).

Getestet werden kann das Funktionieren wie folgt:
http://192.168.2.2:81/Directory.xml
Im Browser (IE) eingeben ( IP und port natürlich anpassen).
Das ergebnis sollte ein XML sein in dem der Link zum Telefonbuch zu sehen ist.
Diesen im Browser eingeben. Ergebnis sollte nach ein paar Sekunden die erste Ergebnisseite (Namen die mit A beginnen) sein.
usw.


Changelog:
Code:
3.1    17-feb-2012
  * Umlaute werden ersetzt (z.B. ä durch ae)
  * Kleiner Bugfix bei Seitenwechsel (mehr als 98 Zeilen Suchergebnis)
3.0    17-feb-2012
  * Automatischer Abgleich Fritz-Telefonbuch => Cisco-Telefonbuch
       (Dank an er13 für das Script)
  * Cleanup
2.1    12-feb-2012
  * Seitenweise anzeige mit 98 Einträgen pro Seite
  * Einige werte in variablen den an Anfang des Scripts ausgelagert (z.B. Ip der box)
  * Ein paar Kommentare inline eingefügt.
2.0    12-feb-2012
  * Anfangsbuchstabenbasierte Anzeige
  * Suche berücksichtigt nur noch Text zwischen <Name> Tags
  * Script und Fileanzahl reduziert
1.0    11-feb-2012
Todo:
Codeoptimierungen.
 

Anhänge

Zuletzt bearbeitet:

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Grundvoraussetzungen schaffen:
TFTP Server und HTTP server an port 81 auf die box.

Beispielvorgehensweise bei mir an der 7270:
[! keine Support und keine Gewährleistung! Das ist nur ein Beispiel!]
1) tftp-hpa_5_2 für die box kompilieren mit Trunk SVN von Freetz und Patch.
Das vorgehen ist woanders im Forum dokumentiert. Im Prinzip wird per vm eine Freetz-Trunk mit hpatftpd patch kompiliert und das das binary herauskopiert.
Es geht hierfür auch jeder andere TFTP-Server auf der box.
2) mini_httpd binary besorgen
Ich habe hierfür mini_httpd_FW67 genommen in der "static" version.
3) USB stick an die Box anschliessen.
* tdtpd und mini_httpd auf den Stick in die root.
* Verzeichnisse www und tftproot auf dem Stick in der root anlegen
4) debug.sh File mit folgendem Inhalt in der root des Sticks anlegen:
Code:
/var/media/NEW_LINK/tftpd -l -s /var/media/NEW_LINK/tftproot -u root
/var/media/NEW_LINK/mini_httpd -p 81 -d /var/media/NEW_LINK/www -u root -c "PB-Full.sh|PB-Filter.sh"
dann die debug.cfg auf der box ergänzen um:
Code:
# External debug.sh by hippie2000
i=0
while ! [ -e /var/media/NEW_LINK/debug.sh ]; do
  sleep 5
  let i++
  [ $i -lt 12 ] && continue
  break
done
[ $i -lt 12 ] && /var/media/NEW_LINK/debug.sh
===>
Nach einem Reboot (oder Ausführen der debug.sh auf dem Stick) ist die box nun mit einem http Server auf port 81 und einem tftp Server auf port 69 ausgerüstet.
Der http Server lässt ein Ausführen der Scripts PB-Full.sh und PB-Filter.sh per webbrowser zu.
 
Zuletzt bearbeitet:

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Grundkonfiguration des Telefons auf die tftproot des Usbstick einspielen.
Wichtig ist dabei in der XML config die Zeile:
Code:
<directoryURL>http://192.168.2.2:81/Directory.xml</directoryURL>
Hierbei hat im meinem Beispiel die box welche das Directory hält die IP 192.168.2.2.
Der Webserver läuft auf Port 81 und die Hauptseite des Directory ist Directory.xml.

Beispielkonfig sampleconfig.zip:
Nur allgemeine Config. 3 Lines. 2 Speeddials (es gibt ja 6 buttons).

Vorbereitung:
3 IP-Telefoniegeräte auf der Fritte anlegen (620,621,622) und Telefonnummern zuweisen.
Die config legt diese auf die 3 oberen Tasten. Die beiden unteren sind Speeddials.
Zeilen mit * anpassen.
 

Anhänge

Zuletzt bearbeitet:

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
XML Files für das Directory

Die Webfiles kommen auf den Stick in das Verzeichnis www.
Nun erzeugen wir die Directory.xml:
Code:
<CiscoIPPhoneMenu>
<MenuItem>                                               
  <Name>Telefonbuch</Name>          
  <URL>http://192.168.2.2:81/PB-Full.sh</URL> 
</MenuItem>                                       
</CiscoIPPhoneMenu>
Diese Erzeugt zusätzlich zu den Missed Calls etc. einen 4. Eintrag im Directory Bildschirm namens "Telefonbuch".
Bei Aufruf dieses Eintrages wird auf der Box (192.168.2.2) das Script PB-Full.sh aufgerufen.

Dieses muss einen Output erzeugen der wieder einem passendem XML File für das Phone entspricht:
Code:
#!/bin/sh
echo "Content-type:text/xml" 
echo ""
cat /var/media/NEW_LINK/www/PB-head.xml
cat /var/media/NEW_LINK/www/PB-data.xml
cat /var/media/NEW_LINK/www/PB-tail.xml
echo ""
Der zum Phone übermittelte Inhalt besteht aus 3 Teilen:
PB-head.xml:
Code:
<CiscoIPPhoneMenu>
<Title>Telefonbuch</Title>
Recht unspektakulär. Definiert einfach den Namen des Menüs und macht das xml für das Phone lesbar.
PB-tail.xml:
Code:
<SoftKeyItem>
  <Name>Dial</Name>
  <URL>SoftKey:Select</URL>
  <Position>1</Position>
</SoftKeyItem>
<SoftKeyItem>
  <Name>Exit</Name>
  <URL>SoftKey:Exit</URL>
  <Position>3</Position>
</SoftKeyItem>
<SoftKeyItem>
  <Name>Search</Name>
  <URL>http://192.168.2.2:81/PB-Search.xml</URL>
  <Position>4</Position>
</SoftKeyItem>
</CiscoIPPhoneMenu>
Warum der Mittelteil erst später kommt erfahrt ihr gleich :)
Hier aber das Ende der Ausgabe.
Dort werden die Softkeys am unteren Bildschirmrand definiert.
Select und Exit mit den Standardfunktionen.
Search für die Suche (Scriptfile, kommt später).
Am Ende wird das XML für das Phone abgeschlossen.

Nun zum Mittelteil (PB-data.xml):
Dieser enthält das eigentliche Telefonbuch.
Code:
<MenuItem><Name>Name1 Nachname1</Name><URL>Dial:012345678</URL></MenuItem>
<MenuItem><Name>Name2 Nachname2</Name><URL>Dial:012456789</URL></MenuItem>
Also wie ihr seht für jeden Telefonbucheintrag eine Zeile.
Format seht ihr oben.
======> Jetzt fehlt nur noch ein Script das diesen Teil automatisch generiert. Deshalb auch separat (und wegen der Suche).
Unter Umständen kann es sinn machen diese Datei nach /tmp/ auszulagern wenn diese in Zukunft automatisch bei jedem Aufruf aktualisiert werden soll.


Das Directory ist im Prinzip nun fertig. Ihr seht aber das es noch einen Search-Button gibt.
Der kommt im nächsten Post :)
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Die Suche

Die Suche muss man natürlich auch selbst machen. Ist bei Cisco halt so :)
Also erstellen wir eine PB-Search.xml für das neue Menü:
Code:
<CiscoIPPhoneInput>
  <Title>Search for Name in Phonebook</Title>
  <Prompt>Search for</Prompt>
  <URL>http://192.168.2.2:81/PB-Filter.sh?</URL>
  <InputItem>
    <DisplayName>Search Pattern</DisplayName>
    <QueryStringParam>search</QueryStringParam>
    <InputFlags>A</InputFlags>
    <DefaultValue></DefaultValue>
  </InputItem>
</CiscoIPPhoneInput>
Diese erzeugt eine Eingabebox (standard Cisco).
Es werden nur Alphanumerische Eingaben angenommen (Inputflags=A).
Der Name für den Parameter ist "search" (QueryStringParam).
Bei drücken von "Submit" in der box ruft das Phone nun die Url ergänzt um den Parameternamen, dann "=" und dann den eingegebenen Wert auf.

Gibt man also oben im Beispiel z.B. Name1 ein, dann wird aufgerufen:
http://192.168.2.2:81/PB-Filter.sh?search=Name1
(Abfangen von Sonder- und Leerzeichen welche die Parameterübergabe stören finden nicht statt. Wenn das jemand ergänzen will gerne, aber postet dann hier auch eure Verbesserungen!).

Nun müssen wir die Suche noch ausführen. Dafür gibt es die "PB-Filter.sh":
Code:
#!/bin/sh
SEARCHPAT=`echo "$QUERY_STRING" | grep -oE "[?]*search=[^?]*" | cut -f 2 -d "="`
echo "Content-type:text/xml" 
echo ""
cat /var/media/NEW_LINK/www/PB-head.xml
cat /var/media/NEW_LINK/www/PB-data.xml | grep $SEARCHPAT
cat /var/media/NEW_LINK/www/PB-tailfilter.xml
echo ""
Die erste Zeile sucht im Übergabestring nach "search=" und dem Wert dafür.
Dieser wird der Variable SEARCHPAT zugewiesen.
Die Suche wird einfach realisiert indem die Directorydaten per grep gefiltert werden.
(Deswegen auch pro Eintrag eine Zeile... Simple&Stupid).
Man bemerke hier die andere tail.xml.
PB-tailfilter.xml:
Code:
<SoftKeyItem>
  <Name>Dial</Name>
  <URL>SoftKey:Select</URL>
  <Position>1</Position>
</SoftKeyItem>
<SoftKeyItem>
  <Name>Exit</Name>
  <URL>SoftKey:Exit</URL>
  <Position>3</Position>
</SoftKeyItem>
</CiscoIPPhoneMenu>
Ähnlich der vorherigen, nur ohne Suche.
Grund dafür ist das man ansonsten immer wieder das Suchmenü über das normale legt und das sehr unübersichtlich wird.
Somit kann man aus der Suche nur mit exit zurück zum vorherigen Bild.
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
TODO aktuell:

Ich benötige irgendein shellscript das aus dem phonebook der Fritzbox eine Datei im Format
Code:
<MenuItem><Name>Name1 Nachname1</Name><URL>Dial:012345678</URL></MenuItem>
<MenuItem><Name>Name2 Nachname2</Name><URL>Dial:012456789</URL></MenuItem>
erzeugt.

Wenn das jemand kann... nehme ich die Hilfe gerne an.
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Version 2.0

Nun ist die Version 2.0 fertig.

Änderungen:
* Buchtabenbasierte Anzeige
Statt der Komplettliste des Phonebooks wird nun nur Buchstabe A beim ersten Aufruf angezeigt.
Mit Softkeys kann hier der Buchstabe ausgewählt werden (im A-Screen also Z und B usw).
Hintergrund: Es können maximal 100 Einträge in einem Phone-Menü eingetragen werden.
* Reduzierung der Shellscripts
Es wird nur noch 1 Shellscript verwendet. Somit kann zum Aufruf des HTTP servers die Zeile "/var/media/NEW_LINK/mini_httpd -p 81 -d /var/media/NEW_LINK/www -u root -c "PB-Full.sh" verwendet werden.
Desweiteren wurde die Anzahl xml-files reduziert.

Version 2.0
 
Zuletzt bearbeitet:

Schetti

Neuer User
Mitglied seit
8 Mrz 2005
Beiträge
104
Punkte für Reaktionen
0
Punkte
0
Hi,
Dein Projekt hört sich gut an. Ich würde das gerne auf einer 7390 ausprobieren. Ist die Vorgehensweise identisch? Ich denke das einzig Kritische ist die Modifikation der debug.cfg. Läuft das analog zur 7270?

Christian.
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Ich geh davon aus das ja. In der wiki findest du die Vorgehensweise.

Aber die binaries (tftp und mini_http) wirst du eventuell oder eher vermutlich selbst für deine box kompilieren müssen. Da kenn ich mich def. nicht aus.
Sobald der tftp und der http server aber laufen sollte das identisch sein.
 

Schetti

Neuer User
Mitglied seit
8 Mrz 2005
Beiträge
104
Punkte für Reaktionen
0
Punkte
0
Hi,
kann man irgendwie festellen, ob der Webserver läuft? Ich habe einfach erst mal Deine Dateien genommen, da ich keine Maschine habe, in der ich den TFTP und den HTTP-Server compilieren kann.

Christian
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
du solltest mit http://<boxipadresse>:81/Directory.xml eine Ausgabe bekommen.
Also vermutlich mit http://fritz.box:81/Directory.xml

Kompilieren kannst du auch gut mit Windows und der passenden vm für Virtualbox. Anleitungen dazu sind im wiki.
Aber ich würde auch erst mal die binaries von der 7270 probieren. Vielleicht geht es ja damit.

Du kannst auch per telnet auf die box und "ps | grep http" bzw "ps | grep tftp" eingeben um zu sehen ob die Prozesse laufen.
Wenn sie nicht laufen mal die "debug.sh" vom usb stick aufrufen (also "/var/media/NEW_LINK/debug.sh").
Geht das gar nicht prüfen ob die Dateien die passenden Rechte haben (ls -ln und schauen ob da mindestens r und x steht).
Ansonsten kannst du auch mal nacheinander die Befehle in der debug.sh bei telnet eingeben und schauen ob es irgendwelchen Output gibt :)
 
Zuletzt bearbeitet:

Schetti

Neuer User
Mitglied seit
8 Mrz 2005
Beiträge
104
Punkte für Reaktionen
0
Punkte
0
Hi,
ich glaube die bin-Files funzen nicht. Kommt nur Quatsch bei raus, wenn ich die debug.sh starte.
dann muss ich mir wohl zwangsläufig ne virtuelle Umgebung bauen um die beiden Files zu backen, wenn das noch niemand gemacht haben sollte.

Code:
# /var/media/NEW_LINK/debug.sh
/var/media/NEW_LINK/tftpd: line 1: syntax error: unexpected "("
/var/media/NEW_LINK/mini_httpd: line 1: @4ôýP4: not found
/var/media/NEW_LINK/mini_httpd: line 1: can't open ÀÆ!ààÿ&frac12;¿¯°¯&frac14;¯Ð[email protected]: no such file
/var/media/NEW_LINK/mini_httpd: line 1:ELÇ!àðè9: not found
$¡¢: no such fileNK/mini_httpd: line 3: can't open &frac12;D¬$
$$$: not found_LINK/mini_httpd: line 3: ¢c$
/var/media/NEW_LINK/mini_httpd: line 3: : not found
/var/media/NEW_LINK/mini_httpd: line 3: @: not found
/var/media/NEW_LINK/mini_httpd: line 3: ÿ0Ðÿb$ÿB0: not found
/var/media/NEW_LINK/mini_httpd: line 4: syntax error: unexpected "(
Christian.
 

Schetti

Neuer User
Mitglied seit
8 Mrz 2005
Beiträge
104
Punkte für Reaktionen
0
Punkte
0
Hallo,
sorry, aber ich brauche hier noch mal ein wenig Starthilfe. Ich habe nun die vm laufen und habe makemenuconfig gestartet. Wo finde ich das tftp und http Paket, oder werden die automatisch mit compiliert?
Gruß,
Christian
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Viel kann ich dir da auch nicht helfen.
Durch den Thread http://www.ip-phone-forum.de/showthread.php?t=245031 habe ich den tftp server bekommen.
Den mini-httpd habe ich hier im Forum runtergeladen (war als binary gepostet => suchfunktion da ich den Link nicht parat habe)


EDIT:
Übrigens wird dort http://www.ip-phone-forum.de/showthread.php?t=245413 grad das passende Script zum automatischen Abgleich erstellt :)
Zzt lasse ich das immer beim ersten Aufruf live aus dem Phonebook generieren und dann kann man browsen.
Coole Sache.
 
Zuletzt bearbeitet:

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Version 3.0:
* Automatische Generierung des Telefonbuches aus dem Fritz-Telefonbuch bei Aufruf der Directory.xml
* Unterstützung mehrerer Telefonbücher (siehe Directory.xml- dort wird das angezeigte Telefonbuch definiert).
* Cleanups
* Standardmäßig wird ein file in tmp generiert für die Anzeige. Nicht auf dem stick.

Der Aufruf dauert nun ein paar Sekunden (bei ersten Aufruf pro Directory Session) da das File generiert wird.


TODO:
* ÄÖÜ usw müssen noch "übersetzt" werden
* Prüfen ob das so mit dem Update praktikabel ist oder besser per Cron stündlich ein Updatescript gestartet wird.

Eventuell werde ich später das automatische Update durch eine Applikation auf dem Sercice-Button ersetzen. Dann müsste man die Updates manuell anstossen. Das würde ich aber gerne vermeiden.

Wenn jemand optimierungen findet bitte posten, besonders wenn diese die Geschwindigkeit der Seiten betreffen.
 

Schetti

Neuer User
Mitglied seit
8 Mrz 2005
Beiträge
104
Punkte für Reaktionen
0
Punkte
0
Hallo disorganizer,
ich hätte Dein Projekt gerne ausprobiert, aber ich krieg den Webserver nicht ans laufen. Gibt offensichtlich niemanden der den Webserver für die 7390 compiert hat und im Forum finde ich nichts, was mir beim "selbercompilieren" helfen könnte.

Schade...
Christian
 

disorganizer

Neuer User
Mitglied seit
14 Mai 2010
Beiträge
83
Punkte für Reaktionen
0
Punkte
6
Ich kann da leider auch nicht helfen.
Den mini_httpd habe ich im forum als binary gefunden und nicht selbst kompiliert.
Eventuell musst du dann Freetzen oder weiterschauen ob dir jemand damit helfen kann bzw ob du es hinbekommst z.B. Apache zu kompilieren.
Der Webserver ist im Endeffekt ja egal.

Theoretisch könntest du auch einen bestehenden Pfad aus dem Fritzbox Webserver mit bind auf den Flash legen und dort arbeiten (im Script bzw den xml's musst du dann die Pfade ggf anpassen).
Hinweise dazu gibt es auch im Forum, z.B. dort.
Man verliert halt dadurch einen Teil der Funktionalität (z.B. die Hilfe).
Oder man kopiert das original-Verzeichnis per script nach tmp, dann die eigenen Files dazu für das Phone und dann mit bind auf das Fritzbox Webif binden.

EDIT:
Dort gibt es eine Apache Version für die 7390.
Das wäre doch was für dich zum testen?
 
Zuletzt bearbeitet:

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,920
Beiträge
2,028,165
Mitglieder
351,086
Neuestes Mitglied
MiggeMR