Carddav2fb mit Synology?

pmsh

Neuer User
Mitglied seit
4 Mrz 2020
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

ich nutze Ubuntu, 20.04.1 LTS und ein Synology-NAS DS220j, DSM 6.2.3-25426 Update 3 mit Carddav-Server aus dem Synology Repo. Carddav2FB wurde neu installiert. In config.php 'method' => 'PROPFIND' aktiviert. Beim Ausführen von "./carddav2fb run" erhalte ich folgende FM:

"HP Warning: SimpleXMLElement::__construct(): Entity: line 2: parser error : StartTag: invalid element name in /carddav2fb/src/CardDav/Backend.php on line 185
PHP Warning: SimpleXMLElement::__construct(): <'> in /carddav2fb/src/CardDav/Backend.php on line 185
PHP Warning: SimpleXMLElement::__construct(): ^ in /carddav2fb/src/CardDav/Backend.php on line 185
PHP Warning: SimpleXMLElement::__construct(): Entity: line 2: parser error : Extra content at the end of the document in /carddav2fb/src/CardDav/Backend.php on line 185
PHP Warning: SimpleXMLElement::__construct(): <'> in /carddav2fb/src/CardDav/Backend.php on line 185
PHP Warning: SimpleXMLElement::__construct(): ^ in /carddav2fb/src/CardDav/Backend.php on line 185

In Backend.php line 185:
String could not be parsed as XML"

Auf Anraten von Black Senator (Github) habe ich in der Backend.php in Zeile 182 folgendes eingefügt: "file_put_contents('body_dump.txt', $response->getBody());". Nach erneutem Ausführen von "./carddav2fb run" wird eine body_dump.txt im Carddav2fb-Verzeichnis angelegt. Auszug aus body_dump.txt:

Code:
<?xml version='1.0' encoding='UTF-8'?>
<multistatus xmlns='DAV:'>
  <response>
    <href>/addressbooks/users/xxxxxxx/addressbook/</href>
    <propstat>
      <prop>
        <getetag>"0d0a208729ea83f9b2d314876979319c"</getetag>
      </prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
    <propstat>
      <prop>
         <address-data xmlns='urn:ietf:params:xml:ns:carddav'/>
      </prop>
      <status>HTTP/1.1 404 Not Found</status>
    </propstat>
  </response>

Hat jemand carddav2fb mit einer Synology zum Laufen gebracht? Mit welchen Einstellungen?

lG Martin
 
@pmsh

Könntest Du auf deiner Synologie eine Test-User mit anlegen, auf den von außen zugegriffen werden darf? Mit ein paar Testdaten in den Kontakten versehen?

Grüße

Black Senator
 
Wieso verwendest alten Carddav? Probiere mal lieber Contacts aus, kann jeder Nutzer selbst über DSM Kontakte ändern, und nicht nur der Admin.
 
Ich habe auf der Synology das Paket "Synology Contacs" installiert und den CardDav Server deinstalliert. Und siehe da: carddav2fb hat im ersten Anlauf die Kontakte auf das C5-Fon geschoben. Das Paket "Synology Contacs" steht nicht für alle Synos (vermutlich nicht die älteren) zur Verfügung. Warum es genau mit dem bisherigen CardDav Server nicht funktioniert, kann ich nicht sagen.

Die Synchronisation der Kontaktbilder von der Synology über DAVx5 auf mein Android-Smartphone funktioniert.

Was jetzt noch nicht funktioniert, ist das Übernehmen der Kontaktbilder auf das C5-Fon. Ich verwende eine Fritzbox 7490 mit USB-Stick.
Mit ./carddav2fb run -i erhalte ich folgende FM:

Detaching and uploading image(s)

0/14 [>---------------------------] 0%PHP Warning: ftp_chdir(): file:///var/InternerSpeicher/SanDisk-CruzerBlade-01/FRITZ/fonpics/: Permission denied. in /home/Martin/Programme/carddav2fb/src/functions.php on line 86

In functions.php line 88:

Could not change to dir file:///var/InternerSpeicher/SanDisk-CruzerBlade-01/FRITZ/fonpics/ on ftp server f
ritz.box for upload

Über Filezilla habe ich die Berechtigungen geprüft; liegen alle bei 777. Der Fritzbox-Benutzer hat ftp-Rechte. Wo ist mein Denkfehler?
 
Altes Carddav und Caldav sind nicht gut, anderer Port, brauchst noch WebDAV Server Paket, nur vom Admin zu verwalten usw.

Würde entsprechend Carddav und WebDAV rauswerfen.

