carddav2fb - angepaßte Version

SnoopyDog

IPPF-Promi
Mitglied seit
14 Jul 2005
Beiträge
3,058
Punkte für Reaktionen
224
Punkte
63
Hallo,

da ich seit einiger Zeit meine Kontakte und Kalender auf einer ownCloud zu Hause verwalte, fehlte der automatische Telefonbuchimport der Frtiz!box von einem Online-Anbieter. Ein Carddav-Import ist derzeit nicht auf der Fritzbox verfügbar. Nach einiger Suche fand ich das Script "carddav2fb.php", welcher aber leider nicht weiter gepflegt wurde. Also habe ich mich hingesetzt und das vorhandene erweitert bzw. an das neue Fritz!box API angepaßt.
Funktionen:

  • Auslesen eines oder mehrerer CardDAV-Adreßbücher und Export dieser Daten direkt in die Fritz!box oder in eine XML-Datei.
  • Unterstützung mehrerer interner Telefonbücher der Fritz!box.
  • Optionaler Import-Filter nach Kontaktgruppen.
  • Alle Kontakte, welche der Gruppe "VIP" angehören (Name konfigurierbar), werden im FBF-Telefonbuch als "wichtig" angelegt. Derzeit nur im ersten Telefonbuch der Box möglich.
  • Rudimentäre Unterstützung für Kontaktfotos.

"Installation":
  • Das zip-File irgendwo auf eurem Server entpacken. Die Ordnerstrutur muß erhalten bleiben!
  • Zugriffsrechte auf "root" setzen.
  • In Fritz!box und Cloudsoftware am besten neue Logins anlegen, da diese mit Paßwort im Klartext in der Konfigdatei gespeichert werden.
  • Die Datei "config.example.php" umbenennen in "config.php" und die darin enthaltenen Daten anpassen.
  • Optional für weitere Telefonbücher in der Box je eine neue config-Datei erstellen.

Aufruf: php -f carddav2fb.php [configfile]

[configfile] ist ein optionaler Parameter, wenn er fehlt wird "config.php" verwendet.

Beschreibung der Konfigdatei - zum Aktivieren von optionalen Parametern vorne das "//" entfernen und mit sinnvollen Werten ersetzen:

$config['fritzbox_ip'] = 'fritz.box';
=> Name der Fritzbox im Netzwerk. Kann auch durch IP-Adresse ersetzt werden.

$config['fritzbox_user'] = 'fb_username';
=> Login-Name an der Fritz!box

$config['fritzbox_pw'] = 'fb_password';
=> Paßwort für obigen Benutzer

$config['phonebook_number'] = '0';
=> Nummer des internen Telefonbuchs. '0' ist das Haupt-Telefonbuch, '1'..'n' alle weiteren.

$config['phonebook_name'] = 'FBF_Name';
=> Name für das Telefonbuch, wie er in der Box angezeigt werden soll. Geht derzeit nicht/nur teilweise beim primären Telefonbuch.

//$config['output_file'] = '/media/share/phonebook.xml';
=> Optional: Ausgaben in die angegebene Datei schreiben, anstatt sie direkt zur Box zu senden.

//$config['group_filter'] = array('Arzt','Familie','Freunde','Friseur','Geschäftlich','Hotline','Notruf','Restaurant','Shops');
=> Optional: Nur Kontakte der angegebenen Gruppen einlesen.

$config['group_vip'] = 'VIP';
=> Gruppenname für "wichtige" Anrufer.

//$config['usb_disk'] = 'USBDISK2-0-01';
=> Optional: Basispfad des USB-Speichers an der Fritzbox, unterhalb dessen sich das Verzeichnis "FRITZ\fonpix" befindet.

$config['carddav'][0] = array(
'url' => 'https://raspserver/owncloud/remote.php/carddav/addressbooks/fritzbox/fb_contacts',
=> Url des ersten einzulesenden Adressbuchs des Cloudspeichers.

'user' => 'oc_username',
=> Benutzername dieses Cloudspeichers.

'pw' => 'oc_password'
=> Paßwort für obigen Benutzernamen.
);

