@ragee-ra & whom it may concern

So,
es gibt ein brandaktuelles Update:
carddav2fb kann nun nicht nur vCards von Servern laden, sondern auch von loakeln VCF-Dateien! Dazu unbedingt die geänderte example.config.php beachten!

Dabei haben wir die in die Jahre gekommenen Teilschritte download, convert und upload in den Commands überarbeitet.
  1. mit php carddav2fb run bzw. php carddav2fb run -i läuft alles wie gehabt in eins durch
  2. mit php carddav2fb download youroutput.vcf wird der download (Server/Lokale Files) entsprechend in youroutput.vcf geschrieben.
    • Mit der Option -d (dissolve) werden bei iCloud-Daten die Gruppen-vCards aufgelöst und die jeweiligen Gruppen in den entsprechenden vCards in das dann neue Feld GROUPS (analog zu CATEGORIES) geschrieben
    • Mit der Option -f werden die definierten Filter aus der config.php gezogen (exclude/include)
    • php carddav2fb download -df youroutput.vcf entspricht also dem, was run bis dahin macht. Ohne diese Optionen bekommt man in der VCF genau das, was auf dem Server liegt.
      Das man hier auch von lokal laden kann ist eigentlich überflüssig (VCF -> VCF!) aber mit den Argumenten kann man "rohe" VCF aus anderen Quellen wie beschrieben verändern. Auch, das die vCards einmal durch den Sabre-Parser laufen kann evtl. für das Aufdecken von Inkonsistenzen in den vCards genutzt werden.
  3. mit php carddav2fb convert youroutput.vcf phonebook.xml werden die vCards aus der VCF eingelesen und in das FRITZ!Box-Telefonbuchformat konvertiert (entsprechend der conversions aus der config.php) - also der nächste Schritt der in run durchlaufen wird
  4. php carddav2fb upload phonebook.xml erklärt sich von selbst
Wer mit den Optionen unsicher ist, kann immer mit -h zu den jeweiligen Commands sich die entsprechende Hilfe ansehen.

Viel Spaß

Black Senator
 
Zuletzt bearbeitet:
Hallo, ich habe mal das Update gemacht, lief auch drch aber ich bekomme nun ein Fehler (Syncronisation geht aber trotzdem).
Code:
php -f /home/pi/carddav2fb/carddav2fb run -i
PHP Notice:  Undefined index: local in /home/pi/carddav2fb/src/DownloadTrait.php on line 51                                                                                                                                                 
PHP Warning:  Invalid argument supplied for foreach() in /home/pi/carddav2fb/src/DownloadTrait.php on line 51
Was hat der Fehler zu sagen?
 
Zuletzt bearbeitet:
Offizielles Release 2.0 veröffentlicht

Ich hatte diesen Thread ehemals mit "2.0" tituliert, um eine Abgrenzung zur vormaligen Lösung deutlich zu machen.
Tatsächlich ist nun am Wochenende die offizielle 2.0-Version der neuen Lösung produktiv gegangen.

