Hallo Black Senator

Ich habe mir mal das XML angeschaut, kann aber (wie bereits befürchtet) keine Information finden die auf den auf dem Fon eingestellten Klingelton schliessen lässt. Auch gibt es keine Möglichkeit den Klingelton via Fritzbox (7590) -> Telefonie -> Telefonbuch einzustellen.

Ist also vielleicht ganz gut, dass du das Feature nicht nutzt ;).

Gruss
Roger
 
Hallo Roger,

aber Du sagst, nach dem UpLOAD des Telefonbuch auf die FRITZ!Box sind die zugeordneten Klingeltöne „weg“ bzw. die Zuordnung.
Passiert das auch, wenn Du dein Telefonbuch in der GUI sicherst und dann in der GUI wiederherstellst?
Wenn ja, wäre das m.E. dann ein Bug der Firmware!

Grüße

Black Senator
 
Hallo Black Senator

So, ich habe nun ein paar Tests gemacht.

Test 1: GUI
- Einstellen des Klingeltons auf dem Fon
- Telefonbuch via WebGui exportiert
- Telefonbuch via WebGui importiert
=> Fon -> Kontakt -> Ändern -> AVM Klingelton = wie zuvor eingestellt

Test 2: Script
- Einstellen des Klingeltons auf dem Fon
- Update mittels carddav2fb
=> Fon -> Kontakt -> Ändern -> AVM Klingelton = "Fritz!Box Einstellung"

Interessanterweise wird beim Test 2 der korrekte Klingelton verwendet.
Meine Meldung zuvor ist also nur zum Teil korrekt:
- Funktion ok
- Anzeige nicht (mehr) ok

Gruss
Roger
 
Hallo Roger,

also wenn ich Dich richtig verstehe, dann ist nach Script-Upload das Label im FRITZ!Fon des Klingeltons von "ringtone_abc" auf "Fritz!Box Einstellung" geändert. Der Klingelton ist aber der vorher gewählte. carddav2fb ändert an der Stelle nichts! Wenn, dann liegt das an der Verarbeitungslogik in der Firmware, die offenbar zwischen dem "push" per http-Request und dem "pull" per GUI bzw. der anschließenden Synchronisaton zum FRITZ!Fon sich anders verhält.

Eine klitzkleine Einschränkung muss ich machen: abweichend von der AVM-Vorgabe für die XML-Struktur des Telefonbuches übergeben wir den XML-Knoten <carddav_uid> (beim Sichern des Telefonbuches, welches mit dem script hochgeladen wurde findest Du ihn wieder). Er wird also von der Firmware anstandslos gespeichert (und auch wieder mit zurückgegeben).
Schwer zu glauben, aber evtl. verändert dieses Tag die Synchronisation des Telefonbuches zu angeschlossenen FRITZ!Fon und damit welches Label bzw. welche Einstellung darin angezeigt wird.

Du könntest ja noch mal Testen, wie sich die Einstellungen unter Telefonie -> Telefoniegeräte -> [YOUR_FRITZ_FON] -> bearbeiten -> Klingeltöne verändert, wenn man per GUI oder per script lädt.

Grüße

Black Senator
 
Hallo Black Senator,

gerne würde ich dein Tool nutzen, leider scheitere ich schon beim Download der vCards. Über den Browser komme ich mit der in der Config angegebenen URL zu den vCards. Kannst du von der Ausgabe unten etwas ableiten? Der CardDAV Server läuft auf einer Synology Disk Station.

Viele Grüße,
Florian

PHP:
❯ ./carddav2fb run
Downloading recent FRITZ!Box phonebook
Save internal data from recent FRITZ!Box phonebook!
PHP Warning:  ftp_close(): SSL_read on shutdown: Connection reset by peer (54) in /Users/florian/bin/carddav2fb/src/functions.php on line 613

Warning: ftp_close(): SSL_read on shutdown: Connection reset by peer (54) in /Users/florian/bin/carddav2fb/src/functions.php on line 613
Phone numbers with special attributes saved
Downloading vCard(s) from account gkontakte
    0 [>---------------------------]*   Trying 192.168.1.10:8443...
