[Info] carddav2fb (neue Version) Image upload verfügbar!

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
418
Punkte für Reaktionen
69
Punkte
28
Ja, ist denn heut' schon Weihnachten?

Andreas und ich haben gestern meinen Entwicklungsbranch in seinen master gemergt.

Wenn ihr Euch das aktuelle Release zieht, sind folgende Fixes und Features enthalten:
  • command -i führt nun zu einem Upload von Kontaktbildern in die FRITZ!Box (s.u.)
  • die manchmal in Organisationsnamen endenden Semikolon werden eliminiert
Zumindest auf der Todo-liste steht noch Kurzwahl- und Vanity-Nummern zu integrieren. Dazu lege ich eine Umfrage an, ob das überhaupt genutzt wird und gewünscht ist.

So, und nun noch ein paar Worte zu den Voraussetzungen:

In der config.php (oder wie immer die bei Euch heißt) müssen zwei Sachen ergänzt werden:

1. Der Pfad für die Images welcher im Telefonbuch im entsprechenden Tag gespeichert wird.
Wenn Ihr nicht wisst wie der heißt, dann legt ein Bild im Telefonbuch manuell an, ladet das Telefonbuch herunter und sucht den Tag <imageURL><\imageURL>. Was dazwischen steht ist der richtige String.
Code:
$config = [
    // phonebook
    'phonebook' => [
        'id'        => 0,
        'name'      => 'Telefonbuch',
        'imagepath' => 'file:///var/InternerSpeicher/[YOURUSBSTICK]/FRITZ/fonpix/', // mandatory if you use the -i option
    ],
Für Besserwisser: der Kommentar "// only '0' can store images" ist übersehen worden. Ja, mit der neuen Fritz-OS kann man Bilder jetzt auch in anderen Telefonbüchern speichern.

2. Der Pfad für den physischen Speicherort der Bilder auf dem externen Speicher*:
Code:
    'fritzbox' => [
        'url' => 'http://fritz.box',
        'user' => '',
        'password' => '',
        'fonpix'   => '/[YOURUSBSTICK]/FRITZ/fonpix',   // the storage on your usb stick for uploading images
* ich habe eine 7490 und da geht es nur im externen Speicher. Bei mir ein USB-Stick. Ob das bei einer Box mit größerem speicher auch intern geht weiß ich nicht.

CAVE!
a) Command "-i" funktioniert nur (richtig) bei command "run"! Also nicht mit "download" -> "convert" -> "upload"
b) Images werden "stumpf" hochgeladen - also überschrieben. Es findet keine Prüfung statt, ob das Bild schon vorhanden war.
c) Werden Kontakte im CardDAV-Server gelöscht, deren Bild vorher hochgeladen wurde, dann verbleibt es natürlich als "Leiche" im /fonpix/ Ordner


Don´t have too much fun!


Nur für die Interessierten noch ein paar Infos zur Umsetzung:
Die vCards werden jetzt schon unmittelbar nach dem Download vom CardDAV-Server geparst. Wie bisher auch werden Raw-Data entsprechend encoded und in separaten Attributen gespeichert. Sind Images verlinkt (was wohl meistens der Fall ist), werden die Daten nun auch heruntergeladen und in die Raw-Data-Attribute geschrieben.
Nachdem die Kontakte gefiltert wurden (include/exclude) werden die Images per ftp in das /fonpix/ Verzeichnis geschoben.
Beim Konvertieren in das FRITZ!Box-Telefonbuchformat werden die Links zu 'fonpix' zu den Einträgen geschrieben.

Schöne Weihnachten

Black Senator
 
Zuletzt bearbeitet:
Moin,
hört sich gut an - werde ich mal am WE antesten ...
LG Christoph

Gesendet von meinem SM-G960F mit Tapatalk
 
Moin,

ich habe es einmal getestet - und Bilder kommen tatsächlich dort an, wo sie hin sollen ;-), ebenso alle VIP-Häkchen ;-)