Ich fasse hier noch einmal alles wesentliche dazu zusammen, damit man nicht die Entwicklung in x Froren-Seiten nachvollziehen muss:
  1. Das Programm hat insgesamt 5 ausführbare Teile:
    1. run:
      führte den gesamten nachfolgend beschriebenen Prozess in einem Rutsch durch
    2. download:
      führt nur das Einlesen von Servern oder lokalen Dateien (VCF) durch; optional werden iCloud-Gruppen aufgelöst und Kategorien/Gruppen von Kontakten ein- bzw. ausgeschlossen (in run immer);
      Export: VCF-Datei
    3. convert:
      Import VCF-Datei(en); Aufbreitung der Namen, Rufnummern/E-Mail-Adressen und deren Typen mit Konvertierung in das FRITZ!Box-Telefonbuch-Format;
      Export: XML-Datei
    4. upload:
      Import XML-Datei; upload in die FRITZ!Box
    5. background-image:
      Liest das FRITZ!Box-Telefonbuch (erstes) ein; ermittelt die Kurzwahlnummern (quickdial); erzeugt ein passendes Tastatur-Image für Kurzwahlen 2 bis 9 und läd dies als FRITZ!Fon Hintergrundbild hoch
  2. Nutzung von PHP-Standard-Bibliotheken (Auszug):
    1. Bibliothekseinbindung/-versionierung mit Composer
    2. Serverzugriffe (CardDAV und FRITZ!Box) mit Guzzle
    3. vCard-Handling mit sabre
    4. Testcases mit PHPUnit
  3. Folgende Features werden bereitgestellt:
    1. Steuerung der Funktionen über separate Konfigurationsdatei (Vorlage: example.config.php)
    2. Upload in unterschiedliche Telefonbücher möglich, indem pro Telefonbuch eine eigene Konfigurationsdatei aufgerufen wird.
    3. Kommandos zur Programmsteuerung (Auszug):
      1. -c Konfigurationsdatei definieren (default: config.php)
      2. -i (image): upload Anruferbilder (siehe 8.)
      3. -d (dissolve): Auflösen der iCloud-Gruppen (nur bei download)
      4. -f (filter): Berücksichtigung der Filter-Konfiguration für in-/exclude (nur bei download)
    4. Download von einer beliebigen Anzahl von CardDAV Servern (rasend schnell im Vergleich zur alten Version!)
    5. Einlesen von beliebig vielen lokalen VCF-Dateien optional möglich
    6. Auswahl zur Berücksichtigung von Kontakten über include/exclude durch Kategorien oder Gruppen (iCloud)
    7. Kennzeichnung der wichtigen Personen (Anrufe auch bei aktiver Klingelsperre) über Kategorien/Gruppen (VIP)
    8. Upload von Kontaktportraits (JPEG und PNG). Die Anruferbilder werden bei ankommenden Anrufen im FRITZ!Fon angezeigt
    9. Daten, die nicht vom CardDAV-Server bereitgestellt werden (können), werden gesichert und in den neuen Upload zurückgeschrieben:
      1. Kurzwahl- und Vanitynummern werden als CSV-Datei im internen Speicher der FRITZ!Box gesichert und dem neuen Upload zugeordnet (Die Daten stehen auch nach einem ungewollten Datenverlust noch zur Verfügung!)
      2. Interne Rufnummern (z.B. für Gruppenruf) werden ebenso wie in der oben beschrieben CSV-Datei gesichert
    10. Wenn einem Kontakt mehr als neun Rufnummern zugeordnet sind, wird der Kontakt entsprechend geteilt (gleicher Name). E-Mail-Adressen werden nur dem ersten Block zugeordnet
    11. Telefonnumern werden nach deren Type (Privat, Mobil, Geschäftlich, FAX) sortiert. Die Abfolge wird durch die Reihenfolge in der Konvertierungsvorgabe bestimmt.
    12. Die UID des Kontaktes vom CardDAV Server wird dem Telefonbuch mitgegeben (die Daten bleiben auch bei einem Download aus der GUI vorhanden, sind aber natürlich nicht in der GUI sichtbar)
    13. Für das erste Telefonbuch können die Kurzwahlen 2 bis 9 zur Erinnerung mit Tastaturabbildung als Hintergrundbild auf FRITZ!Fon geladen werden
Von mir gibt es einen Fork der zusätzlich folgende Features bietet:
  1. Kontakte bzw. Rufnummern, die in der FRITZ!Box, aber nicht im Upload enthalten sind, können als VCF-Datei an einen E-Mail-Account gesendet werden. Im Mobiltelefon sind es dann zwei, drei Klicks und diese Daten sind in den Serverdaten ergänzt bzw. aktualisert und dann beim nächsten Upload mit dabei.
  2. Kontakte mit FAX-Nummern werden auf Name und FAX-Nummer reduziert in das dBase-Format gebracht und können als Adress-Datenbank für FRITZ!fax (fax4box) auf die FRITZ!Box geladen werden. (FRITZ!adr direkt oder aus FRITZ!fax heraus aufrufen und die Datenbank aus dem FRITZ!Box-Speicher laden)

Grüße

Black Senator
 
Zuletzt bearbeitet:
  • Like
Reaktionen: tzieg und rogerp
Hi

Vielen Dank für das aktualisierte Script! Funktioniert top!

Die Fritzbox unterstützt ja nur JPGs als Kontaktbilder.
Leider erhalte ich bei einem vcf download ein eingebettet PNG-Bild (egal ob ich ein PNG oder ein JPG Bild hochlade).
Gibt es vielleicht Bestrebungen da noch einen PNG zu JPG Konverter einzubauen? Ich kenne mich mit PHP nicht aus, aber gemäss kleiner Recherche wäre das vermutlich nicht unmöglich ;).

Hier noch der Eintrag aus der vcf:
PHOTO;ENCODING=b;TYPE=PNG:iVBORw0KGgoAAAANSUhEUgAAA...

Grüsse
rogerp
 
@rogerp,

ich habe dazu ein Issue aufgemacht und schaue mal, was ich dazu machen kann.

Grüße

Black Senator

P.S. Wenn dir das Programm gefällt, dann würde ich mich über ein Like freuen
 
  • Like
Reaktionen: rogerp
@rogerp,

So, das Fixing ist fertig und in den master gemerged. Bin gespannt auf den real-life-test*.

Grüße

Black Senator

