[Gelöst] Telefonbuch-Upload-Skript

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
1,534
Punkte für Reaktionen
34
Punkte
48

MuP

IPPF-Urgestein
Mitglied seit
27 Mrz 2009
Beiträge
12,258
Punkte für Reaktionen
518
Punkte
113
Export>Change>Import?
 

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
1,534
Punkte für Reaktionen
34
Punkte
48

PeterPawn

IPPF-Urgestein
Mitglied seit
10 Mai 2006
Beiträge
12,045
Punkte für Reaktionen
718
Punkte
113
Warum sollte es nicht mehr funktionieren, das Telefonbuch per Upload-Request an "firmwarecfg" (muß halt "multipart/form-data" sein und daher geht "wget" nicht, aber jedes andere Programm, was das beherrscht (curl) oder mit dem man das emulieren kann (netcat), geht da eigentlich problemlos) in die Box zu bringen?

Ich weiß zwar nicht, wie sich das bei einer nicht vorhandenen Telefonbuch-ID verhält (ob es die anlegt, der Import scheitert oder einfach das Standard-TB überschrieben wird), aber das ist ja nun durch eigenen Test extrem schnell zu ermitteln - aus dem GUI heraus wird (iirc) immer das gerade ausgewählte TB durch den Import ersetzt, da kann es diesen Fall dann nicht geben.
 

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
1,534
Punkte für Reaktionen
34
Punkte
48

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Hallo Theo,

das Thema steht zwar auf gelöst - aber ich habe mich gefragt, was eigentlich deine Erwartung an ein Tool war/ist, bzw. was du eigentlich erreichen wolltest. Für den Upload von TB in die Box gibt es genug Lösungen im Netz, welche die API von AVM nutzen.

Da ich nur spekulieren kann schildere ich mal meine Situation (man würde sagen: meinen Kundenwunsch):
Ich/wir hatten ein TB auf der Fritzbox, Nummernlisten auf Handgeräten, Kontakte auf Smartphones, E-Mail-adressen in Mailingprogrammen bzw. E-Mails und ab und an versendete FAXe mit Fritz!FAX.
Mein Ziel war es Redundanzfreiheit, Konsistens und Datenqualität zu verbessern.

Wie habe ich es gelöst?
1. Fritz!Fon-Endgeräte, um keine separaten Nummernlisten wie in den alten Gigaset Geräten zu haben
2. Kontakte mit Adressen, Telefonummern und E-Mail-Adressen werden nur noch an einer Stelle in einem CardDAV-Server (bei uns iCloud) geführt und verwaltet. Alle Änderungen finden dort als führende Instanz statt.
3. Die E-Mail-Adressen (eigentlich alle Kontaktdaten) werden von dort z.B. Thunderbird mit dem AddOn CardBook zur Verfügung gestellt (synchronisiert). Hier kann man übrigens auch das Attribut Kategorieren anlegen, was sonst nirgends in der Apple-Welt möglich ist.
4. Einmal nachts (oder wenn man möchte öfters) werden per Script mit Kategorien ausgewählte Namen und Telefonnummern mit carddav2fb_XR als Telefonbuch in die Box hochgeladen.
5. Bei mir wird parallel noch eine dBase-Datei auf dem Speicher der Box abgelegt, in dem die FAX-Nummern für fax4box zu finden sind.

Damit ist mein Schmerz gelöst

Grüße

Black Senator
 
Zuletzt bearbeitet:

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
1,534
Punkte für Reaktionen
34
Punkte
48
Black Senator

So ungefähr, nur dass ich die Daten in der F!B halte.
Meine Idee war aber, dass man, wenn es funktioniert, die Daten nicht über die Oberfläche der F!B anpasst, sondern über eien andere Weboberfläche.

Meine Datenbank ist (im Moment) eine SQLite-Datenbank.
Das gibt es noch? ;-)
 

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Was soll denn die andere Weboberfläche funktional (besser) können?
Was spricht den dagegen, eine schon vorhandene Software für Adresspflege - also einen CardDAV-Server zu verwenden?
Ist der Output der gewünschten Anwendung schon im XML-Format der FB oder anders strukturiert?


Und dBase - ja, warum denn nicht? Läuft doch, und wenn AVM meint, dass deren alte Adressdatei bis heute Verwendung finden soll - warum nicht? Reicht ja aus - da muss man ja nicht mit einer riesigen relationalen DB auffahren nur um ein paar einfache sequenzielle Datensätze vorzuhalten
 

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
1,534
Punkte für Reaktionen
34
Punkte
48
Ein CalDAV-Server für diesen Zweck wäre doch 'etwas' zu groß.


Und beim dBase meine ich nur, dass das doch schon recht alt ist.
Wenn es die Bedingungen erfüllt, ist es doch schön.
Das schreiben mit der mechanischen Schreibmaschine wird ja auch wieder hip :)
 

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Hallo Theo,

ich habe mich in den letzten wochen ein wenig mit der SOAP-Schnittstelle der Fritz!Box beschäftigt.
Hast Du dir das einmal angesehen? Ich könnte mir vorstellen, dass Du mit der Nutzung dieser Schnittstelle eine etwas zeitgemäßere Lösung für die Anbindung der SQLite-DB und Fritz!Box realisieren könntest.

Ressourcen:
Die Bibliothek für meine eigenen Zwecke:
Code:
<?php