... optional beliebig viele weitere zu importierende Adressbücher. Alle Adressbücher werden zu einem Fritz!box-Telefonbuch zusammengefaßt.

Anmerkungen zu Kontaktfotos: Wenn die Option 'usb_disk' aktiviert wurde, werden in die XML-Datei Links auf Kontaktfotos eingefügt. Diese Fotos müssen derzeit VOR dem Export zur Fritz!box auf deren USB-Speicher vorhanden sein! Falls die Box wie oben den Namen "USBDISK2-0-01" vergeben hat, kopiert man die Fotos nach "\\fritz.box\FRITZ.NAS\USBDISK2-0-01\FRITZ\fonpix".
Konventionen für diese Bilder:
  • Format quadratisch.
  • Nicht größer als 600x600 Pixel.
  • Dateiformat jpeg mit Endung .jpg
  • Name muß dem vollen Kontaktnamen, wie er in der Fritzbox angelegt wird, entsprechen. Umlaute werden wie folgt ersetzt: Ä => Ae / Ö => Oe / Ü => Ue / ä => ae / ö => oe / ü => ue / ß => ss / Akzente werden einfach entfernt ( z.B.à => a). Leerzeichen und kaufmännisches und (&) werden durch einen Unterstrich ersetzt ( _ ) . Ein Foto für "Heiner Müller" muß "Heiner_Mueller.jpg" heißen, bei "Betty & Fritz" wird daraus "Betty___Fritz.jpg". Linux packt die Umlaute zwar teilweise, aber das Mobilteil nicht.
Nach einem Telefonbuch-Upload mit Kontaktfotos kann es sein, daß das/die entsprechende(n) Mobilteil(e) für einen längeren Zeitraum den Text "Synchronisation" oben im Display anzeigen. Dies bedeutet, daß sie sich die Bilder "reinziehen".
Bildqualität ist auf einem MT-F subjektiv besser, als wenn man sie über die Fritz!box-Oberfläche hochlädt.

Getestet mit ownCloud unter Raspbian und Cubian. Fritzbox ist eine 7270 V3 mit aktueller Beta-Firmware. Ich habe die Scripten so weit hinbekommen, daß keine Warnungen mehr angezeigt werden.

Fritzbox-API vom User "spackmat" habe ich leicht modifiziert, daß man nur eine einzige Konfigdatei braucht.

Links:
Fritz!box-API: http://www.ip-phone-forum.de/showthread.php?t=196309
Originalversion carddav2fb: https://github.com/carlos22/carddav2fb
 

Anhänge

  • carddav2fb.zip
    45.8 KB · Aufrufe: 1,474
Zuletzt bearbeitet:
Hallo,
genau das ist es, was ich suchen. Ich möchte auch von meiner FB 7390 auf Kontakte zurükgreifen welche auf einem CardDAV Server liegen (bei mir posteo.de).
Was ich aber noch nicht ganz verstehe ist ob es ein manuelles Einlesen oder oder ein automatischer Sync der Daten ist. Ebenso ist mir nicht klar mit welchen Tools (php) ich das unter Windows hinbekomme.
Würd mich freuen wenn du mich erleuchten könntest :)
 
Hallo Dirk,