* ich konnte nur mit "künstlich" erstellten Quelldaten die Integrationstests durchführen
 
Zuletzt bearbeitet:
Hi Black Senator

Danke für das Update - Testen ist Ehrensache ;) .

Ich habe mich gestern auch bereits mal an einer Erweiterung versucht und bin dann an einer Exception gescheitert - die sehe ich nun auch bei deiner Implementation:

--\\
PHP Fatal error: Uncaught Error: Call to undefined function Andig\imagecreatefromstring() in C:\DEV\carddav2fb-PNG_handling\src\functions.php:131
Stack trace:
#0 C:\DEV\carddav2fb-PNG_handling\src\functions.php(173): Andig\convertPNGtoJPG('\x89PNG\r\n\x1A\n\x00\x00\x00\rIHD...')
#1 C:\DEV\carddav2fb-PNG_handling\src\functions.php(241): Andig\getJPEGimage(Object(Sabre\VObject\Component\VCard))
#2 C:\DEV\carddav2fb-PNG_handling\src\RunCommand.php(71): Andig\uploadImages(Array, Array, Array, Object(Closure))
#3 C:\DEV\carddav2fb-PNG_handling\vendor\symfony\console\Command\Command.php(255): Andig\RunCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 C:\DEV\carddav2fb-PNG_handling\vendor\symfony\console\Application.php(915): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 C:\DEV\carddav2fb-PNG_handling\vendor\symfony\console\Application.php(272): Sy in C:\DEV\carddav2fb-PNG_handling\src\functions.php on line 131
--//


Ich vermute, dass die Exception geworfen werden könnte, weil die Daten ungütlig sind. Vielleicht findest du mehr heraus wenn du reale Daten hast. Ich habe dir mal eine Beispieldatei angehängt. Ich musste die vcf allerdings in txt umbenennen da hier im Forum nicht erlaubt.

Viele Grüsse
rogerp
 

Anhänge

  • Notruf_Feuerwehr.txt
    54.5 KB · Aufrufe: 5
@rogerp

Ich habe vergessen die README.md anzupassen:eek:.
Ich schätze, du hast hast das php-gd Modul nicht installiert. Dann gehen die Funktionsaufrufe natürlich auf die Bretter;)

Black Senator
 
Hi Black Senator

Ich habe vergessen die README.md anzupassen:eek:.

Kein Problem - hätte ich wohl eh nicht gelesen ;).

Du hattest aber recht. Nachdem ich das Modul aktiviert hatte lief der Prozess ohne Fehler durch und nach ein paar Minuten waren die Bilder auch auf das Fon synchronisiert.

Vielen Dank für die prompte Erweiterung, ich weiss das sehr zu schätzen!

Viele Grüsse
rogerp
 
Hi,

komme hier einfach nicht weiter !
FritzBox-user, pw und Benutzer-Rechte und FB-Einstellungen sollten stimmen.

Kann es sein, dass der Pfad-Name für das Verzeichnis /FRITZ/mediabox nicht stimmt ?
Wo wird der gesetzt ?

Danke für Eure Hilfe !

VG
Tom

102540
 
Kann es sein, dass der Pfad-Name für das Verzeichnis /FRITZ/mediabox nicht stimmt ?
Hallo Tom,

Welche FRITZ!Box nutzt du?
Kannst du mal die Ordnerstruktur von //fritz.nas posten (Screenshot aus Win Explorer)?
Hast Du einen Ordner //fritz.nas/fritz/mediabox?
Kannst du auf den Ordner aus dem Explorer lesend/schreibend zugreifen?

Mit freundlichen Grüßen

Black Senator
 
Hallo Tom,

Welche FRITZ!Box nutzt du?
Kannst du mal die Ordnerstruktur von //fritz.nas posten (Screenshot aus Win Explorer)?
Hast Du einen Ordner //fritz.nas/fritz/mediabox?
Kannst du auf den Ordner aus dem Explorer lesend/schreibend zugreifen?

Mit freundlichen Grüßen

Black Senator

Hi,

Danke für die schnelle Rückmeldung.

FB ist die 7360.

Ordner-Struktur (hier vermute ich das Problem; Storage-01 ist der USB-Stick):
102542

Lese-/Schreibzugriff auf Ordner mediabox ist eingerichtet.

VG
Tom
 
Hast Du einen Ordner //fritz.nas/fritz/mediabox?
Kannst du auf den Ordner aus dem Explorer lesend/schreibend zugreifen?
Bitte mal die komplette Ordnerstruktur von //fritz.nas/..

Wir speichern in //fritz.nas/fritz/mediabox weil ich annahm, dass die immer vorhanden ist

Mit freundlichen Grüßen

Black Senator
 
