carddav2fb - angepaßte Version

Ratlos, alles mögliche schon probiert...

Hallo,
bekomme das Skript nicht zum laufen:
habe eine Synology DS214+ (ohne Owncloud) mit DSM-Version "5.1-5021 Update 2" und eine Fritzbox 7390 mit Fritz!OS 06.03 im gleichen LAN.
Nun möchte ich die Kontakte des Synology internen CardDav Servers (https-Port 8010) mit meiner Fritzbox mittels carddav2fb synchronisieren.

Wie beschrieben habe ich die Benutzeranmeldung in der Fritzbox aktiviert, habe den Synology Webserver (php fähig) aktiviert und dort hinein das php-Skript gelegt und konfiguriert. Nun passiert beim Ausführen über den Synology-Aufgabenplaner gar nichts: sehe auch in den Log Dateien der Fritzbox keine Anmeldungsversuche des Skripts. (Auch schon Apple iCloud CardDAV ausprobiert, php open_basedir angepasst)

Benötigt das Skript keine Portangaben für CardDAV oder wird vom Skript nur der Standard 443 (https) verwendet? Braucht die Fritzbox SSH oder Telnet eingeschaltet?
Ich wäre um Eure Hilfe sehr dankbar, braucht Ihr noch weitere Infos um mir zu helfen, das ist meine erste Anfrage ;) ?
 
Zuletzt bearbeitet:
Außer eines Fritzbox-Benutzers, der, wie ich vermute, "alle Einstellungen der FRITZ!Box sehen und bearbeiten" darf, musst Du in der Fritzbox nichts einrichten.
CardDav wird doch durch eine Webanwendung verwaltet, demnach sind es natürlich die üblichen Ports für http/https. Aber wenn die Ports bei dir nicht die üblichen sind, muss man den Port natürlich in der CardDav-URL angeben. Die URL die das Script benötigt um aus CardDav zu lesen hängt natürlich ausschließlich vom CardDav-Server ab. In Owncloud sehen die CardDav-URLs z.B so aus:

h t t p s://[SERVERNAME][:pORTNUMMER]/remote.php/carddav/addressbooks/[USERNAME]/[ADRESSBUCHNAME]

Wie sieht denn eine CardDav-URL von Synology aus? Wäre ganz nützlich, um Dir helfen zu können.
 
Zuletzt bearbeitet:
danke, genau ich habe den Port angepasst:
meine Synology ist im LAN als diskstation (DNS) und unter ihrer IP-Adresse erreichbar.
Http-->Port 8009; https--> Port 2010 (das lässt sich im Menü einstellen, auf meinem iPhone läuft es)

Somit sieht momentan meine Config-Datei folgendermaßen aus:

<?php

// CONFIG
$config['fritzbox_ip'] = '192.168.188.2';
$config['fritzbox_user'] = 'Benutzer';
$config['fritzbox_pw'] = 'Passwort';
$config['phonebook_number'] = '1';
$config['phonebook_name'] = 'Sync-Book';
//$config['output_file'] = '/media/usbdisk/share/phonebook.xml';
//$config['group_filter'] = array('Arzt','Familie','Freunde','Friseur','Geschäftlich','Hotline','Notruf','Restaurant','Shops');
$config['group_vip'] = 'VIP';
//$config['usb_disk'] = 'USBDISK2-0-01';

// multiple carddav adressbooks could be specified and will be merged together.

// first
$config['carddav'][0] = array(
'url' => 'https://192.168.188.26:8010',
//die URL ist die Synology selbst, aber das sollte ja egal sein...
'user' => 'Benutzer',
'pw' => 'Passwort'
);

Vielleicht liegt es eher am php, also an meinen Synology-Einstellungen?
 
Anpassung config.php für Synology CardDAV Server?!

Hallo onki1,

versuche einmal folgendes in der config.php einzutragen:

Code:
// CONFIG
$config['fritzbox_ip'] = '192.168.188.2';
$config['fritzbox_user'] = 'Benutzer';
$config['fritzbox_pw'] = 'Passwort';
$config['phonebook_number'] = '1';
$config['phonebook_name'] = 'Sync-Book';
//$config['output_file'] = '/media/usbdisk/share/phonebook.xml';
//$config['group_filter'] = array('Arzt','Familie','Freunde','Friseur','Geschà ¤ftlich','Hotline','Notruf','Restaurant','Shops');
$config['group_vip'] = 'VIP';
//$config['usb_disk'] = 'USBDISK2-0-01';

