Oft gefragt, nie gelöst: Telefonbuch FBF

Neueintrag ins FBF-Telefonbuch

Verstehe langsam, was Du mit "<id 0-xx?>" meinst.

Wie finden wir die richtige (=nächste freie?) ID heraus, um einem vorhanden FBF-Telefonbuch einen neuen Eintrag hinzuzufügen?

Hab mal einen Neueintrag via WebIF nachverfolgt (in meinem Fall war es Entry16 "Erika Muster 011, 022, 033"):
Code:
getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=fonbuch&var%3Aerrorpagename=fonbuch2&var%3Amenu=home&var%3Apagemaster=fonbuch&time%3Asettings%2Ftime=1208247923%2C-120&var%3Ashowall=&var%3AshowStartIndex=&var%3APhonebookEntryNew=Entry16&var%3APhonebookEntryXCount=0&var%3APhonebookEntryNewCode=04&var%3APhonebookEntryNumber=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FName=Erika+Muster&telcfg%3Asettings%2FPhonebook%2FEntry16%2FCategory=0&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber0%2FType=home&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber0%2FNumber=011&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber0%2FCode=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber0%2FVanity=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber1%2FType=mobile&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber1%2FNumber=022&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber1%2FCode=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber1%2FVanity=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber2%2FType=work&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber2%2FNumber=033&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber2%2FCode=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FNumber2%2FVanity=&telcfg%3Asettings%2FPhonebook%2FEntry16%2FDefaultNumber=0

Demnach würde vor Deinem Scriptaufruf ein:
Code:
ID=`grep -c '<category>' /var/flash/phonebook`
die nächste ID für einen neuen Eintrag liefern.

Ein neuer Eintrag funktioniert dann mit:
Code:
./avm_pb.sh "xxx" "$ID" "Neuer Name" "12345"

Die Frage ist, ob grep hier alle Möglichkeiten des FBF-Tel.buches berücksichtigt und es nicht doch (irgendwann) zu ungewollten Kollisionen/Ersetzungen führt?

Vielleicht gibt es ja noch einen sichereren Weg zum ermitteln der ID, als den grep? Vielleicht kann man mit getpage den letzten Entry finden? Irgendsowas tut die Funktion des WebIF-Buttons "Neuer Eintrag" ja wahrscheinlich auch, um die nächste freien ID zu erzeugen(?)
 
Zuletzt bearbeitet:
Das geht bestimmt irgendwie. Vielleicht steht die Anzahl der Einträge auch schon als Wert in der vorherigen Seite, dann könnte man diesen als Startwert nehmen.
 
Das geht bestimmt irgendwie.
Hi Bodega,bräuchte Deine Hilfe wie ich die Telbuch-Webseite hole, (um dann den FBFEntryXCount daraus zu ermitteln, darüber wär es auch denkbar die ID eines Namens zu ermitteln für Funktionen wie ersetzen oder löschen...)

Hab aber mal per Script (siehe unten) und mit WebIF Einträge hinzugefügt und dann getestet - der o.g. grep auf <category> scheint gut zu passen, um die ID zu bekommen. Nur im POST_DATA erwartet meine Firmware (FW: 29.04.56-10575) wohl eine leichte Anpassung (u.a. auch <category>) - siehe code. Hab den POST so einfach wie möglich gehalten, fülle hier nur die erste Nummer, da es mir um das calllog geht und die anrufende CID eindeutig ist.

Hab nun mein calllog mal umgebaut:

Wenn FBF den Namen im fonbuch findet (also $4 folgende gefüllt ist/sind), wird er vom calllog-script entsprechend angezeigt.
Wenn nein, dann wird im oertlichen gesucht und das FBFBook um die Nummer (CID) und den Namen (name) ergänzt:

hier der Auszug:
Code:
USB_Stick=`echo /var/media/ftp/*`
name="Test Name"
CID="0123456789"
FBFPASSW="xxx"