* TCP_NODELAY set
* Connected to server.firma.de (192.168.1.10) port 8443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
  CApath: /usr/local/etc/[email protected]/certs
* SSL connection using TLSv1.2 / AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=server.firma.de
*  start date: Oct 20 05:11:08 2019 GMT
*  expire date: Jan 18 05:11:08 2020 GMT
*  subjectAltName: host "server.firma.de" matched cert's "server.firma.de"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
> REPORT /addressbooks/users/kontakte/addressbook/ HTTP/1.1
Host: server.firma.de:8443
Depth: 1
User-Agent: GuzzleHttp/6.4.1 curl/7.66.0 PHP/7.3.11
Authorization: Basic Z2tvbvRha3RlEQZXdW05WGNUR3lENA==
Content-Length: 239

* upload completely sent off: 239 out of 239 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 Bad Request
< Date: Tue, 05 Nov 2019 14:41:13 GMT
< DAV: 1, access-control, addressbook, extended-mkcol, calendarserver-principal-property-search, calendarserver-principal-search, calendarserver-home-sync
< Server: Twisted/13.0.0 TwistedWeb/9.0.0
< Content-Length: 115
< Strict-Transport-Security: max-age=604800
< Content-Type: text/html;charset=utf-8
< Connection: close
<
* Closing connection 0

In RequestException.php line 113:
                                                                                                                                                  
  Client error: `REPORT https://server.firma.de:8443/addressbooks/users/kontakte/addressbook/` resulted in a `400 Bad Request` response: 
  <html><head><title>Bad Request</title></head><body><h1>Bad Request</h1><p>CARDDAV:filter required</p></body></html>                             
                                                                                                                                                  

run [-i|--image] [-l|--local [LOCAL]] [-c|--config CONFIG]
 
Hallo Florian,

bitte mach dazu ein Issue auf GitHub auf.

Was steht in deiner config in ['fritzbox']['http'] bzw. ['plainFTP'] ?


Black Senator
 
Ich habe mir mal das XML angeschaut, kann aber (wie bereits befürchtet) keine Information finden die auf den auf dem Fon eingestellten Klingelton schliessen lässt.
Ich muss mir wohl doch ´mal so langsam eine Stoffsammlung der originalen Telefonbuch-XML-Strukturen anlegen: In diesem Beitrag findet sich ein Hinweis:
XML:
<phonebooks>
  <phonebook name="Telefonbuch">
    <contact>
      ...
      <setup>
        <ringTone />
      </setup>