// multiple carddav adressbooks could be specified and will be merged together.

// first
$config['carddav'][0] = array(
'url' => 'https://192.168.188.26:8010/addressbooks/users/<BENUTZERNAME>/addressbook/',
//die URL ist der komplette Pfad zum CardDAV Server der Synology...
'user' => 'Benutzer',
'pw' => 'Passwort'
);

Dies ist der wichtige Part:

'url' => 'https://192.168.188.26:8010/addressbooks/users/<BENUTZERNAME>/addressbook/',

Die Informationen sind aus folgendem Blog Artikel: http://www.blogtogo.de/synology-diskstation-eigenen-carddav-server-einrichten/

Ob das klappt, kann ich nicht sagen. Nutze selber Zarafa als Groupware (vorher owncloud). Eine gute und funktionierende Alternative wäre noch Baikal-Server: http://baikal-server.com/

Habe ich auch schon benutzt.
 
danke, genau ich habe den Port angepasst:
meine Synology ist im LAN als diskstation (DNS) und unter ihrer IP-Adresse erreichbar.
Http-->Port 8009; https--> Port 2010 (das lässt sich im Menü einstellen, auf meinem iPhone läuft es)

Was läuft auf dem Iphone? Es sycronisiert mit deinem Synology unter Angabe der IP ohne einen Pfad?

Wenn ja, dann kann ich mir nur vorstellen, dass du bei der Einrichtung vorher auch auswählen musstest aus welchem CardDav-Serversystem die Daten kommen und dass die App die URL anpasst, damit die Konfiguration besonders einfach ist. Dieses Script braucht natürlich trotzdem die komplette url, denn es kennt nicht die verschiedenen Systeme und wie es die url dafür anpassen muss. Ich dachte mir gleich, dass das Problem die URL ist und laut dem was Olaf rausgefunden hat, bestätigt sich meine Vermutung.

Gruß Sash
 
Also das hat leider spontan nichts bewirkt, aber es ist vielleicht trotzdem sehr hilfreich, da es auch an zwei Problemen gleichzeitig hängen kann. Hat jemand von Euch schon Erfahrungen mit Synology Webserver php Skripten?
 
Zuletzt bearbeitet:
Vor ein paar Tagen habe ich meinen Ubuntu Server von Version 12.04 auf 14.04 angehoben. Seit dem funktioniert das carddav2fb.php sync script nicht mehr.
Nach dem Aufruf von "php5 carddav2fb.php" kommt immer folgende Ausgabe:
Code:
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 /home/jarod/bin/carddav2fb/carddav2fb.php:188
Stack trace:
#0 /home/jarod/bin/carddav2fb/carddav2fb.php(55): CardDAV2FB->build_fb_xml()
#1 {main}
  thrown in /home/jarod/bin/carddav2fb/carddav2fb.php on line 188

Im Apache Log sehe ich zwei Anfragen.
Code:
192.168.3.42 - - [18/Jan/2015:09:38:16 +0100] "PROPFIND /davical/caldav.php/jarod/addresses/ HTTP/1.1" 401 283 "-" "CardDAV PHP/0.6"
192.168.3.42 - jarod [18/Jan/2015:09:38:16 +0100] "PROPFIND /davical/caldav.php/jarod/addresses/ HTTP/1.1" 207 1567 "-" "CardDAV PHP/0.6

Alle anderen Frontends (Android Handy, Thunderbird) können weiter problemlos auf das Adressbuch zugreifen.

Hat jemand eine Idee wo das Problem liegen kann?

Vielen Dank im Voraus.
 
Also das hat leider spontan nichts bewirkt, aber es ist vielleicht trotzdem sehr hilfreich, da es auch an zwei Problemen gleichzeitig hängen kann. Hat jemand von Euch schon Erfahrungen mit Synology Webserver php Skripten?

Der Aufgabenplaner im DSM hat seine Eigenheiten. Ich habe es wie folgt gelöst:

Im Aufgabenplaner als Benutzer "root" und als Befehl "sh /usr/local/carddav2fb/carddav2fb.sh" angeben.

Im Verzeichnis "/usr/local/carddav2fb/" eine Datei "carddav2fb.sh" mit folgendem Inhalt anlegen:
Code:
#! /bin/sh
cd /usr/local/carddav2fb

php carddav2fb.php

Die Datei "carddav2fb.sh" mit "chmod +x carddav2fb.sh" ausführbar machen und darauf achten, dass der Eigentümer "root" ist.

Dann zunächst von der Konsole aus testen ob das Skript läuft ("sh /usr/local/carddav2fb/carddav2fb.sh").

Viel Erfolg.
 
Also irgendwie funktioniert das Script nicht (FB 7390)

Quelle Adressbuch ist Owncloud 7.0.4
Habe FB Benutzer angelegt.
Zugriff aus WWW aktiviert.
Neues, zusätzliches Telefonbuch "test" angelegt

Aufgefallen ist mir, das beim Sricpt die Ordner CardDAV-PHP, fritzbox_api_php, vCard-parser leer sind. Muss da was rein?

Zum Schluß das ganze auf meinen Webspace und aufgerufen: http://server.de/carddav2fb-master/carddav2fb.php

/ CONFIG
$config['fritzbox_ip'] = 'https://xxx.xxx.xxx.xxx';
$config['fritzbox_ip_ftp'] = 'https://xxx.xxx.xxx.xxx';
$config['fritzbox_user'] = 'huhu';
$config['fritzbox_pw'] = 'pw';
$config['phonebook_number'] = '1';
$config['phonebook_name'] = 'test';
//$config['output_file'] = '/media/usbdisk/share/phonebook.xml';
//$config['group_filter'] = array('Arzt','Familie','Freunde','Friseur','Geschäftlich','Hotline','Notruf','Restaurant','Shops');
$config['group_vip'] = 'VIP';
//$config['usb_disk'] = 'Generic-FlashDisk-01';

// multiple carddav adressbooks could be specified and will be merged together.

// first
$config['carddav'][0] = array(
'url' => 'https://server.de/addressbooks/users/huhu/kontakte/',
'user' => 'huhu',
'pw' => 'pw'
);

// second
//$config['carddav'][1] = array(
// 'url' => 'https://raspserver/owncloud/remote.php/carddav/addressbooks/fritzbox/fb_contacts_second',
// 'user' => 'oc_username',
// 'pw' => 'oc_password'
//);
 
Zuletzt bearbeitet:
Also irgendwie funktioniert das Script nicht (FB 7390)

Falsch formuliert. Das Script funktioniert bei etlichen hervorragend. Du bist nur zu dusselig es anzuwenden oder deinen Server entsprechend anzupassen wäre eine richtige Formulierung.

Aufgefallen ist mir, das beim Sricpt die Ordner CardDAV-PHP, fritzbox_api_php, vCard-parser leer sind. Muss da was rein?

Die Ordner sollen selbstverständlich nicht leer sein. Im Zweifelsfalle nimmt man sich doch nochmal das Archiv vor, guckt was alles drin ist und entpackt es nochmals anständig.

Zum Schluß das ganze auf meinen Webspace und aufgerufen: http://server.de/carddav2fb-master/carddav2fb.php

Wenn man aufmerksam liest, stellt man zweifellos fest, dass dies keine Browseranwendung ist, sondern ein Konsolenprogramm!!! Es kann durchaus sein, dass es zu Fehlern kommt, wenn man es statt in der Konsole im Browser ausführt.

Ein bisschen Grundwissen sollte man schon haben, wenn man Aufgaben eines Systemadministrators wie z.B Konsolenprogramme im Betastadium nutzen möchte. Ansonsten muss man jemanden finden, der einen in dem benötigten Grundwissen unterrichtet oder den man dafür bezahlt, dass er den Job macht.


Übrigens bei mir war es erforderlich curl zu installieren. Unter debian-basiertem Linux geht das mit:
Code:
sudo apt-get install php5-curl
 
Zuletzt bearbeitet:
Tine 2.0 und FritzBox 7490

Hallo zusammen,