Ich nutze es nicht auf der FB, nutze ganze nur um es zwischen PC mit Outlook und iPhone sowie Mac zu synchronisieren für Kontakte und Kalender.

Musst noch bei Kontakte die DSM Benutzer ausblenden, sonst hast noch DSM Benutzer mit zwischen den Kontakten.
 
@pmsh

ich war länger nicht hier und hatte auch keine Benachrichtigung über deinen Beitrag(Frage) erhalten.

Die Benutzerrechte zu checken ist schon mal richtig.
Als nächstes check doch bitte ´mal die Pfadangabe: dazu via GUI im Telefonbuch der FRITZ!Box einem Kontakt ein beliebiges Photo zuweisen, speichern und dann das Telefonbuch lokal als XML sichern. Per Editor öffnen und in dem betreffenden Kontakt das Tag <imageURL> suchen. Die Padangaben mit denen in der config.php vergleichen. Dabei die "/" beachten!

Beispiel:
Mein USB-Stick heißt: "FRITZSTICK"
Im Telefonbuch findet sich folgender Pfad:
file:///var/InternerSpeicher/FRITZSTICK/FRITZ/fonpix/[FILENAME].jpg

In meiner config.php steht daher:
PHP:
'fritzbox' => [
    ...
    'fonpix'   => '/FRITZSTICK/FRITZ/fonpix',      // the storage for uploading images
    ...
    ],

'phonebook' => [
    ...
    'imagepath'    => 'file:///var/InternerSpeicher/FRITZSTICK/FRITZ/fonpix/',
    ...
    ],

Ich selbst benutze keine Images auf dem FRITZ!Fon, habe es aber gerade mit den Einstellungen getestet und es funktioniert.

Grüße

Black Senator



P.S. Vermutlich kann man die historisch gewachsene doppelte Angabe in der Konfiguration in 'fonpix' und 'imagepath' optimierend ersetzen. Ist aber älteres Coding und solange keine massiven Beschwerden kommen gilt: "never touch a running system!"
 
Zuletzt bearbeitet:
Hallo zusammen,
  • auf der Synology habe ich WebDav durch Synology Contacts ersetzt.
  • Alle Kontaktbilder habe ich entfernt
  • In der config.php referenziere ich auf den internen Speicher:
'imagepath' => 'file:///var/InternerSpeicher/FRITZ/fonpix/' und
'fonpix' => '/FRITZ/fonpix/',

Die o.g. Fehlermeldung erhalte ich nicht mehr.

Füge ich ein Kontaktbild hinzu (96 x 96, jpg), wird es nicht synchronisiert und auch nicht im fonpix - Verzeichnis gespeichert.
Die Synchronisation des Kontakbildes funktioniert jedoch von der Synology zu Evolution und von der Synology über Davx5 zum Android-Smartphone.
Wenn ich über die GUI im Telefonbuch der FRITZ!Box einem Kontakt ein Foto zuweise, wird es im Verzeichnis file:///var/InternerSpeicher/FRITZ/fonpix/ gespeichert.
Setze ich in der config.php den imagepfad auf den USB-Stick, erhalte ich erneut die o.g. FM.
Mir würde es ausreichen, wenn ich die Synchronisierung auf den internen Speicher hinbekomme, sind ja nicht sooo viele Kontaktbilder.

Hat jemand eine Idee, was ich noch testen kann?

lG Martin
 
@pmsh
  1. bitte entferne den Slash am Ende in der Pfadangabe für fonpix (siehe mein Beispiel)
  2. In meiner 7590 kann ich auch nicht in den internen Speicher schreiben. Bei mir ist es jedoch so, dass ein USB-Stick angesteckt ist. Ob das Einfluss darauf hat weiß ich nicht und habe ich noch nicht getestet!
    Was aber erkennbar ist, dass das interne fonpix-Verzeichnis keine umfänglichen Schreibrechte hat. Obwohl ich dem Verzeichnis mit WinSCP die fehlenden Schreibrechte zugewiesen habe bleibt es dabei: trotzdem kann ich nicht in dieses Verzeichnis schreiben. Aber der FTP-Zugriff in das fonpix-Verzeichnis auf dem USB-Stick funktioniert einwandfrei.
Also meine Empfehlung:
PHP:
'fritzbox' => [
    ...
    'fonpix'   => '/SanDisk-CruzerBlade-01/FRITZ/fonpix',      // the storage for uploading images
    ...
    ],

'phonebook' => [
    ...
    'imagepath'    => 'file:///var/InternerSpeicher/SanDisk-CruzerBlade-01/FRITZ/fonpix/',
    ...
    ],

Grüße

Black Senator
 
