Piloter sa Freebox Révolution avec son eedomus

Partagez ici vos astuces et idées d'utilisation d'eedomus

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar abys » 16 Jan 2014 10:32

Bonjour et félicitation pour cette class php qui m'aide beaucoup
J'ai creer un petit script qui va rechercher sur les pagesjaunes (annuaire inversé) les coordonnées des numeros de téléphones des appels entrant de la freebox, et tout fonctionne correctement.

J'utilise CasperJS et la class php de DjMomo.

L'étape finale est de rajouter les infos collectées et de les enregistrer dans les contacts de la freebox, et la je n'y arrive pas l'erreur suivante apparait :
Code : Tout sélectionner
Array
(
    [msg] => Impossible de créeer cet objet
    [success] =>
    [error_code] => internal_error
)


je ne sais pas d'ou cela peut venir, mais certaines applications que j'ai installer comme freebox compagnon demande a rentrer l'identifiant et le mot de passe de l'admin de la freebox.
Alors si vous avez une idée ce serait sympa merci.

Voici mon script :
Code : Tout sélectionner
<?php
require 'freebox.class.php';

$config = array (
   'url'    => 'http://mafreebox.freebox.fr',
   'port'   => 80,
   'app_id' => 'AnnuaireInverse',
   'app_name' => 'Annuaire inversé',
   'app_version' => '1.0',
    'server_name' => 'Toto'
   );

$freebox = new apifreebox($config);
$call = new Calls_Contacts($freebox);

insertContact($call, "",""); // a enlever
die(); // a enlever


function insertContact($call, $contact,$tel) {

    $newContact['id'] = "0";
    $newContact['display_name'] = "Toto";
    $newContact['first_name'] = "a";
    $newContact['last_name'] = "b";
   
    $r = $call->CreateContact($newContact); // <----- C'est ici que cela ne fonctionne pas
   
    print_r($newContact); // a enlever
    print_r( $r); // a enlever
    die(); // a enlever
   
}

// enleve les doublons TEL
function unique_sort($arrs, $id) {
    $unique_arr = array();
    $ret = array();
    foreach ($arrs AS $k=>$arr) {
        if (!in_array($arr[$id], $unique_arr)) {
            $unique_arr[] = $arr[$id];
            $ret[$k] = $arr;
        }
    }
    sort($ret);
    return $ret;
}
?>
abys
 
Messages : 6
Inscription : 16 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar abys » 16 Jan 2014 10:51

quelques infos en + :

Code : Tout sélectionner
Headers : ["Content-type: application\/x-www-form-urlencoded"]

Params : null

headerSent : false

Retour_curl : "{\"uid\":\"f2db83769113545e7595c18cc8a18bb1\",\"device_name\":\"Freebox Server\",\"api_version\":\"1.1\",\"api_base_url\":\"\\\/api\\\/\",\"device_type\":\"FreeboxServer1,1\"}"

HttpCodes : 200

Headers : ["Content-type: application\/x-www-form-urlencoded"]

Params : null

headerSent : false

Retour_curl : "{\"success\":true,\"result\":{\"status\":\"granted\",\"challenge\":\"eSOwqBuUATZ7umv3cJUqLhNWejSxiTv7\",\"password_salt\":\"kQD7g8YpEnWBa2yrm0E5aUEv7vQIsaTL\"}}"

HttpCodes : 200

Headers : ["Content-type: application\/x-www-form-urlencoded"]

Params : {"app_id":"AnnuaireInverse","app_version":"1.0","password":"4fc6274a6e71ff7531e3db08506dc985d14d7dbb"}