Einzig eine Meldung macht mich etwas stutzig bzw. frage ich mich, ob das eine tiefere Bedeutung haben könnte:
Code:
Detaching and uploading image(s)
PHP Notice:  Undefined index: fonpix in /home/carddav2fb/carddav2fb.2.master/src/functions.php on line 65
[... wiederholt sich insges. 18 Mal...]
Uploaded 18 image file(s)
Converted 44 vCard(s)
Uploading
Successful uploaded new Fritz!Box phonebook

Achja, mir ist aufgefallen, ich bekomme die Fritzbox nur über die IP angesprochen, aber nicht über ihren Namen "fritz.box"?

Gruß, Christoph

PS: kann ich eigentlich auch per Parameter eine andere config-datei.php übergeben?
 
Zuletzt bearbeitet:
Moin,

leider funktioniert es noch nicht so ganz - die Bilder werden wohl extrahiert und hochgeladen, sie landen jedoch offenbar im root des FTP-Servers der FB - im Tel-Buch wird aber der Pfad eingetragen, der auch in der Config.php steht. Natürlich werden so die Bilder dann nicht gefunden ...

Gruß, Christoph
 
Hallo Christoph,

erst mal danke fürs Testen.

Ich bin jetzt etwas verwirrt. Du hast den Issue #66 in andigs repo geöffnet, geschlossen, wieder geöffnet und hier schreibst Du auch einmal es kommt an und dann wieder nicht. Was ist den nun der Stand?

Der Reihe nach:
a)
Undefined index: fonpix in /home/carddav2fb/carddav2fb.2.master/src/functions.php on line 65
bedeutet, dass der Eintag in der config.php nicht sauber ist. Zeile 65 ist exakt der ftp-Server der an dieser Stelle meckert.
Hier mal ein einbeispiel von mir (Auszug!);
Code:
<?php

$config = [

    'server' => [
        [
            'url'      => 'https://p27-contacts.icloud.com:443/xxxxxxxxxx/carddavhome/card',
            'user'     => '[email protected]',
            'password' => 'xxxx-xxxx-xxxx-xxxx',
            ],
        [
            'url'      => 'https://p13-contacts.icloud.com:443/xxxxxxxxxx/carddavhome/card',
            'user'     => '[email protected]',
            'password' => 'xxxx-xxxx-xxxx-xxxx',
            ],
        [
            'url'      => 'https://p68-contacts.icloud.com:443/xxxxxxxxxx/carddavhome/card',
            'user'     => '[email protected]',
            'password' => 'xxxx-xxxx-xxxx-xxxx',
            ],
    ],

    'fritzbox' => [
        'url'      => 'fritz.box',
        'user'     => 'tr_064user',            // e.g. dslf-config AVM standard user for usual login
        'password' => 'xxxxxxxxxxx',
        'fonpix'   => '/FRITZSTICK/FRITZ/fonpix',               // the storage for uploading images
    ],

    'phonebook' => [
        'id'           => 0,                   // only '0' can store quick dial and vanity numbers
        'name'         => 'Telefonbuch',
        'imagepath'    => 'file:///var/InternerSpeicher/FRITZSTICK/FRITZ/fonpix/',
    ],

    'filters' => [
Mein USB-Stick heißt "FRITZSTICK" - also wenn Du das auf deine Verhältnsse transferierst, dann wüßte ich nicht, warum es nicht gehrn sollte.

b)
kann ich eigentlich auch per Parameter eine andere config-datei.php übergeben?
Ja, z.B. mit
Code:
php carddav2fb.php run -c test.php -i
, wenn test.php deine andere config ist

Viel Erfolg

Black Senator
 
Zuletzt bearbeitet:
Moin,

es sah erst so aus, daß es ankommt, mit den im ersten Post beschriebenen Meldungen. Als ich dann jedoch in der FB geschaut habe (etwas später, da kein Bild auf dem Handteil ...), habe ich letztlich die Bilder im Root des Ftp-Servers gefunden, nicht im Verzeichnis, welches ich eingetragen hatte (dabei egal, ob interner Speicher oder übernommener Pfad auf den ext. Speicheraus dem alten Carddav1).

Ich hatte es im Github nur mit eingetragen, da ich nicht wusste, wo es eher gesehen wird. Der Close dort war ein Versehen ... es ist also noch das beschriebene Verhalten vorhanden...

Gruß, Christoph

Gesendet von meinem SM-G960F mit Tapatalk
 
Zuletzt bearbeitet:
Moin,

ich werde versuchen, ob ich es morgen vormittag schaffe ;-) ab nachmittags hat erstmal die Familie Vorrang ;-)

