Outils pour utilisateurs

Outils du site


Panneau latéral

telephone-voip-gigaset

Mise à jour automatisée de l'annuaire d'un téléphone Gigaset C530 IP

Cette page explique comment mettre à jour l'annuaire d'un téléphone IP Gigaset C530 si l'on utilise un système d'agendas/annuaires synchronisé (protocoles cardav/caldav).

On part du principe qu'on dispose d'une sauvegarde automatisée de nos annuaires au format vcf. Dans le cas présenté, c'est un export de la base de donnée du serveur Davical comme présenté ici.

Installer les dépendances

Ce script utilise un émulateur de navigateur Web qui permet de passer les requête d'un navigateur sans avoir d'interface graphique. C'est une sorte de “simulateur” de navigateur web et ça se nomme xvfb.

Ensuite, on utilise un module python qui permet d'automatiser des requêtes de navigateur, de faire des recherche dans le code d'une page html pour trouver le bon champ, pour le remplir, pour valider, etc… Ça se nomme selenium

Du coup, sous Debian et dérivés, il faut faire :

sudo apt-get install python python-selenium firefoxdriver xvfb

Pour selenium, il se peut que les chemins ne soient pas bons et il faudra surement installer grace à l'outil pip qui permet d'installer des modules pythons.

sudo apt-get install python-pip
pip install python-selenium

Générer un annuaire avec la "bonne" syntaxe

Ces modèles de téléphones n'acceptent qu'un syntaxe bien stricte et surtout, il y a des caractères comme des sauts de lignes assez exotiques. Il faut donc coder ce fichier d'une manière à ce qu'il ressemble strictement au fichier d'export d'annuaire qu'on ferait à partir du téléphone.

C'est la fonction repertoire du script situé sur cette page qui permet de faire cela. Le voici de manière indépendante :

## répertoire de sauvegarde des contacts dans le /home :
SAUV=$HOME/sauvegardes-davical
 
## fichier d'annuaire d'importation pour le téléphone IP :
GIGASET="${SAUV}/repertoire-gigaset.vcf"
 
rm $GIGASET
echo "--> Création du répertoire pour le téléphone Gigaset"
for input in $(ls ${SAUV}/*.csv); do
IFS=,
  tail -n +2 "$input" | while read nom cell home ; do
    echo -ne "BEGIN:VCARD\x0d\x0aVERSION:2.1\x0d\x0aN:${nom};\x0d\x0a";
    if [ ! -z ${home} ] ; then
      echo -ne "TEL;HOME:$(echo ${home} | sed 's/ //g')\x0d\x0a";
    fi
    if [ ! -z ${cell} ] ; then
      echo -ne "TEL;CELL:$(echo ${cell} | sed 's/ //g')\x0d\x0a";
    fi
    echo -ne "END:VCARD\x0d\x0a" ;
  done  >> $GIGASET ;
done

Le script

Il faut renseigner les 3 variables suivantes :

  1. weburl (sans le http:// au début) est l'adresse de l'interface web du téléphone
  2. pinnumber est le numéro à 4 chiffres pour s'authentifier (mot de passe)
  3. vcfile est le chemin vers le fichier d'annuaire généré précédemment.
#!/usr/bin/python
# coding: utf-8
#
 
# Installer : python, python-selenium, chromedriver, xvfb
 
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
 
# On récupère les variables
weburl = "A RENSEIGNER !!!"
pinnumber = "A RENSEIGNER !!!"
vcfile = "A RENSEIGNER !!!"
 
# On initie un navigateur
driver = webdriver.Firefox()
 
# On va à l'adresse de l'interface du Gigaset et on s'authentifie
driver.get("http://" + weburl + "/")
password = driver.find_element_by_id("password")
password.send_keys(pinnumber)
driver.find_element_by_class_name("buttonLink100").click()
 
# On va à la page de gestion des répertoires
driver.get("http://" + weburl + "/settings_phonebook_transfer.html");
 
# On supprime l'ancien répertoire
driver.find_element_by_link_text("Effacer").click();
try:
    wait = WebDriverWait(driver, 20)
    element = wait.until(EC.alert_is_present())
    alert = driver.switch_to_alert();
    alert.accept();
    wait = WebDriverWait(driver, 20)
    element = wait.until(EC.alert_is_present())
    alert = driver.switch_to_alert();
    alert.accept();
except:
    print "no alert"
 
# On renseigne le chemin vers le fichier vcf du nouveau répertoire
elem = driver.find_element_by_xpath("//input[@type='file']");
elem.send_keys(vcfile);
driver.find_element_by_link_text("Transfert").click();
 
# On attend que ça mouline puis on valide le message et on se logout
try:
    wait = WebDriverWait(driver, 600)
    element = wait.until(EC.alert_is_present(),
                                   'Timed out waiting for PA creation ' +
                                   'confirmation popup to appear.')
    alert = driver.switch_to_alert();
    alert.accept();
    driver.get("http://" + weburl + "/logout.html");
except:
    print "no alert"
telephone-voip-gigaset.txt · Dernière modification: 2016/11/16 17:53 (modification externe)