Hast Du einen Ordner //fritz.nas/fritz/mediabox?
Kannst du auf den Ordner aus dem Explorer lesend/schreibend zugreifen?
Bitte mal die komplette Ordnerstruktur von //fritz.nas/..

Wir speichern in //fritz.nas/fritz/mediabox weil ich annahm, dass die immer vorhanden ist

Mit freundlichen Grüßen

Black Senator

Hast Du einen Ordner //fritz.nas/fritz/mediabox?
NEIN.

Kannst du auf den Ordner aus dem Explorer lesend/schreibend zugreifen?
auf den Ordner //fritz.nas/Storage-01/FRITZ/mediabox: ja

Bitte mal die komplette Ordnerstruktur von //fritz.nas/..
siehe oben. es gibt keine weiteren Ordner.

VG
Tom
 
Hallo Tom,
also bei meiner 7490 sieht das so aus:
FB storage.png
Ich bin kein Experte für die verschiedenen FRITZ!Box(en) und deren interner Speicherstruktur. Für die carddav2fb-Entwicklung haben wir angenommen, dass (seit geraumer Zeit) in der OS die Speicherstruktur für die Boxen unterhalb von //fritz.nas gleich ist:
//fritz.nas/FRITZ/.. ->interner Speicher
//fritz.nas/[USB-STICK]/FRITZ/.. -> USB-Stick (sofern vorhanden.
Um dem Nutzer nicht unnötige Konfigurationen "aufzudrücken", haben wir für die Speicherung der "speziellen Attribute" (Quickdial, Vanity, interen Nummern) als Speicherort //fritz.nas/FRITZ/mediabox gewählt, in der Annahme, dass dieser Ordner seitens FRITZ!OS (immer) vorhanden ist - aber offenbar nicht.
Ich werde das ändern, dass der default-Pfad bleibt, aber in der Konfiguration überschrieben werden kann.
Als Workaround bis dahin kannst Du ja einfach die Ordnerstruktur entsprechend bei Dir anlegen (so denn das bei Deiner Box geht).

Die Exception sagt aber "permission denied" - dass deutet eher daraufhin, dass der Ordner vorhanden ist, nur nicht verfügbar ist.
Checke daher bitte unbedingt noch einmal, ob die Konfiguration von Speicher(NAS) bei dir so aussieht:
FB NAS.png

Grüße

Black Senator
 
Zuletzt bearbeitet:
in der Annahme, dass dieser Ordner seitens FRITZ!OS (immer) vorhanden ist - aber offenbar nicht.
Ist doch FTP gemeint, oder?
Wenn, dann kommts auf den Benutzer an.
Den kannste ja explizit ein NAS Verzeichnis zuweisen und da ist dann Nix mit FRITZ/mediabox.
 
Hallo Black Senator,

ich habe jetzt das Verzeichnis //fritz.nas/FRITZ/mediabox


Hallo Black Senator,

bei mir sieht das so aus:
1570263985091.png

Anscheinend hat die FB7360 einen deutlich kleineren internen Speicher (274 kB).
Die restlichen Häckchen waren gesetzt.

Die Fehlermeldung konnte durch Deinen Tip, das Verzeichnis //fritz.nas/FRITZ/mediabox anzulegen, erfolgreich überwunden werden.
Vielen Dank dafür.

Das scheint aber nur eine temporäre Lösung zu sein - siehe die Einblendung bei mouse over:
1570266812781.png

Viele Grüße
Tom
 
Hallo zusammen,

bisher läuft bei mir noch die "alte" Version auf einer VM und tut ihren Dienst.
Nun wollte ich das Ganze mal mit Docker testen, doch da komme ich nicht wirklich weiter. Liegt wahrscheinlich daran, dass ich mich mit Docker nicht wirklich auskenne und bisher nur mit Schritt für Schritt Anleitungen gearbeitet habe. Gibt es so eine Anleitung eventuell auch für carddav2fb?

Bisher habe ich folgendes versucht:
Docker auf der Synology geöffnet, Image von andig/carddav2fb heruntergeladen und gestartet - ohne weitere Einstellungen.
Nach dem Start wird der Container gleich wieder gestoppt und im Protokoll steht folgendes:
  • Copied config.example.php to /data volume. Please edit and rename to config.php
  • No carddav2fb config found!
Ich würde die config ja gern anpassen bzw. durch meine bisherige ersetzen, doch wo kann ich die finden?
 
Die Exception sagt aber "permission denied" - dass deutet eher daraufhin, dass der Ordner vorhanden ist, nur nicht verfügbar ist.
Checke daher bitte unbedingt noch einmal, ob die Konfiguration von Speicher(NAS) bei dir so aussieht:
FB NAS.png

Und?

Mit freundlichen Grüßen

Black Senator
 
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.