Sollte es nicht mehr klappen - an dieser stelle schon mal frohe Weihnachten

Gruß, Christolh

Gesendet von meinem SM-G960F mit Tapatalk
 
Moin,

die config.php habe ich Dir geschickt. Bild-01 ist die oben beschriebene Situation - Bilder im "root", in Bild02 sind jene Bilder, die ich per FB-UI hochgeladen habe.

Ich habe es mit Deinem Beitrag mit dem Fehler versucht - jedoch ohne wirkliche Besserung.

Übrigens ist im internen Speicher der Ordner fonpix immer vorhanden, anscheinend wird er aber in der Fritz!NAS-Oberfläche ausgeblendet, sobald ein externer Speicher angehängt ist.

Gruß, Christoph
 

Anhänge

  • ftp-fritzbox_pictures01.png
    ftp-fritzbox_pictures01.png
    24.9 KB · Aufrufe: 8
  • ftp-fritzbox_pictures02.png
    ftp-fritzbox_pictures02.png
    8.4 KB · Aufrufe: 9
Hallo,

wie schon z.T. in der Unterhaltung mitgeteilt:

1. der config-Eintrag ['fritzbox'] => ['fonpix'] fehlt. Schau dir meinen Auszug der config dazu an, bzw. die config.example.php.
Das führt zu dem Error, da die Varable beim aufruf der ftp-Adresse fehlt.
Das im Telefonbuch anscheinend doch ein Bild zugeordnet ist hat folgenden Grund:
a) zuerst werden die Images per ftp hochgeladen (physisch) im USB-Speicher abgelegt. Das wird gesteuert über die Variable ['fritzbox'] => ['fonpix']
b) erst danach werden die Kontaktdaten in das Telefonbuchformat konvertiert. Dbei werden die Pfadinfos aus ['telefonbuch'] => ['imagepath'] verwendet. Beim Aufruf des TB wird nur geschaut, ob der XML-Tag <imagePath> vorhanden ist und in der Übersicht dazu das Profilbild Icon angezeigt. Ob an dem angegeben Pfad ein Bild liegt, merkt man erst, wenn man das Bild im Kontakt aufrufen möchte.

2. das Fehlen von ['fritzbox'] => ['fonpix'] führt zu einem korrupten Pfad und die Bilder landen am falschen Ort (dein Bild 1) in der root

3. dein Bild 2 zeigt m.E., dass die Bilder die du über die GUI angelegt hast auch nicht im fonpix Verzeichnis auf dem Stick gelandet sind, sondern in fonpix im internen Speicher. Damit kommt das Telefonbuch auch nicht zurecht und hat nix mit carddav2fb zu tun.
fritz-nas.JPG

To Do:
1. Mach den Fritz!Box Speicher sauber und setze die die Indizes neu. Anleitung hier
2. Lege testweise ein Bild im TB manuell an und überprüfe, ob es anschließend editierbar ist.
3. Überprüfe ob es wirklich im fonpix Verzeichnis des USB-Stick ankommt bzw. wie die Pfadangabe im TB lautet.
4. Pflege die config.php sorgfältig - die Beispieleangaben mit abschließenden bzw. fehlenden "/" beachten

So jetzt warte ich aufs Christkind

Schöne Weihnachten

//edit by stoney: Bild geschrumpft sowie das [IMG] um den Bildlink entfernt [/IMG][/COLOR][/SIZE]
 
Zuletzt bearbeitet:
Moin und frohe Weihnachten,

ich habe die Config.php noch einmal angeschaut und analog zu Deinem Bsp editiert.
Bilder landen jetzt auch im eingetragenen Verzeichnis mit dem zugehörigen Namen (z.B. PHYSIOTHERAPIE_Melle_e7bce.jpg) - jedoch nicht nur, ich finde sie auch im Root mit einem cryptischen Namen (1f627b05-f422-419a-a016-92af32585e52.jpg für das o.g. Bild).