class SOApi

{

    private $ip;
    private $user;
    private $password;

   
    public function __construct($ip = 'fritz.box', $user = 'dslf_config', $password = false) {

        $this->ip       = $ip;
        $this->user     = $user;
        $this->password = $password;
    }

   
    public function getSOAPclient() {
   
            $client = new \SoapClient(
                null,
                array(
                    'location'   => "http://".$this->ip.":49000/upnp/control/x_contact",
                    'uri'        => "urn:dslforum-org:service:X_AVM-DE_OnTel:1",
                    'noroot'     => true,
                    'login'      => $this->user,
                    'password'   => $this->password,
                    'trace'      => true,
                    'exceptions' => true
                )
            );
        return $client;
    }

    /*
    GetPhonebook
    The following URL parameters are supported:
    Parameter name    Type          Remarks
    ---------------------------------------------------------------------------------------
    pbid              number        Phonebook ID
    max               number        maximum number of entries in call list, default 999
    sid               hex-string    Session ID for authentication
    timestamp         number        value from timestamp tag, to get the phonebook content
                                    only if last modification was made after this timestamp
    tr064sid          string        Session ID for authentication (obsolete)
    */
    public function getFBphonebook ($Phonebook = 0) {
   
        $client = $this->getSoapClient();
        $result = $client->GetPhonebook(new \SoapParam($Phonebook,"NewPhonebookID"));
        return simplexml_load_file($result['NewPhonebookURL']);
    }

   
    public function getFBphonebooklst () {       // delivers a string of phonebook ID (e.g. "0" or "0,1" or "0,1,2")
   
        $client = $this->getSoapClient();
        return $client->GetPhonebookList();
    }

   
    public function getFBDECThandsetlst () {       // delivers a string of DECT handset ID (e.g. "2,4,5")
   
        $client = $this->getSoapClient();
        return $client->GetDECTHandsetList();
    }
   
   
    public function getFBDECThandsetInfo ($DECTid) {       // delivers an array of DECT handset infos
   
        $client = $this->getSoapClient();
        return $client->GetDECTHandsetInfo(new \SoapParam($DECTid,"NewDectID"));
    }
   
   
}

?>
Für den Upload gibt es leider keine Funktion, um ein komplettes Telefonbuch hochzuladen. Jedoch gibt es die Funktion SetPhonebookEntry um einzelne Einträge (Kontakte) zu ändern oder neu anzulegen (PhonebookEntryID = BLANK). Wenn Du die ID der Einträge mit in deiner SQLite-DB hast, dann brauchts nur die entsprechenden Routinen, um eine saubere Synchronisation zu realisieren.

Grüße

BlackSenator
 
Zuletzt bearbeitet:

Kermit

Neuer User
Mitglied seit
24 Jul 2004
Beiträge
173
Punkte für Reaktionen
0
Punkte
16

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Hallo Theo,

seit Sommer gibt es u.a. ein AVM Update der TR-064 in x_contactSCPD (urn:X_AVM-DE_OnTel-com:serviceId:X_AVM-DE_OnTel1): nun auch mit der Möglichkeit eine TB-Eintrag zu ändern bzw. hinzuzufügen.

2018-06-05 30 New actions: GetPhonebookEntryUID, SetPhonebookEntryUID,
DeletePhonebookEntryUID
Added return codes tables.
Mein PHP-Coding als Beispiel einer Umsetzung findest Du hier.


MfG

Black Senator
 

Kermit

Neuer User
Mitglied seit
24 Jul 2004
Beiträge
173
Punkte für Reaktionen
0
Punkte
16
Zuletzt bearbeitet von einem Moderator:

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Wie starte ich das Script richtig ?
Ich nehme mal an php läuft auf dem Server? Deine Frage impliziert, dass du damit nicht so vertraut bist - richtig? Von daher kann ich nur raten wie weit ich ausholen muss (Genesis oder Neues Testament)

Ich helfe gern - aber frag mal genauer!
 

Kermit

Neuer User
Mitglied seit
24 Jul 2004
Beiträge
173
Punkte für Reaktionen
0
Punkte
16
Zuletzt bearbeitet von einem Moderator:

Black Senator

Neuer User
Mitglied seit
13 Jul 2007
Beiträge
163
Punkte für Reaktionen
11
Punkte
18
Okay, jetzt wird‘s klarer.

Ich bin gar nicht so ein Linux Crack, dass ich jetzt aus dem Stehgreif die Befehle kenne - klingt aber gut.

Ich dachte schon es geht um: „wie starte ich ein Script mit PHP?“

Für einen Hintergrundjob ist das Script noch sehr draft - also error handling und Logging fehlt , damit man mitbekommt falls es abschmiert.
Mir ging es um die technische Machbarkeit und Austesten der SOAP-Schnittstelle über triviale get* Befehle hinaus.

Wenn Dir etwas auffällt, dann mach doch bitte Issues in GitHub auf.

Bin gespannt auf die Praxiserfahrungen

Black Senator


+++ Update +++

Ich habe ein paar kleinere Anpassungen vorgenommen und die Doku ergänzt.
Ich habe es jetzt im Hintergrund auf einem RasbPi (dauer-)laufen.
 
Zuletzt bearbeitet:

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,030
Beiträge
2,018,075
Mitglieder
349,308
Neuestes Mitglied
UweMe