Jetzt müssten wir nur noch einen Download bekommen von dem Testfall von dir, indem die Zuordnung erhalten bleibt:
Dazu müsstest Du den Fall noch einmal aufbauen, dann in ../src/RunCommand.php folgende Zeile ergänzen (Zeile 40 ff):
PHP:
        $recentPhonebook = downloadPhonebook($this->config['fritzbox'], $this->config['phonebook']);
        $recentPhonebook->asXML('TB_Testfall.xml');    // diese Zeile ergänzen
        if (count($savedAttributes = uploadAttributes($recentPhonebook, $this->config))) {
und zur Sicherheit (damit der Upload nicht den Testfall überschreibt)
PHP:
// uploadPhonebook($xmlPhonebook, $this->config);
setzen.
Anschließend die TB_Testfall.xml im ../carddav2fb Directory wegsichern, Code-Änderungen zurücknehmen und in Ruhe das XML analysieren...

Grüße

Black Senator
 
Hallo,

ich habe heute einmal (nach rund einem 3/4 Jahr) auf eine aktuelle Version ge-updated. Seither funktioniert es nicht mehr, sondern ich bekomme nur noch einen Fehler:
Code:
./carddav2fb -c/home/carddav2fb/carddav2fb/christoph.php -i run
Downloading recent FRITZ!Box phonebook
Downloading vCard(s) from account christoph
    0 [>---------------------------]PHP Fatal error:  Uncaught Error: Class 'Sabre\VObject\Reader' not found in /home/carddav2fb/carddav2fb/src/CardDav/Backend.php:173
Stack trace:
#0 /home/carddav2fb/carddav2fb/src/functions.php(52): Andig\CardDav\Backend->getVcards()
#1 /home/carddav2fb/carddav2fb/src/DownloadTrait.php(35): Andig\download(Object(Andig\CardDav\Backend), Object(Closure))
#2 /home/carddav2fb/carddav2fb/src/DownloadTrait.php(70): Andig\RunCommand->downloadProvider(Object(Symfony\Component\Console\Output\ConsoleOutput), Object(Andig\CardDav\Backend))
#3 /home/carddav2fb/carddav2fb/src/RunCommand.php(50): Andig\RunCommand->downloadAllProviders(Object(Symfony\Component\Console\Output\ConsoleOutput), true, Array)
#4 /home/carddav2fb/carddav2fb/vendor/symfony/console/Command/Command.php(255): Andig\RunCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 /home/carddav2fb/carddav2fb/vendor/symfony/console/Application.php(960): Symfony\Component\Console\Command\Command->run(Object(S in /home/carddav2fb/carddav2fb/src/CardDav/Backend.php on line 173
Leider komme ich jetzt nicht weiter, und hoffe, hier Unterstützung zu finden.

Gruß, Christoph
 
Deine Baikal-Instanz sieht kaputt aus.

Was genau hast Du aktualisiert? :D
 
:oops:
ich hatte das Update von Carddav2fb, wie im Wiki beschrieben, durchgeführt.
Ein normales apt update / upgrade der Distro geschieht öfters (ein bis zwei Mal pro Woche)
 
Hallo,

hast Du nach dem Update alle Libraries aktualisiert?
composer update —no-dev

Grüße

Black Senator
 
Moinsen


der originalen Telefonbuch-XML-Strukturen anlegen
Beachte auch die Unterschiede zu den unterschiedlichen Arten, um ans Telefonbuch zu kommen.
Das erste Telefonbuch ( 0 ), über TR-064/SOAP geladen, fängt so an...
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<phonebooks>
<!-- id:0 , name: Telefonbuch -->
<phonebook owner="0" name="Telefonbuch">
<timestamp>1573983706</timestamp>
<!-- number of contacts 19 -->
( 7590 mit 7.19 Inhaus )
...und beinhaltet auch immer die internen Nummern.
...aber nicht die HD Kurzwahlen ;)
Außerdem tauchen <mod_time/> und <setup/> nicht auf.
Ein <contact> ...
HTML:
<contact>
<category>0</category>
<person>
<realName>Mobilteil</realName>
</person>
<uniqueid>52</uniqueid>
<telephony>
<services>
</services>
<!-- numbers:1-->
<number type="home" quickdial="3" vanity="" prio="1" >*121#1000</number>
<!-- idx:4 -->
<!-- ringtoneidx:nil -->
</telephony>
</contact>

Vorteil von TR-064
Das AVM Telefonbuch ( ID 0 ) ein angelegtes oder ein Online-Telefonbuch haben ein einheitliches Format.
Mit wohlgeformten XML und einem XSL Stylesheet nach HTML transformiert...
Bildschirmfoto vom 2019-11-17 12-04-52.png
...können also alle drei Telefonbuchtypen verarbeitet werden.

PS: Die Zahl vor dem Namen stammt aus: <uniqueid>
Und der Nummerntyp wird mittels <xsl:choose> ermittelt...
XSL
HTML:
<xsl:for-each select="/phonebooks/phonebook/contact">
<xsl:element name="tr">
<xsl:element name="td">
<xsl:value-of select="uniqueid"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="person/realName"/>
</xsl:element>
<xsl:for-each select="telephony/number">
<xsl:element name="td">
<xsl:choose>
<xsl:when test="@type='home'">Privat: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type='intern'">Intern: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type=''">Extra: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type='memo'">Aufnahme: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type='work'">Arbeit: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type='fax_work'">Fax: <xsl:value-of select="."/></xsl:when>
<xsl:when test="@type='mobile'">Mobil: <xsl:value-of select="."/></xsl:when>
<xsl:otherwise>Andere: <xsl:value-of select="."/></xsl:otherwise>
</xsl:choose>
<!--xsl:value-of select="."/-->
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
 