In den herunter geladenen Telefonbuch wird der zweite Name erwartet (1f627b05-f422-419a-a016-92af32585e52.jpg), aber der Pfad verweist auf das richtige fonpix-Verzeichnis, in welchem aber das Bild unter anderem Namen liegt (PHYSIOTHERAPIE_Melle_e7bce.jpg).

Ändere ich den Namen manuell im Verzeichnis ab, dann bekomme ich tatsächlich auch das Bild angezeigt.

Übrigens kommt der Fehler
Code:
PHP Notice:  Undefined index: fonpix in /home/carddav2fb/carddav2fb.2.master/src/functions.php on line 65
immer noch beim Übertragen.

Ich werde jetzt noch einmal carddav2fb neu von Grund auf installieren ...hat leider auch nur das bereits beschriebene Verhalten gebracht :(

Gruß, Christoph
 
Zuletzt bearbeitet:
Hallo Christoph,

der Image-Upload funktioniert nur über die UID des/der Kontakte(s) vom CardDAV-Server. D.h. die Images werden mit einem Namen wie "1f627b05-f422-419a-a016-92af32585e52.jpg" im fonpix Verzeichnis abgespeichert und im Telefonbuch entsprechend verlinkt.
Über die Web-GUI der Box legt AVM die Bilder mit dem UNIX-Timestamp ab: z.B. 1545761270-0.jpg.

Ein Bild mit dem Namen "PHYSIOTHERAPIE_Melle_e7bce.jpg" kann weder durch ImageUpload noch durch die Fritz!Box Software dorthin gelangt sein!

a) Schau einmal auf die Erstellungsdaten. Was Du beschreibst klingt nach Datenresten von den vorherigen Versuchen.
b) Wenn Du noch immer den beschriebenen Index-Fehler hast, dann weist deine config.php definitiv noch einen Fehler auf!
c) Ich empfehle dringend die Verzeichnis im Speicher der FB zu reinigen und die Indizes neu zu erstellen. Den von mir beschriebenen Fehler habe ich z.B. inzwischen auch wieder erneut. Wenn ich Bilder manuell zuordnen will landen sie nun auch wieder im falschen fonpix und die Fehlermeldung in der GUI erscheint.
Ich vermute ganz stark, dass mit der Änderung von OS7: das Bilder nun allen Telefonbüchern zugewiesen werden können, sich ein Bug eingeschlichen hat. Ich werde das noch einmal bei AVM als Ticket adressieren

All das hat nichts mit der Funktionalität von ImageUpload in carddav2fb zu tun.

Grüße

Black Senator
 
Moin,

dieses Bild mit Namen war in diesem Fall nach den Versuchen (selbstverständlich bei nach Deiner Beschreibung gereinigten Box) per carddav2fb v1.11 wieder übertragen - da es auf dieser Box mit der v1.11 im Moment noch funktioniert. Zum Testen wird die Box vorher wieder gereinigt ... ich werde evtl. morgen einmal die Box neu aufsetzen, aus dem Recovery von AVM heraus, da sollte dann wirklich alles jungfräulich sein :)...

Gruß, Christoph
 
Hallo Christoph,

beim Versuch deine Fehlerbilder nachzuvollziehen sind mir selbst noch ein paar Dinge aufgefallen, die ich in der Doku (READ.ME) ergänzt habe. Hier schon einmal vorab:

Voraussetzung für die Verwendung des Image-Uploads (Befehl -i)
  • der Speicher (USB-Stick) ist indiziert [Heimnetz -> Speicher (NAS) -> Speicher an der FRITZ! Box]
  • ftp Zugang ist aktiv [Heimnetz -> Speicher (NAS) -> Heimnetzfreigabe]
  • sie verwenden einen eigenständigen Benutzer (NICHT! dslf-config), der explizite Berechtigungen für FRITZ! Box-Einstellungen, Zugriff auf NAS-Inhalte und Lese- /Schreibberechtigung für den gesamten verfügbaren Speicher besitzt. [System -> FRITZ! Box-Benutzer -> [Benutzer] -> Berechtigungen]