FBFEntryXCount=`grep -c '<category>' /var/flash/phonebook`
cat /var/flash/phonebook > $USB_Stick/phonebook_${FBFEntryXCount}_`date +"%Y-%m-%d_%H-%M-%S"` # Sicher ist sicher

export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
POST_DATA="login:command/password=$FBFPASSW"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=fonbuch2&var:PhonebookEntryNew=Entry${FBFEntryXCount}"
cd /usr/www/html/cgi-bin
./webcm > /dev/null

POST_DATA="telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Name=${name}&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Category=0&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number0/Type=home&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number0/Number=${CID}&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number0/Code=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number0/Vanity=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number1/Type=mobile&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number1/Number=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number1/Code=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number1/Vanity=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number2/Type=work&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number2/Number=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number2/Code=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/Number2/Vanity=&telcfg:settings/Phonebook/Entry${FBFEntryXCount}/DefaultNumber=0"
export CONTENT_LENGTH=${#POST_DATA}
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
 
Zuletzt bearbeitet:
Du könntest den Wert auch aus der vorherigen Seite ermitteln, nachdem das Passwort übertragen wurde:

Code:
... passwort übertragen ...

export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=fonbuch"
cd /usr/www/html/cgi-bin
let ENTRY=`./webcm | grep -c "Phonebook/Entry"`

... eintrag durchführen ...
Damit zählst du die Phonebook Einträge auf der Seite "fonbuch". Ich schaue mir immer im Firefox den Framequelltext an. Unter den Eigenschaften kann man auch gut die Variablen sehen, welche ausgelesen/übertragen werden.

Bei der Sache ist immer zu beachten, dass wenn man etwas schreibt mit POST, ein vorheriges GET stattfinden muss, damit vorher die Variablen der Seite eingelesen wurden.
 
Super, danke, funktioniert ebenfalls prima.

Gehe nun neben der Sicherung von /var/flash/phonebook
Code:
cat /var/flash/phonebook > $USB_Stick/calllog/phonebook_${FBFEntryXCount}_`date +"%Y-%m-%d_%H-%M-%S"`
nochmal auf nr. sicher und prüfe vor dem Neuseintrag noch ob.
Code:
`grep -c '<category>' /var/flash/phonebook` == `./webcm | grep -c "Phonebook/Entry"`
gleich sind.

So kriege ich bei Firmwareänderungen und evtl. Änderungen in der Struktur des phonebook mit.
 
Kann man auf Eure obige Art eigentlich auch die Beschränkung des Fritzbox-Telefonbuchs auf 100 Einträge überlisten?
 
Try & Error, probiert habe ich es nicht. Denke aber, dass es nicht funktionieren wird, da man auch keine 2 Terrabyte auf einer 400 GB Festplatte ablegen kann (ungepackt versteht sich ;)).
 
Dem "Try & Error" schließ ich mich an. Ist ja nun per Script schnell probiert und mit o.g. Sicherung auch kein Risko.

Aber vielleicht kann man ja per Trick oder demnächst per Firmware optional das Telefonbuch auf den Stick verlagern... vielleicht hier bei AVM mal einkippen? "Anregungen zur FRITZ!Box Fon WLAN 7170"
 
Hallo,

ich hab mehr als 100 Einträge im Fritz Telefonbuch, nur sind viele davon nicht mit einer Kurzwahl versehen. Allerdings habe ich sie mal mühsam über das Webinterface der 7270 eingetippt.
 
1. (Telefonbuch auf USB-Stick)
Da mit asterisk auf der Fritzbox sogar die Einbindung von zentralen Telefonbüchern, die auf Servern liegen, per ldap möglich sein soll, hatte ich vermutet, dass auch das Fritzbox-Telefonbuch (auf den USB-Stick) verlagert werden kann. Gefunden habe ich dazu bislang allerdings nichts, aber irgendwo in den Dateien der Fritzbox müsste man doch eine Pfadanpassung machen könne.