Du kannst Dir aussuchen, wie Du das Skript betreibst. Man kann es in der Kommandozeile manuell aufrufen oder automatisiert über einen Cronjob. Für Windows müßte es auch einen PHP-Interpreter geben, aber ich weiß nicht, ob man dann in den Skripten enthaltene Pfade umstellen muß ( "/" => "\" ) und ob es grundsätzlich funktioniert.

Benutzen tu ich das Ganze nur auf meinem Cubietruck (zuvor einem Raspberry Pi) und getestet wurde es auch nur unter Linux. Im Link zum Fritz!box API gibt es hierzu ein paar Informationen.
 
Für welche Firmware-Version wurde das Script geschrieben? Funktioniert das mit 6.04?
 
Ich weiß nicht, wie ich dir danken soll! Funktioniert perfekt!

- FritzBox 7390 (06.03)
- RaspBerry Pi mit Baikal (CardDAV)

config.php anpassen mit IP, PW und den Daten für Baikal und das Teil rennt los...

Ich habe gestern bis 23.30 Uhr mit der Originalversion gekämpft und dann deine Version gefunden. Heute nach 5 Minuten war das Telefonbuch wieder up2date :D
Jetzt nur noch einen Cronjob und das wars.
 
Hallo SnoopyDog,
super Arbeit.
Beim ersten Versuch hat es gleich funktioniert!!
Nutze owncloud auf einer Synology.
 
FB 7490 6.05 geht der auto-upload nicht, ggfs. das mehrere FB User konfiguriert sind?

Quelle ownCloud 6.0.2 funktioniert

Zwei weitere Kleinigkeiten:

1. Problem in vCard.php(606): $TempTypeParams = self::parseParameters($Key, explode('=', $RawParams[$Index]));
mit Mac OSX angepassten Bildern (Komma durch Gleichheitszeichen ersetzt):
PHOTO;X-ABCROP-RECTANGLE=ABClipRect_1&144&1&256&256&/EzolKFopr7IIoM39Fnl9A=
=
;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAg
AAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAA

2. Für Anpassung NN, VN oder Firmenname sofern kein VN/NN angegeben wurde in carddav2fb.php(ab 103):

// name
$name_arr = $vcard_obj->n[0];

if ($name_arr['LastName'] != "" || $name_arr['FirstName'] != "") {
$name=$name_arr['LastName'];
if ($name_arr['FirstName'] != "") {
$name = $name . ", " . $name_arr['FirstName'];
}
}
else {
if ($vcard_obj->org) {
$org_arr = $vcard_obj->org[0];
$name = $org_arr['Name'];
}
else
$name="";
}
 
Hallo zusammen

Die Funktion, welche das Skript bietet, ist genau das, weshalb ich mir eine Fritzbox zugelegt habe. Jetzt bekomme ich das Skript aber nicht zum laufen.

Konfiguration:
- DAViCal 1.1.1 Cal- und CardDAV-Server auf einem Qnap NAS TS-219P+ (http://wiki.makeitfit.ch/DAViCal_(Qnap_Linux)
- Fritz!box 7490 mit Fritz-OS 6.04
- carddav2fb auf dem Qnap-NAS entpackt und konfiguriert mit Server-Adresse, User, Passwort, Adressbuch-Name etc.

Wenn ich das Sktipt mit folgendem Befehl starte
/mnt/ext/opt/apache/bin/php -f /usr/share/davical/carddav2fb/carddav2fb.php /usr/share/davical/carddav2fb/config.php

bekommen ich folgende Fehlermeldungen ausgespuckt:
Get all entries from CardDAV server(s)...
Warning: SimpleXMLElement::__construct(): Entity: line 2: parser warning : xmlns: DAV: not a valid URI in /share/MD0_DATA/.qpkg/davical/carddav2fb/lib/CardDAV-PHP/carddav.php on line 478

Warning: SimpleXMLElement::__construct(): <multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav"> in /share/MD0_DATA/.qpkg/davical/carddav2fb/lib/CardDAV-PHP/carddav.php on line 478

Warning: SimpleXMLElement::__construct(): ^ in /share/MD0_DATA/.qpkg/davical/carddav2fb/lib/CardDAV-PHP/carddav.php on line 478
Done.
Transform to FritzBox XML File...
Fatal error: Uncaught exception 'Exception' with message 'No entries available! Call get_carddav_entries or set $this->entries manually!' in /share/MD0_DATA/.qpkg/davical/carddav2fb/carddav2fb.php:188
Stack trace:
#0 /share/MD0_DATA/.qpkg/davical/carddav2fb/carddav2fb.php(55): CardDAV2FB->build_fb_xml()
#1 {main}
thrown in /share/MD0_DATA/.qpkg/davical/carddav2fb/carddav2fb.php on line 188

Deshalb habe ich folgende Fragen:
- wo muss das Skript carddav2fb installiert werden? auf der Fritzbox oder auf einem anderen Computer?
- muss die Fritzbox API http://www.ip-phone-forum.de/showthread.php?t=196309 auch installiert werden oder nur carddav2fb? Wenn ja, wo muss dieses installiert werden?
- muss auf der Fritzbox sonst etwas noch installiert werden?

Gruss
Philipp
 
Zuletzt bearbeitet:
Kontaktbilder werden nur auf einem MT-F angezeigt u. Einträge nicht passend

Hallo liebe Nutzer,

das Skript funktioniert bei mir bisher sehr gut. Bisher aufgefallen ist mir, nach dem Abgleich der Einträge und hochladen in das Telefonbuch (eigenes erstellt), werden die zugehörigen Kontaktbilder nur auf einem meiner zwei MT-F angezeigt. Bei dem anderen kommt immer nur die Statusmeldung, dass diese noch nicht zur Verfügung stehen (oder so ähnlich).

Habe ich hier einen Gedankenfehler? Oder muss ich noch etwas einstellen?

Desweiteren habe ich das Problem, dass z.B. Faxnummern im Fritz!Box Telefonbuch als "Privat" angezeigt werden, obwohl diese in owncloud (6.02) als Faxnummer gekennzeichnet sind. Muss ich hier auch noch etwas anpassen was mir bisher entgangen ist?

Vielen Dank schon einmal im Voraus fur die Hilfestellungen.
 
Hallo!

Super Arbeit, vielen Dank!

Ich hatte ein kleines Problem beim ersten Versuch, das mich einiges an Zeit gekostet hat - vielleicht hilft dies dem ein oder anderen der ein ähnliches Probelm hat:

Setup: Owncloud auf Raspbian, Skript ebenfalls auf Raspbian, FritzBox 7270

Ich habe folgende Fehlermeldung erhalten:
Code:
Get all entries from CardDAV server(s)... PHP Fatal error:  Uncaught exception 'Exception' with message 'Woops, something's gone wrong! The CardDAV server returned the http status code 404.' in /home/pi/carddav2fb/lib/CardDAV-PHP/carddav.php:309
Stack trace:
#0 /home/pi/carddav2fb/lib/CardDAV-PHP/carddav.php(510): carddav_backend->get_vcard('C5CD17B5-66E0-0...')
#1 /home/pi/carddav2fb/lib/CardDAV-PHP/carddav.php(280): carddav_backend->simplify('<?xml version="...', true)
#2 /home/pi/carddav2fb/carddav2fb.php(86): carddav_backend->get()
#3 /home/pi/carddav2fb/carddav2fb.php(48): CardDAV2FB->get_carddav_entries()
#4 {main}
  thrown in /home/pi/carddav2fb/lib/CardDAV-PHP/carddav.php on line 309

LÖSUNG: Als ich mir dann irgendwann die Dateinamen der .vcf Files auf dem Server angeschaut habe, habe ich gesehen, dass es einige Dateien gibt, die zwei mal .vcf als Dateiendung haben (xxxxxxxx.vcf.vcf).

Nachdem ich diese entfernt habe hats funktioniert :)

Ein paar weitere Hinweise:
  • FritzBox Login muss entsprechend konfiguriert sein: System --> FRITZ!Box-Kennwort --> Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort
  • FritzBox User muss angelegt sein: System --> FRITZ!Box-Kennwort --> Tab "FRITZ!Box-Benutzer"
 
Zuletzt bearbeitet:
Ich bekomme leider nur das hier:

php -f carddav2fb.php
Get all entries from CardDAV server(s)... Done.
Transform to FritzBox XML File... PHP Fatal error: Uncaught exception 'Exception' with message 'No entries available! Call get_carddav_entries or set $this->entries manually!' in /var/www/carddav2fb/carddav2fb.php:188
Stack trace:
#0 /var/www/carddav2fb/carddav2fb.php(55): CardDAV2FB->build_fb_xml()
#1 {main}
thrown in /var/www/carddav2fb/carddav2fb.php on line 188

Wie kann ich denn den Fehler wegbekommen? Er scheint aber das Telefonbuch von meiner ownCloud auslesen zu können, da bei falscher Pfadangebe oder der Angabe "http://IP-DES-SERVERS/owncloud/remote.php/carddav/addressbooks/Nutzername/default" mekert, es geht aber ohne den Zusatz "default", nur dann kommt eben oben genannte Fehlermeldung :(
 
Ok, das geht jetzt soweit, Problem ist aber, dass er jetzt immer eine Fehlermeldung a la
Get all entries from CardDAV server(s)... PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 130968 bytes) in /var/www/carddav2fb/lib/vCard-parser/vCard.php on line 606
bringt.

Erhöhe ich in der php.ini das Memorylimit, erhöht sich bei der Fehlermeldung nur die Bytezahl. Nehme ich das Memorylimit mit dem Wert "-1" heraus, hängt mein Server total und kommt nicht zum Ende.

Server ist ein Intel(R) Atom(TM) CPU D2701 @ 2.13GHz, 4 cores mit 3 GB RAM und Ubuntu 13.10 drauf, das sollte ja für rund 80 Kontakte reichen ;)
 