Grüße

Black Senator
 
Zuletzt bearbeitet:
Moin,

ich habe noch einmal alles nach Deiner Anleitung geputzt und neu getestet:

- Der Speicher ist eingebunden und indiziert
- ein eigener Benutzer ist angelegt - das Script läuft aber nur durch, wenn ich ihm alle Rechte gebe, auch Einrichten!
- der Benutzer hat definitiv Zugang zu allen NAS-Inhalten

Beim Kopieren in dieser konstellation kommen die Bilder wieder - wie bereits früher beschrieben, im Root des Fritz!Box-ftp-Servers an, jedoch in keinem fonpix-Ordner

Ich habe jetzt Testweise diese Bilder in den in der config.php angegebenen Pfad kopiert und im Root entfernt - und siehe da, die Bilder werden (zumindest erst einmal im FB-Telefonbuch) angezeigt (Handteil liegt unten - schaue ich später mal, dauert i.d.R. eh eine Weile, bis der Sync damit abgeschlossen und Bilder sichtbar sind).

Gruß, Christoph
 
Schick mir doch bitte noch einmal deine config.php

Black Senator
 
Hier kommt sie:

PHP:
config.php
<?php

$config = [
        // phonebook
        'phonebook' => [
                'id' => 0,
                'name' => 'Telefonbuch',
                'imagepath' => 'file:///var/InternerSpeicher/WDCWD10-EARS-00Y5B1-01/FRITZ/fonpix/',
                // 'imagepath' => 'file:///var/InternerSpeicher/FRITZ/fonpix',
        ],

        // or server
    'server' => [
        [
            'url' => 'https:/xxx//nextcloud/remote.php/dav/addressbooks/users/christoph/familie/',
            // 'url' => 'https://freenas.fritz.box//nextcloud/remote.php/dav/addressbooks/users/christoph/familie/',
            'user' => 'xxx',
            'password' => 'xxx',
            'fonpix'   => '/WDCWD10-EARS-00Y5B1-01/FRITZ/fonpix',
            // 'fonpix'   => '/USB2-0-MobileDisk-01/FRITZ/fonpix',
            // 'authentication' => 'digest' // uncomment for digest auth
        ],
/* add as many as you need
        [
            'url' => 'https://...',
            'user' => '',
            'password' => '',
        ],
*/
    ],

    // or fritzbox
    'fritzbox' => [
        // 'url' => 'http://fritz.box',
        'url' => '192.168.x.x',
        'user' => 'xxx',
        'password' => 'xxx',
    ],

    'filters' => [
        'include' => [
            'categories' => [
                'Fritzbox'
            ],
            'group' => [
                'Fritzbox'
            ],
        // if empty include all by default
        ],

        'exclude' => [
            'category' => [
                'a', 'b'
            ],
            'group' => [
                'c', 'd'
            ],
        ],
    ],

        'conversions' => [
                'vip' => [
                        'categories' => [
                                'VIP'
                        ],
                        'group' => [
                                ''
                        ],
                ],
        'realName' => [
                        '{lastname}, {prefix} {nickname}',
                        '{lastname}, {prefix} {firstname}',
                        '{lastname}, {nickname}',
                        '{lastname}, {firstname}',
                        '{organization}',
                        '{fullname}'
                ],
                'phoneTypes' => [
                        'WORK' => 'work',
                        'HOME' => 'home',
                        'CELL' => 'mobile'
                ],
                'emailTypes' => [
                        'WORK' => 'work',
                        'HOME' => 'home'
                ],
                'phoneReplaceCharacters' => [
                        '+49' => '0',  //Router steht default in DE; '0049' könnte auch Teil einer Rufnummer sein
                        '0049' => '0',
                        '('   => '',
                        ')'   => '',
                        '/'   => '',
                        '-'   => ' '
                ]
        ]
];

Gruß, Christoph
 
Hallo Christoph,
wie ich schon geschrieben hatte: der ['fonpix'] Eintrag gehört unter ['fritzbox'].
Dein Fehler ist, dass er bei dir unter ['server'] steht!