habe das Script gerade erfolgreich mit dem CardDAV Server von Tine 2.0 und der FritzBox 7490 (FW 06.23) eingerichtet.
Super! An dieser Stelle noch einmal besten Dank an den Entwickler.

Zusätzlich habe ich noch beim Paser in der carddav2fb.php in der Zeile 107:

$name = $this->_concat($name_arr['Prefixes'],$this->_concat($this->_concat($name_arr['FirstName'],$name_arr['AdditionalNames']),$name_arr['LastName']));

FirstName und LastName gegeneinander ausgetauscht. Dann werden auch die Einträge in der FB nach Nachname Vorname angezeigt. Negative Einflüsse durch den Tausch habe ich bisher nicht feststellen können.
Dann noch ein cronJob und alles funktioniert wie lange gesucht.

Vielen Dank und Gruß
 
Hallo zusammen,

da ich schon seit längerer Zeit einen solche Möglichkeit suche, bin ich jetzt auf dieses Forum gestoßen.

Mein Problem, ich kenne Github nicht und weiß jetzt nicht wo ich alle aktuellen Dateien herbekomme.
Beim letzten Link fehlen alle LIB-Dateien, so dass ich jetzt nicht machen kann.
Wo und Wie kann ich alle Dateien runterladen. Könnt Ihr mir da helfen?
 
@MiLie:

Vll. hilft Dir ja einer: Leider sind user wie UnixExplorer nicht produktiv. Siehe meine Mail oben. Ich hatte die gleichen Probleme wie Du, aber UnixExplorer ist halt ein ganz kluger...
 
Hallo,

ein Link für die anderen PHP-Dateien würde mir helfen.
 
hat keiner einen Link für mich?
 
Hallo zusammen,

nachdem das Script bei mir lange Zeit ohne Probleme seinen Dienst getan hat, habe ich vor kurzem festgestellt, dass der Cronjob nicht mehr durchläuft. Nach dem manuellen Abstoßen des Scripts zeigt sich dann auch das Problem, dass der RasPi beim Abrufen der Kontakte aus dem CardDav mit CPU und RAM Auslastung irgendwann an die 100%-Marke kommt und sich dann verabschiedet. Ich habe mittlerweile an die 700 Kontakte in meiner OwnCloud, die ich einmal täglich mit der FritzBox synchronisiere. Wenn ich testweise ein anderes Adressbuch mit zwei Test-Kontakten verwende läuft alles ohne Probleme durch.

Hat jemand schon ähnliche Probleme gehabt bzw. eine Idee wie ich das in den Griff bekommen kann?

Viele Grüße
BeetleZuma
 
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

Hallo Philipp,

ich bin seit der Umstellung auf Ubuntu 14.04 mit Davical auf das gleiche Problem gestoßen(siehe oben). Heute hab ich mir mal Zeit genommen für das Problem. Nach einigem Suchen, bin ich auf diese Seite gestoßen:
http://wiki.davical.org/index.php/PROPFIND

Danach war es ein bisschen Suchen im Code und dann hat Folgendes geholfen:
Code:
diff -Nrubw 123/lib/CardDAV-PHP/carddav.php lib/CardDAV-PHP/carddav.php
--- 123/lib/CardDAV-PHP/carddav.php     2014-02-10 19:42:50.000000000 +0100
+++ lib/CardDAV-PHP/carddav.php 2015-03-19 09:47:28.317997946 +0100
@@ -617,7 +617,7 @@
                }
                else
                {
-                       curl_setopt($this->curl, CURLOPT_HTTPHEADER, array());
+                       curl_setopt($this->curl, CURLOPT_HTTPHEADER, array('Depth: 1'));
                }

                $complete_response      = curl_exec($this->curl);

Ich hoffe der Patch tut es auch bei Dir.

Viel Erfolg
Jarod
 
Zuletzt bearbeitet:
Hallo,

ich habe mich jetzt auch daran probiert, bei nmir funktioniert leider nichts.

erst kam lediglich
Get all entries from CardDAV server(s)...
mehr nicht, so blieb es, keine Fehler nichts.
beim erneuten starten kam Serverfehler 500 und das wars.

Ich habe das auf meinen Webspace, auch dort die owncloud.
 
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.