2. (Zahl der Telefonbucheinträge)
Der AVM-Fritzbox-Monitor streikt bei mir bereits bei Export von mehr als 60 Einträgen zur Fritzbox.
Per Hand kann ich dann im FB-Webinterface weitere Einträge hinzufügen. Bis 99 wird Kurzwahl eingefügt. Und in der Tat kann ich per Hand auch noch weitere Einträge hinzufügen, wenn auch keine Kurzwahl eingetragen wird; hab's erst mal nur bis 104 versucht.
(7170, Firmware 29.04.56-10575)
 
Max. 147 Einträge habe ich aus Excel-Dateien ins FB-Telefonbuch auf folgende Weise übertragen können.
FB-Telefonbuch mit nur 1 Eintrag im FB-Webinterface anlegen.
Tel.buch auf den usb-Stick exportieren:
cat /var/flash/phonebook > /var/media/ftp/USBFlashMemory-Partition-0-1/phonebook
(USB-Bezeichnung zuvor an Deine anpassen).
Aus phonebook den Teil zwischen dem ersten <phonebook></phonebook>, also beginnend mit <contact>, so in eine leere Excel-Tabelle kopieren, dass jedes Steuerzeichen (z.B. <contact>) und jeder Wert eine eigene Zelle hat; alle Zellen in einer Zeile.
2 neue Spalten einfügen nach dem Wert für den Namen: eine mit einem Komma und eine mit einem Wert für einen Vornamen.
Sollen Kurzwahlen eingetragen werden, so kann die Spalte number type aufgespalten werden in 3 Spalten: eine für den Text bis ...quickdial=", eine für die Kurzwahlnr. und eine für den Text ab "vanity=....
Die Spalten für Vor-/Nachnamen und Telefonnr. auffüllen mit den gewünschten Werten aus einer anderen excel-Tabelle (z.B. aus einem jfritz-export oder einem Outlook-Export).
Die übrigen Spalten derjenigen Excel-Tabelle, in die phonebook kopiert wurde, in der Länge anpassen durch Ziehen an der jeweiligen rechten unteren Zell-Ecke (darauf achten, dass die Spalte categorie nicht fortlaufend nummeriert wird, sondern die Werte 0 beibehält und dass in der Spalte quickdial zwischen den Anführungszeichen nichts steht, zumindest soweit es die Kurzwahl 99 überschreitet).
Tel.nr.spalte formatieren mit Format/Zelle/Zahl/0 Dezimalstellen.
Strg-a und Format/Spalte/optimale Breite festlegen.
Ganzen excel-Inhalt markieren und in einen leeren Word-Text einfügen.
Alles markieren (strg-a, Markierung um einen Schritt reduzieren mit Shift<-) und Zellen verbinden (Menü Tabelle).
Alles markieren und Tabelle in Text umwandeln (Menü Tabelle).
Entferne alle Zeilenschaltungen (strg-h, suche nach erweitern, sonstiges, Absatzmarke, alle ersetzen).
Füge Zeilenschaltung ein vor jedem Wort type: strg-h, suche nach type, ersetze durch erweitern, sonstiges, Absatzmarke+type (ohne+), alle ersetzen.
Da Wordpad so lange Zeilen anscheinend nicht verträgt, muss das phonebook mit Word hergestellt werden.
Also aus dem Ur-Phonebook alles bis einschließlich dem ersten <phonebook> und alles ab dem (inkl.) ersten </phonebook> vor bzw. hinter den Wordtext einfügen und diesen als Nur-Text abspeichern.
Dann die txt-Endung löschen.
Die Datei phonebook hat jetzt bei max. 148 Einträgen eine Größe von 32 KB (da 32KB eine besondere Zahl ist, könnte auch dies die Größenbegrenzung des phonebooks sein).
Phonebook zurück zur FB kopieren:
cat /var/media/ftp/USBFlashMemory-Partition-0-1/phonebook > /var/flash/phonebook
phonebook reloaden:
killall pbd
pbd
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.