Ich habe das hier mal korrigiert und alles überflüssige rausgeschmissen. Probiere es doch bitte einmal damit:

Code:
<?php

$config = [
    'phonebook' => [
                'id' => 0,
                'name' => 'Telefonbuch',
                'imagepath' => 'file:///var/InternerSpeicher/WDCWD10-EARS-00Y5B1-01/FRITZ/fonpix/',
        ],

    'server' => [
            'url' => 'https:/xxx//nextcloud/remote.php/dav/addressbooks/users/christoph/familie/',
            'user' => 'xxx',
            'password' => 'xxx',
        ],

    'fritzbox' => [
        'url' => '192.168.x.x',
        'user' => 'xxx',
        'password' => 'xxx',
        'fonpix'   => '/WDCWD10-EARS-00Y5B1-01/FRITZ/fonpix',
        ],

    'filters' => [
        'include' => [
            'categories' => [
                'Fritzbox'
            ],
            'group' => [
                'Fritzbox'
            ],
        ],
        'exclude' => [
        ],
    ],

    'conversions' => [
        'vip' => [
            'categories' => [
                'VIP'
            ],
        ],
   
        'realName' => [
            '{lastname}, {prefix} {nickname}',
            '{lastname}, {prefix} {firstname}',
            '{lastname}, {nickname}',
            '{lastname}, {firstname}',
            '{organization}',
            '{fullname}'
        ],
   
        'phoneTypes' => [
            'WORK' => 'work',
            'HOME' => 'home',
            'CELL' => 'mobile'
        ],
 
        'emailTypes' => [
            'WORK' => 'work',
            'HOME' => 'home'
        ],
 
        'phoneReplaceCharacters' => [
            '+49' => '0',  //Router steht default in DE; '0049' könnte auch Teil einer Rufnummer sein
            '0049' => '0',
            '('   => '',
            ')'   => '',
            '/'   => '',
            '-'   => ' '
        ]
    ]
];
 
Moin,

o_O wer lesen kann ... aber manchmal sieht man beim kontrollieren den Wald vor lauter Bäumen nicht mehr! Jetzt funzt es! :)
Vielen Dank für Deine Mühen trotz Weihnachts-Stress usw. ...
Wünsche noch einen schönen zweiten Feiertag und Guten Rutsch nach 2019!

Gruß, Christoph
 
Keine Ursache! Ich hatte gar keinen Stress. Fehlerbehebung in Coding ist doch entspannend - und erfolgversprechender als bei der Verwandschaft...

Zumindest hatte es noch einiges Gutes:
  1. Der AVM Index-Fehler ist mir als wiederkehrend aufgefallen und als Ticket wieder aufgemacht
  2. ich habe festgestellt, dass der Standard User "dslf-config" keine ftp Rechte hat und die Doku angepasst
  3. das Errorhandling für Image-Upload wurde verbessert (wenn ftp Upload failt, gibts jetzt keinen verwaisten Link mehr im TB) und geht gerade produktiv
Alles gut!

Black Senator


P.S.
Bei der Gelegenheit: Meine Konvertierungsregeln für Telefonnummern sind umfangreicher. Vielleicht ja auch für dich ganz nützlich:
Code:
        'phoneReplaceCharacters' => [          // are processed consecutively. Order decides!
            '+491'  => '01',                   // domestic numbers without country code
            '+492'  => '02',
            '+493'  => '03',
            '+494'  => '04',
            '+495'  => '05',
            '+496'  => '06',
            '+497'  => '07',
            '+498'  => '08',
            '+499'  => '09',
            '+49 1' => '01',
            '+49 2' => '02',
            '+49 3' => '03',
            '+49 4' => '04',
            '+49 5' => '05',
            '+49 6' => '06',
            '+49 7' => '07',
            '+49 8' => '08',
            '+49 9' => '09',
            '+49'   => '',
            '('     => '',                     // delete separators
            ')'     => '',
            '/'     => '',
            '-'     => '',
            ' '     => '',
            '+'     => '00'                    // normalize foreign numbers
        ]
 
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.