Zuletzt bearbeitet:
hast Du nach dem Update alle Libraries aktualisiert?
Eigendlich schon ...

Ich habe jetzt noch einmal alles komplett neu aufgesetzt, und jetzt funktioniert es wieder.

Gruß, Christoph

-- Zusammenführung Doppelpost by stoney

Hallo,

ich habe jetzt mal ein ganz anderes Problem/Szenario:
Unsere Kontakte werden zentral in einem Nextcloud-Server (v17.0.1) gespeichert - Bearbeitung erfolgt meist über ein Smartphone/Tablet, gelegendlich auch direkt in Nextcloud...

Via carddav2fb werden jene Kontakte übertragen, die folgende Kriterien haben:
- Telefonbuch: Familie
- Gruppe: Fritzbox
- wenn vorhanden, eine Gruppe VIP für Wichtig in der Fritzbox

Ich möchte jetzt auch die Kurzwahlfunktion nutzen:
- zu diesem Zweck würde ich gerne das Feld Nickname "zweckentfremden", um dem Hintergrundbild einen Namen für die Taste zu geben, um auch unserem Sohn (7) einfache, für einen Erstklässler lesbare Namen zu generieren (gepeichert werden i.d.R. im Format NN, VN), ohne aber die Ordnung des normalen FB-Telefonbuches oder in den Smartphones zu verändern.

Ist das so evtl. scon möglich, oder muß ein neues, zusätzliches Feature dafür "gestrickt" werden?

Gruß, Christoph
 
Zuletzt bearbeitet von einem Moderator:
Ich möchte jetzt auch die Kurzwahlfunktion nutzen:
- zu diesem Zweck würde ich gerne das Feld Nickname "zweckentfremden", um dem Hintergrundbild einen Namen für die Taste zu geben, um auch unserem Sohn (7) einfache, für einen Erstklässler lesbare Namen zu generieren (gepeichert werden i.d.R. im Format NN, VN), ohne aber die Ordnung des normalen FB-Telefonbuches oder in den Smartphones zu verändern.

Erst einmal finde ich Klasse, dass Du die Kurzwahl-Hntergrundbild Funktion nutzen willst. Die habe ich nämlich entworfen, damit mein Jüngster (damals 9) schnell seine Kumples anfunken kann. Offenbar habe ich die richtige Idee gehabt: "funktion matches customer needs".
Tatsächlich bin ich auf die gleiche Problematik gestossen die Du jetzt beschreibst (wenn ich Dich richtig verstanden habe!?): einen anderen Namen an Stelle des Vornamens des Kontaktes: also "Oma" statt "Frieda" - richtig?

Ja, es
muß ein neues, zusätzliches Feature dafür "gestrickt" werden
!

Die Verwendung von Nickname wäre eine Lösung - tatsächlich haben wir aber alle Krücken, um mit vCard-Feldern Telefonbuch-spezifische Daten zu besetzen/steuern um- bzw. zurückgebaut (Stichwort: X_FB-VANITY/X_FB-QUICKDIAL). Daher ist wenn, eher eine Lösung wahrscheinlich, die sich nur in bzw. zwischen FRITZ!Box und carddav2fb abspielt (vergleiche Attribute.csv).
Attributes.png

Ich überlege mir mal was (das hoffentlich in Produktion geht, ehe dein Sohn zu alt dafür ist...)

Update 1:
Mhmmmm...: wie wäre es, wenn Du die Vanity-Funktion verwenden könntest?
Lösung grob skizziert:
  1. neues Steuerungsfeld in den config.php: quickdial_alias => true/false;
  2. wenn true, dann werden die Vanity-Namen (Großbuchstaben) in "korrekter" Schreibweise als Alias in dem Image übernommen.