@Black Senator
Die Fehlermeldung bei Nutzung des USB-Sticks habe ich wegbekommen. Lag an den Rechten. Über Filezilla konnte ich das ändern. Mein Fehler. Sorry.
Den Slash am Ende in der Pfadangabe habe ich entfernt. Das Kontaktbild wird nach wie vor nicht auf das Fritz.Fon kopiert.
Kann es sein, dass es ein Problem mit dem Format der vcf-Datei gibt und das Kontaktbild nicht extrahiert werden kann? Kann ich das irgendwie testen?
 
Das Kontaktbild wird nach wie vor nicht auf das Fritz.Fon kopiert.
Vielleicht habe ich es ja bisher überlesen... ? Kommt nicht im FRITZ!Fon an oder wird nicht in ../fonpix gespeichert?.

Die Fehlermeldung bei Nutzung des USB-Sticks habe ich wegbekommen
Wie ist den nun die aktuelle Konfiguration? So ist es beliebig schwierig zu raten, unter welchen Randbedingungen, du denn nun aktuell rumprobierst.

Kann ich das irgendwie testen?
Ja, in dem du folgendes Kommando aufrufst: php carddav2fb download -i youroutput.vcf oder php carddav2fb download -dfi youroutput.vcf (mehr Infos dazu hier).
Anschließend die Datei youroutput.vcf mit einem beliebigen Editor nach dem Attribut PHOTO durchsuchen: PHOTO;TYPE=JPEG;ENCODING=b:[base64-data]. Dort sollte ein ziemlich langer Block base64 Codierten Image Daten kommen. Wenn du noch weiter gehen willst, dann kannst du z.B. diesen Datenblock z.B. online decodieren und das Ergebnis (binäre Daten) in eine leere Datei kopieren und als *.jpg sichern. Dann sollte das JPEG aufrufbar sein. Dann weißt Du z.B. dass das Image vom CardDAV-Server korrekt gelesen wurde (egal, ob es dort verlinkt oder schon eingebettet war) und konsistent ist (wovon ich aber ausgehe, weil sonst das Programm schon Fehlermeldungen geschmissen hätte.

Es wäre hilfreich, wenn Du mir einmal deine config.php (ohne Server-Credentials) per PM zusenden könntest.

Grüße

Black Senator
 
Zuletzt bearbeitet:
@Black Senator
> Kommt nicht im FRITZ!Fon an oder wird nicht in ../fonpix gespeichert?.
weder noch

>php carddav2fb download -i youroutput.vcf
Den Substring "PHOTO;TYPE=JPEG;ENCODING=b:[base64-data]" finde ich dort nicht, sondern so etwas: "PHOTO;ENCODING=b;TYPE=X-EVOLUTION-UNKNOWN:" Danach kommt dann der Block mit den binären Daten.

In Evolution (3.36.4) und auf der Synology -> Synology Contacts (1.0.0 - 0243) finde ich keine Optionen zur Änderung der Bildkodierung.

Die config.php und einen Auszug aus dem vcf-export sende ich Dir per PM.

lG Martin
 
Hallo Martin,

so kommen wir doch der Sache näher :).
Ich schaue mir gleich deine PM an. Ich lese auch gleich noch einmal die RFC nach, ob sich da etwas geändert hat. Aber auf den ersten Blick würde ich sagen, dass das, was SynologyEvolution hier liefert, nicht RFC konform ist (nach meiner Interpretation der RFC)!

Wenn sich das bewahrheitet, dann wird andig ziemlich sicher nicht zu einer Code-Anpassung bereit sein - und ich entsprechend auch nicht. Es ergibt keinen Sinn Software zu verbiegen, damit die "Fehler" anderer Produkte ausgemerzt werden.

Was ich Dir aber anbieten kann, ist folgender Workaround:
du ziehst Dir einen Fork (entweder von andig oder von mir) und ich unterstütze dich bei der Code-Anpassung in deinem Fork, damit du die kruden Daten von Synologie zu fassen bekommst.
Bei allen Updates (so du die denn nutzen willst) musst du dann eben diese in deinen Fork mergen.

+++Update für Mitleser +++
Es ist weder ein Problem von carddav2fb noch von Synology, sondern vielmehr von Evolution. Evolution liefert im Attribute TYPE anstelle von JPEG den Wert X-EVOLUTION-UNKNOWN.
+++ +++

Grüße

Black Senator


P.S. bitte schließe den Issue #217! Der hat sich ja erledigt
 
Zuletzt bearbeitet:
  • Like
Reaktionen: pmsh

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,247
Beiträge
2,248,790
Mitglieder
373,831
Neuestes Mitglied
v4l3r10
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.