Kenne ich auch - ggfs. Post #7 Punkt 1 mit den OSX Bilddaten?
 
Immer noch keine Kontaktbilder auf den MT-F's

Hallo liebe Nutzer,

das Skript funktioniert bei mir bisher sehr gut.

Ich habe leider immer noch das Problem, dass die Kontaktbilder nicht auf meinen beiden MT-F angezeigt werden. Ich habe einmal die Bildverknüpfung in der Fritz!Box geprüft. Hier werden die Bilder unter den Kontakten angezeigt.

Ich habe das hochgeladene Telefonbuch aus owncloud einmal angeschaut. Der Pfad scheint korrekt zu sein?:

Code:
 <realName>Telefonbucheintrag_Name</realName> 
  <imageURL>file:///var/media/ftp/MEINE-USB-FESTPLATTE/FRITZ/fonpix/Telefonbucheintrag_Name.jpg</imageURL> 
  </person>
- <telephony nid="1">

Könnt Ihr mir hier weiterhelfen, bzw. einen Denkanstoss geben?

Vielen Dank schon einmal.
 
Zuletzt bearbeitet:
Lege mal einen Eintrag mit Bild manuell 'wie vorgesehen' an. Der sollte auf dem MTF angezeigt werden. Dann vergleichst du Bild und Pfade mit den anderen und solltest einen Unterschied sehen...
 
So, habe einmal einen Eintrag manuell in der Fritz!Box im entsprechenden (owncloud) Telefonbuch angelegt. Auch hier wird das Bild nicht angezeigt auf den MT-F. Hinzu kommt, dass das Foto im internen Speicher abgelegt wird (siehe nachfolgend):
Code:
<realName>Telefonbucheintrag</realName><imageURL>file:///var/InternerSpeicher/FRITZ/fonpix/1397295689-0.jpg</imageURL></person><telephony
nid="1">
Stehe hier irgendwie völlig auf dem Schlauch. Bin ich zu blöd?
 
Bei mir gingen einige Sachen wie VIP nur im 'originalen ersten' Telefonbuch. Geht das Bild vielleicht dort oder in einem anderen neuen Telefonbuch mit nur dem einen manuellen Eintrag? (Habe leider selber kein MTF zum Testen...)
 
Hallo TLU,
ich habe dies mit dem "ersten" Telefonbuch getestet. Leider werden nur sporadisch Bilder übertragen. Nicht alle. Gleiches gilt bei Anlage eines neuen Telefonbuches.
Komme einfach nicht hinter die Logik. So viele Bilder sind es auch nicht.
 
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.