Vorteile:
  1. Einfaches Customizing über die GUI der FRITZ!Box
  2. Die Attributwerte werden heute schon Attributes.csv gesichert
  3. geringer Änderungsaufwand
Nachteil:
  • Vanity-Feld wird "doppelt" verwendet für unterschiedliche Zwecke (keine saubere Datenmodellierung)
    ist aber eher ein philosopischer Diskurs ...
Update 2:
Also, würde dann so aussehen:
Quickdial alias.png

quickdial_alias.jpg
und es sind wohl nur sechs Zeilen Code zu ändern :)

Grüße

Black Senator
 
Zuletzt bearbeitet:
Hallo Black Senator,

da ich die Vanity-Funktion nicht benutze, wäre die Zweckentfremdung dafür eine Option. Und wenn dann via zusätzlicher Steuerungsoption in der config gewählt werden kann, ob man die Quickdial oder ursprüngliche Vanity-Funktion haben möchte, ist ja (fast) allen geholfen ;-)

Wenn Du dann irgendwann mal ganz viel Lust und Zeit hast, kann man ja vlt. auf ein Feld aus NC zurück greifen - wie eben z.B. den Nickname...

Gruß, Christoph
 
Hallo Christoph,

das Feature ist schon fertig.

Wie gesagt: Verwendung anderer Felder aus dem Set RFC 6350 wird es sicher nicht geben - das ergibt keinen Sinn. Wenn schon etwas so Spezielles, wie einenen Alias für einen Kurzwahlnamen, welche nur in carddav2fb bei Nutzung der Hintergrundbild-Funktion verwendung findet...

Grüße

Black Senator
 
Hallo Black Senator,

ist das dann in der Standardversion enthalten, oder muß ich von andig ziehen?

Gruß, Christoph
 
Hallo Christoph,

ist in beiden enthalten. Bitte die geänderte (erweiterte) example.config.php beachten (die Zeile aus 2.)!

1. Alias in den Vanity-Nummer pflegen
2. 'quickdial_alias' => true setzen
3. run

Der master Branch von andig ist die "Standardversion". Mein Fork (next) enthält immer alles von andig, zzgl. meiner Erweiterungen zum FRITZ!fax-Adressbuch und zur Rücksicherung von neueren FRITZ!Box-Kontakten (Replymail)

Have fun

Black Senator
 
Zuletzt bearbeitet:
Danke, funktioniert super!
 
Hallo, ich habe irgendwie das selbe Problem wie der User oben. Nach einem Update bekomme ich Fehler:
Code:
php -f /home/pi/carddav2fb/carddav2fb run -i
Downloading recent FRITZ!Box phonebook
Downloading vCard(s) from account marco
  211 [============================]
Downloaded 211 vCard(s)
Downloaded 211 vCard(s) in total
Dissolving groups (e.g. iCloud)
Dissolved 0 group(s)
Filtering 211 vCard(s)
Filtered 0 vCard(s)
Detaching and uploading image(s)
211/211 [============================] 100%
Uploaded/refreshed 0 of 57 image file(s)
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped
Contact without phone numbers will be skipped

Converted 211 vCard(s)
Uploading new phonebook to FRITZ!Box
Successful uploaded new FRITZ!Box phonebook
PHP Fatal error:  Uncaught TypeError: Return value of "Andig\RunCommand::execute()" must be of the type int, NULL returned. in /home/pi/carddav2fb/vendor/symfony/console/Command/Command.php:258
Stack trace:
#0 /home/pi/carddav2fb/vendor/symfony/console/Application.php(924): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#1 /home/pi/carddav2fb/vendor/symfony/console/Application.php(265): Symfony\Component\Console\Application->doRunCommand(Object(Andig\RunCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 /home/pi/carddav2fb/vendor/symfony/console/Application.php(141): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /home/pi/carddav2fb/carddav2fb(20): Symfony\Component\Console\Application->run()
#4 {main}
  thrown in /home/pi/carddav2fb/vendor/symfony/console/Command/Command.php on line 258

Update war ohne Probleme
 
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.