headerSent : "POST \/api\/v1\/login\/session\/ HTTP\/1.1
Host: mafreebox.freebox.fr
Accept: *\/*
Content-type: application\/x-www-form-urlencoded
Content-Length: 102



Retour_curl : "{\"result\":{\"session_token\":\"HKGGMWqHQTRznWl1owaaIPojT1+VQw9P8c0fxEBAX8Tk+Up6ybRMX6l3TzSW1BJY\",\"challenge\":\"eSOwqBuUATZ7umv3cJUqLhNWejSxiTv7\",\"password_salt\":\"kQD7g8YpEnWBa2yrm0E5aUEv7vQIsaTL\",\"permissions\":{\"downloader\":true,\"settings\":true,\"calls\":true,\"explorer\":true,\"contacts\":true,\"parental\":true}},\"success\":true}"

HttpCodes : 200

Headers : ["X-Fbx-App-Auth: HKGGMWqHQTRznWl1owaaIPojT1+VQw9P8c0fxEBAX8Tk+Up6ybRMX6l3TzSW1BJY"]

Params : null

headerSent : false

Retour_curl : "{\"success\":true,\"result\":... LISTE DES NUMEROS DE TEL...}]}"

HttpCodes : 200

Headers : ["X-Fbx-App-Auth: HKGGMWqHQTRznWl1owaaIPojT1+VQw9P8c0fxEBAX8Tk+Up6ybRMX6l3TzSW1BJY"]

Params : {"display_name":"Toto","first_name":"a","last_name":"b"}

headerSent : "POST \/api\/v1\/contact\/ HTTP\/1.1
Host: mafreebox.freebox.fr
Accept: *\/*
X-Fbx-App-Auth: HKGGMWqHQTRznWl1owaaIPojT1+VQw9P8c0fxEBAX8Tk+Up6ybRMX6l3TzSW1BJY
Content-Length: 56
Content-Type: application\/x-www-form-urlencoded

Retour_curl : "{\"msg\":\"Impossible de cr\u00e9er cet objet\",\"success\":false,\"error_code\":\"internal_error\"}"

HttpCodes : 200

abys
 
Messages : 6
Inscription : 16 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 17 Jan 2014 11:54

Bonjour Fabien,

Quand pourras-tu nous mettre en ligne une version PHP corrigée ?
Merci d'avance.
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DjMomo » 18 Jan 2014 20:07

DomotiFred, je refond toute la classe, j'ai quasiment terminé, quelques petites finitions.

abys, pour créer un contact, il te faut passer par la fonction CreateContact comme tu l'as fait
Code : Tout sélectionner
public function CreateContact($array_contact)


Par contre, il ne faut pas indiquer d'id lors de la création d'un contact, c'est la Freebox qui va le fixer, et en réponse à la création de ton contact, elle te retourne la valeur de l'id, cf http://dev.freebox.fr/sdk/os/contacts/#create-a-contact
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar abys » 20 Jan 2014 15:30

visiblement la freebox demande lors de la creation du contact plus d'infos que le firstname et lastname comme dans l'exemple de la doc
il doit y avoir des champs obligatoire !
Alors j'ai renseigné tous les champs et
tout fonctionne a merveille

Merci pour ton aide.
abys
 
Messages : 6
Inscription : 16 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar abys » 21 Jan 2014 13:48

Voici le script complet pour ceux que cela interesse.

http://forum.universfreebox.com/viewtopic.php?t=47366
abys
 
Messages : 6
Inscription : 16 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 21 Jan 2014 13:54

Bonjour Abys,

Merci pour ta contribution :-)
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar abys » 23 Jan 2014 14:35

Désolé j'aurai du le publier ici :

Bonjour,
Ci après vous trouverez une application freeboxOS, composée de 2 scripts permettant d'ajouter les nom, prénoms, adresses, cp, ville,tél des numéros présents dans le journal des appels de la freebox, comme ça plus besoin de les rentrer manuellement (bien entendu si les coordonnées sont dispo sur l'annuaire inversé des pagesjaunes);

Cette application nécessite PHP avec curl, CasperJS et la ClassePhpFreebox de DjMomo.


https://github.com/DjMomo/ClassePhpFreebox
http://casperjs.org/
http://fr2.php.net/downloads.php

Ils ont été testés sur ubuntu, windows XP.
Dans un premier temps l'application doit être executée en local, apres vous pourrez l'utiliser sur un serveur distant.

Ensuite vous pourrez l'utiliser en tache CRON ou lanceur de tache sur XP, tout se fera automatiquement.

C'est une premiere version donc peut etre des améliorations seront necessaire.

Ali

le script PHP : index.php
Code : Tout sélectionner
// Abys 21/01/2014

require 'freebox.class.php';
// A modifier en fonction de votre config
DEFINE('SCRIPT' ,'./includes/casperjs/bin/casperjs annuaire.js');
DEFINE('URL','http://www.pagesjaunes.fr/pagesblanches/aquiestcenumero.do');

$config = array (
   'url'    => 'http://mafreebox.freebox.fr',
   'port'   => 80,
   'app_id' => 'AnnuaireInverse',
   'app_name' => 'Annuaire inversé',
   'app_version' => '1.0',
    'server_name' => 'Abys'
   );

$freebox = new apifreebox($config);
$call = new Calls_Contacts($freebox);

// On recupere la liste des appels
$contacts = $call->GetCallsList();

// et on supprime les doublons
$contacts['result'] = unique_sort($contacts['result'],'number');

// On recherche le tel sur les pagesjaunes
if ($contacts['success'] == 1) {
    foreach ($contacts['result'] as $c => $v) {
        // On nettoie le numero de tel
        $v['number'] =  preg_replace("/^\+33/", "", $v['number']);
        $v['number'] =  preg_replace("/\W|_/", "", $v['number']);

        // On enleve les mobiles
        $ind = substr($v['number'],0,2);
        if ($ind != '06' && $ind != '07' && strlen($v['number']) == 10) {
            // On ne prend que les appels sans contact_id, avec un tel et qui n'a pas deja ete recherché
            if ($v['contact_id'] == 0 && $v['number'] != "" && $v['new'] != true) {
                echo "Tel a rechercher : ".$v['number']."\n";
                echo "URL : ".URL.' '.$v['number']."\n";
               
                // On lance le script CasperJS
                $result = shell_exec(SCRIPT . ' ' . URL . ' ' .$v['number']);
                echo "Résultat de la recherche : $result \n";
               
                // Si on trouve un résultat on l'enregistre dans l'annuaire freebox
                if ($result!="") {
                    insertContact($call, json_decode($result),$v['number']);
                } else {
                // Si pas de résultat dans les pagesjaunes, on flag l'appel pour ne plus le rechercher
                    $call->UpdateCallEntry( $v['id'], array('new'=>true) );
                }
                echo "\n"; // pour la mise en forme
            }
        }
    }
}

function insertContact($call, $contact,$tel) {
    // On recherche la rue, code postal, ville
    preg_match("/(.*)([0-9]{5})([^|]*)/", $contact->street, $matches);
   
    // On créer le contact
    $NomPrenom = explode (' ', $contact->display_name);
    // Si on a 2 occurence, on dispatche dans nom et prénom
    if (count($NomPrenom) == 2) {
        $newContact['last_name'] = $NomPrenom[0];   
        $newContact['first_name'] = $NomPrenom[1];
    } else {
        $newContact['last_name'] = "";   
        $newContact['first_name'] = "";
    }
    // Attention visiblement il y a des limites en nombre de caracteres
    $newContact['display_name'] = substr($contact->display_name,0,64);
    $newContact['company'] = "";
    $newContact['photo_url'] = "";
    $newContact['birthday'] = null;
    $newContact['notes'] = "";
    $newContact['display_name_pretty'] = "";
    $newContact['display_name_pretty_lower'] = "";
   
    // On ajoute le contact
    $result = $call->CreateContact($newContact);
    if ($result['success'] == 1) {
        // On creer le ContactNumber
        $ContactId = $result['result']['id'];
        $ContactTel['contact_id'] = $ContactId;
        $ContactTel['number'] = $tel;
        $ContactTel['type'] = 'fixed';
        $result = $call->CreateContactNumber($ContactTel);
       
        // On creer le ContactAddress
        if ($result['success'] == 1) {
            preg_match("/^([0-9]){0,4}/", $matches[1], $num);

            if (count($num) > 0) {
                $numero = $num[0];
                $matches[1] = str_replace($numero,"",$matches[1]);
            } else {
                $numero = "0";
            }
            $ContactAddress['type']  = 'home';
            $ContactAddress['contact_id']  = $ContactId;
            $ContactAddress['number'] = trim($numero);
            $ContactAddress['street'] = trim($matches[1]);
            $ContactAddress['street2 '] = null;
            $ContactAddress['zipcode'] = trim($matches[2]);
            $ContactAddress['city'] = trim($matches[3]);
            $ContactAddress['country '] = null;

            $result = $call->CreateContactAddress($ContactAddress);
            if ($result['success'] == 1) {
                echo "Contact enregistré avec succès\n";
            } else {
                echo "Erreur impossible de créer l'adresse\n";
            }           
        } else {
            echo "Erreur impossible de créer le téléphone\n";
        }
    } else {
        echo "Erreur impossible de créer le contact\n";
    }
}
// Suppression des doublons dans un array
function unique_sort($arrs, $id) {
    $unique_arr = array();
    $ret = array();
    foreach ($arrs AS $k=>$arr) {
        if (!in_array($arr[$id], $unique_arr)) {
            $unique_arr[] = $arr[$id];
            $ret[$k] = $arr;
        }
    }
    sort($ret);
    return $ret;
}


Le script CasperJS : annuaire.js
Code : Tout sélectionner
// Abys 21/01/2014

var system = require('system');
var utils = require('utils');

var casper = require('casper').create({
    pageSettings: {
        // clientScripts: ['includes/jquery.min.js'],
        javascriptEnabled : true,
        loadImages:  false,
        loadPlugins: true
    },
    logLevel: "debug",
    verbose: false,
    userAgent : 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
});

if (casper.cli.args.length == 2) {
    var page = require('webpage').create();
    var url = casper.cli.get(0);
    var phone = casper.cli.raw.get(1);

    casper.start(url, function() {
        this.fill('form#searchFormAITop', { foneNumber: phone }, false);
        this.click('#btnValidSearch');
        this.wait(2000, function() {
        });
    });

    casper.run(function() {
        if (this.exists('div[class=visitCardContent]')) {
            var oDIVs = this.evaluate(function() {
                return __utils__.findOne('div[class=visitCardContent]').innerHTML;
            });
   
            var coord = new Object();
            this.page.content = oDIVs;
            if (this.exists('h2[class^=titleMain]')) {
                coord.display_name = this.fetchText('h2[class^=titleMain] span:first-child').replace(/(^\s+|\s+$)/g, '');
                if (coord.display_name == "") {
                    coord.display_name = this.fetchText('h2[class^=titleMain] :first-child').replace(/(^\s+|\s+$)/g, '');
                }
            }

            oPs = this.evaluate(function() {
                return __utils__.findOne('p.itemAdresse').innerHTML;
            });
            coord.street  = oPs.replace('\n', '');
            coord.street  = coord.street.replace(/(^\s+|\s+$)/g, '');
            this.echo(JSON.stringify(coord));
        }
        this.exit();
    });


} else {
    casper.echo("Manque d'arguments");
    casper.exit();
}
abys
 
Messages : 6
Inscription : 16 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 05 Fév 2014 14:48

DjMomo a écrit:DomotiFred, je refond toute la classe, j'ai quasiment terminé, quelques petites finitions.

abys, pour créer un contact, il te faut passer par la fonction CreateContact comme tu l'as fait
Code : Tout sélectionner
public function CreateContact($array_contact)


Par contre, il ne faut pas indiquer d'id lors de la création d'un contact, c'est la Freebox qui va le fixer, et en réponse à la création de ton contact, elle te retourne la valeur de l'id, cf http://dev.freebox.fr/sdk/os/contacts/#create-a-contact



Bonjour Fabien,

Je viens aux nouvelles ?
Merci pour nous.

Fred.
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DjMomo » 05 Fév 2014 21:18

Je n'ai pas oublié, je bloque (et je tourne en rond) sur un point particulier. Donc je me change les idées avec autre chose, des fois c'est plus simple d'y revenir à froid.

De toute façon, tu peux utiliser ce qui est déjà publié, c'est exploitable (cf abys) ;-)
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 06 Fév 2014 07:28

Bonjour Damien,

Ben non, justement, ça ne marche pas.
Rappelle-toi de la capture d'écran.
Je remonte bien toutes les infos, mais avant ces infos, il y a plein de lignes d'erreurs.
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 07 Fév 2014 18:00

Bonjour Damien,

Pour en avoir le coeur net, je viens de tout réinstaller sur un nouveau serveur, et c'est toujours pareil, ça ne marche pas :-(
La Freebox me demande bien de valider l'accès à l'appli et ensuite j'ai un beau message d'erreur à l'écran, voir ci-dessous.
Pour info, je suis en :
Windows Server 2012 64 bit avec Apache : 2.4.4 MySQL : 5.6.12 PHP : 5.4.12 PHPMyAdmin : 4.0.4 SqlBuddy : 1.3.3 XDebug : 2.2.3
http://www.wampserver.com/#wampserver-64-bits-php-5-4

EcranErreur.jpg
EcranErreur.jpg (93.62 Kio) Consulté 20897 fois


Et pour info, ma config serveur PHP marche impec avec ton code de vigilance météo.
Dernière édition par DomotiFred le 19 Fév 2014 08:39, édité 1 fois.
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar Madoma73 » 18 Fév 2014 19:13

Salut Fabien,

tu as réussi à avancer sur ta nouvelle classe pour piloter la freebox ?

A+

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DomotiFred » 19 Fév 2014 08:39

+ 1 :-)

Fred.
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra LAN/WIFI en full Ubiquiti Serrure NUKI V1 et V2
DomotiFred
 
Messages : 1330
Inscription : 15 Mars 2013
Localisation : 78

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DjMomo » 19 Fév 2014 22:28

Malheureusement non, un 2e heureux événement est arrivé il y a 10 jours. Donc entre mairie, sécu, caf et nuits courtes, j'ai pas pu terminer. Par contre DomotiFred ta config m'intéresse, je vais la mettre en place sur mon Seven pour débugger plus simplement.
Dernière édition par DjMomo le 19 Fév 2014 22:34, édité 2 fois.
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar Tinto » 19 Fév 2014 22:30

Tu es le deuxieme de ce forum que je félicite aujourd'hui ;-)

Félicitations !

C'est dans un mois chez nous :-)
Tinto
 
Messages : 534
Inscription : 10 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar Rocketlud » 19 Fév 2014 22:40

Félicitations Fabien ;) garçon, fille?

Bon courage pour la dernière ligne droite tinto ;) garçon, fille?
EEDOMUS
7 Fibaro VR, 6 Eversping SM103, 2 Fibaro FGK 101 avec capteur temp, Prise Eversping avec energie, 1 Fibaro Dimmer, 3 wallplug, 2 fibaro fgs 221, teleinfo usb, nabaztag v2,Server Proliant N54L avec Xpenology, Raspberry Pi B
Rocketlud
 
Messages : 652
Inscription : 15 Fév 2013
Localisation : Picardie

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar Tinto » 19 Fév 2014 23:01

Deuxième garçon pour moi ^^
Tinto
 
Messages : 534
Inscription : 10 Jan 2014

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar DjMomo » 20 Fév 2014 06:32

Tinto a écrit:Deuxième garçon pour moi ^^


Tout pareil. Félicitations Tinto.
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Piloter sa Freebox Révolution avec son eedomus

Messagepar Rocketlud » 20 Fév 2014 07:12

DjMomo a écrit:
Tinto a écrit:Deuxième garçon pour moi ^^


Tout pareil. Félicitations Tinto.


Pour moi aussi;) LOL mais il son deja un peu plus grand ;)
EEDOMUS
7 Fibaro VR, 6 Eversping SM103, 2 Fibaro FGK 101 avec capteur temp, Prise Eversping avec energie, 1 Fibaro Dimmer, 3 wallplug, 2 fibaro fgs 221, teleinfo usb, nabaztag v2,Server Proliant N54L avec Xpenology, Raspberry Pi B
Rocketlud
 
Messages : 652
Inscription : 15 Fév 2013
Localisation : Picardie

PrécédentSuivant

Retour vers Mes usages

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 17 invité(s)