..:: Domotique Store : Le Blog ::..
Box Domotique eeDomus Tous les articles

Piloter sa Freebox Révolution avec une box domotique

FreeboxEtEedomusLa Freebox Révolution, connue des plus ou moins g33ks d’entre nous est une box évoluée et communicante (comprenez par là qu’elle n’est pas limitée à faire modem/routeur et décodeur TV). Pour ceux qui la possèdent (désolé pour les autres), vous avez pu très certainement utiliser les jeux, les fonctions multimédia ou téléchargement, etc… Quid de la domotique ? Et bien venons-y.

Les plus avertis sur la Freebox Révolution savent certainement qu’une API publique existe (et qui a ainsi permis le développement d’applications pour les terminaux Android et iOS). C’est grâce à cette ouverture de la box que je vous propose aujourd’hui un script PHP permettant de contrôler le boitier Server de cette box sans avoir à passer par sa page de configuration.

Quelle utilité vous allez me dire ? Je vous réponds par des exemples tout simples :

  • activer ou désactiver la carte wifi,
  • rebooter le boitier,
  • connaitre sa bande passante, son adresse IP externe,
  • contrôler la luminosité de l’afficheur…

En fait, tout ce que vous pouvez faire depuis les pages de configuration ) est normalement reproductible au travers de mon script. Certes, régler la plage DHCP depuis une box domotique ne sera pas très convivial, voire inutile, mais connaitre le dernier appelant ou éteindre le wifi la nuit (n’est-ce pas Mickaël ? ;-)) pourra être effectué très simplement depuis votre box domotique préférée.

Pré-requis :

Tout cela nécessite deux petits pré-requis :

  • Un serveur web avec PHP 5.x interne au réseau de votre Freebox. En effet, pour des raisons de sécurité et de fonctionnalité, il faut absolument que vous hébergiez vous-même ce script. Vous allez voir que la clé wifi ainsi que toute la configuration de la Freebox sont lisibles facilement avec ce script.
  • Il ne faut pas que votre mot de passe de connexion (à la page https://mafreebox.freebox.fr) commence par le symbole arobase (@). Si tel est le cas, il faut modifier votre mot de passe, sinon vous ne pourrez pas exécuter le script. En fait si, vous pourrez toujours l’exécuter, mais la Freebox vous enverra balader car elle ne le comprendra pas.

Configuration initiale :

Maintenant que vous êtes fin prêts, allons-y.

Le script est divisé en 4 fichiers que vous pouvez retrouver dans mon Github :

Il y a 2 fichiers à éditer. Le premier est mafreebox.cfg. Il faut y renseigner le mot de passe de votre Freebox Révolution.

<?
$config = array (
    'url'     => "https://mafreebox.freebox.fr",        // URL de connexion à la page de configuration
    'user'    => "freebox",                             // Nom de connexion (toujours "freebox")
    'password' => "votremotdepasse"                    // Votre mot de passe de connexion à la page 
    );
?>

Le second est le fichier .htaccess. Comme je vous le disais un peu plus haut, avec ce script vous pouvez voir votre clé wifi en clair (et puis globalement toute la configuration de votre box). Aussi, pour éviter les appels au script par des machines autres que celles que vous souhaitez, il faut indiquer dans ce fichier l’adresse de votre réseau local (le temps du développement par exemple), puis affiner après avec uniquement celle correspondant à votre box domotique (il vous faudra alors supprimer la ligne « Allow from 192.168.0.0/255.255.255.0 » et adapter l’IP de l’autre ligne).

Order Deny,Allow
Deny from all
# Pour autoriser toutes les machines du réseau 192.168.0.0 (par exemple)
Allow from 192.168.0.0/255.255.255.0
# Pour autoriser uniquement la box domotique avec l'IP 192.168.0.16 (par exemple)
Allow from 192.168.0.16/255.255.255.255

Et c’est tout. Placez ces 2 fichiers ainsi que freebox.php et freebox.class.php sur votre serveur web, dans un même dossier. Voyons maintenant à travers 2 exemples comment utiliser ce script.

La lecture d’informations :

Ce script permet de récupérer un nombre élevé de données du boitier Server de la Freebox Révolution. De son adresse IP publique au type de formatage du disque interne en passant par le numéro de série (pratique car cela évite d’aller derrière le boitier essayer de le lire surtout quand elle est dans une baie) ou l’état du téléphone (au repos, sonne, décroché…). Toutes ces données sont regroupées dans des méthodes (= des noeuds dans le fichier XML résultant). Chaque méthode représente généralement l’une des pages de configuration ).

Par exemple, pour accéder à la partie « NAS » de la page configuration, il faudra lire dans le fichier XML les données associées à la méthode « storage.list », « ftp.get_config » pour la partie FTP, etc.

Ces méthodes possédant un titre assez compréhensible, je vous indique toutefois les pages correspondantes afin de vous y retrouver (certaines pages ne possèdent pas de méthode correspondante, j’y travaille) :

    // Nom de méthode ,         // Page sur mafreebox.freebox.fr correspondante
    "conn.status",                 // Connexion Internet / Status
    "conn.wan_adblock_get",     // Connexion Internet / Configuration / Blocage de la publicité
    "conn.wan_ping_get",        // Connexion Internet / Configuration / Réponse au ping
    "conn.remote_access_get",    // Connexion Internet / Configuration / Accès distant
    "conn.proxy_wol_get",        // Connexion Internet / Configuration / Proxy WOL
    "conn.logs",                // Connexion Internet / Historique
    "lan.ip_address_get",        // Réseau local / Identité / Adresse IP
    "fw.lfilter_config_get",    // Réseau local / Contrôle parental / Etat
    "fw.lfilters_get",            // Réseau local / Contrôle parental / Filtres
    "ipv6.config_get",            // Réseau local / IPv6
    "fw.wan_redirs_get",        // Réseau local / Redirections de ports / Simples
    "fw.wan_range_redirs_get",    // Réseau local / Redirections de ports / Plages
    "fw.dmz_get",                // Réseau local / Redirections de ports / DMZ
    "dhcp.status_get",            // Réseau Local / Serveur DHCP / Configuratiion (état du DHCP)
    "dhcp.config_get",            // Réseau Local / Serveur DHCP / Configuration (configuration du DHCP)
    "dhcp.sleases_get",            // Réseau Local / Serveur DHCP / Baux Statiques
    "dhcp.leases_get",            // Réseau Local / Serveur DHCP / Baux Dynamiques
    "igd.config_get",            // Réseau local / UPnP IGD
    "igd.redirs_get",            // Réseau local / UPnP IGD
    "wifi.status_get",            // Wifi / Etat
    "wifi.config_get",            // Wifi / Configuration + Wifi / Réseau personnel sauf / Wifi / Réseau personnel / Stations
    "wifi.stations_get",        // Wifi / Réseau personnel / Stations
    "storage.list",                // NAS / Périphériques
    "storage.disk_get",            // NAS / Périphériques + données internes Freebox
    "ftp.get_config",            // NAS / FTP
    "share.get_config",            // NAS / Partages Windows
    "phone.status",                // Téléphone / Etat
    "phone.calls",                // Téléphone / Journal d'appels  ------------> A tester
    "lcd.brightness_get",        // Divers / Afficheur
    "system.uptime_get",        // Divers / Systeme
    "system.mac_address_get",    // Divers / Systeme
    "system.serial_get",        // Divers / Systeme
    "system.fw_release_get",    // Divers / Systeme
    "download.list",            // Seedbox / Liste
    "download.config_get"        // Seedbox / Configuration

En appelant la page https://IP_serveur_web/chemin/vers/dossier/freebox.php vous obtenez donc des données au format XML. En voici le début :

<?xml version="1.0" encoding="UTF-8"?>
<!--Donnees de la Freebox Revolution - Boitier Server-->
<mafreebox>
<update>2013-05-26 11:37</update>
<conn.status> 
  <type>rfc2684</type>
  <rate_down>1713</rate_down>
  <bytes_up>547482785</bytes_up>
  <rate_up>1749</rate_up>
  <bandwidth_up>925584</bandwidth_up>
  <bandwidth_down>10499320</bandwidth_down>
  <ip_address>1.2.3.4</ip_address>
  <state>up</state>
  <bytes_down>1265517289</bytes_down>
  <media>adsl</media>
</conn.status>

Ainsi, si vous avez bien compris, pour connaitre l’état de votre connexion Internet, affichée sur la page Connexion Internet / Status (valeur Etat de la connexion), il faudra lire dans les données XML, les balises du noeud « conn.status ». L’état de la connexion étant alors la balise « status » (« up » = « connecté » dans notre exemple).

Appliquons maintenant la théorie par l’exemple : je veux être averti par mon Eedomus quand l’espace libre de mon disque interne devient inférieur à 3Go.

La  page contenant l’état des disques durs est NAS / Périphériques, la méthode correspondante « storage.list ». Je recherche donc dans mon fichier XML le noeud <storage.list></storage.list> et j’obtiens « quelques » données :

<storage.list>
    <smart_supported>1</smart_supported>
    <rotation_rate>5400</rotation_rate>
    <model>ST9250311CS</model>
    <smart_enabled>1</smart_enabled>
    <snumber>S2X483E5</snumber>
    <temp_supported>1</temp_supported>
    <firmware>SC16</firmware>
    <drive_ident/>
    <type>internal</type>
    <total_bytes>250059350016</total_bytes>
    <connector>0</connector>
    <table_type>msdos</table_type>
    <idle>0</idle>
    <state_data/>
    <state>enabled</state>
    <internal_bluray>0</internal_bluray>
    <dev_block_count>486328128</dev_block_count>
    <dev_block_size>512</dev_block_size>
    <label>Disque dur</label>
    <str>235,13 GBytes</str>
    <val>235136405504</val>
    <root_free_bytes/>
    <bdev_major>8</bdev_major>
    <phys_block_size>512</phys_block_size>
    <used_bytes>9955094528</used_bytes>
    <str>249,00 GBytes</str>
    <val>249000001536</val>
    <dev_total_bytes/>
    <bdev_minor>2</bdev_minor>
    <fsck_result>no_run_yet</fsck_result>
    <free_bytes>222686408704</free_bytes>
    <source>/</source>
[...]
</storage.list>

L’espace libre (en octets) sur mon disque interne est indiqué par la balise « <free_bytes> ». Le chemin XPath (pour une Eedomus) sera alors /mafreebox/storage.list/free_bytes.

Créons un capteur HTTP :

<

p style= »text-align: center; »>

Petite astuce pour avoir l’espace libre en Go : divisez le résultat du chemin du XPath par 1000000000 😉

NB : Une fréquence de requête à 60mn est suffisante.

Et voilà, les données arrivent immédiatement :

<

p style= »text-align: center; »>

Et sur la page de configuration de la Freebox pour s’assurer qu’on récupère bien la bonne donnée :

Reste plus qu’à faire la règle qui va bien pour nous avertir quand l’espace disque est inférieur à 3Go :

Voilà comment récupérer les données issues du Freebox Server. Alors certes, chaque balise du fichier XML n’est pas documentée et on ne sait pas forcément à quoi elle correspond au premier coup d’œil, mais en s’aidant de la page à laquelle elle se rapporte, son nom est assez explicite pour en déduire sa fonction.

Ce script étant en version 1, il reste encore quelques petits développements pour extraire les données des pages contenant des tableaux (comme l’historique des appels ou de l’état de la ligne).

La commande de la Freebox par une box domotique :

Cette partie là est la plus simple à exploiter. Il suffit d’appeler le script avec le bon paramètre pour effectuer telle ou telle action. Voilà la liste de celles actuellement disponibles :

  • Eteindre la carte wifi : https://IP/freebox.php?do=wifi_off
  • Allumer la carte wifi : https://IP/freebox.php?do=wifi_on
  • Rebooter la box : https://IP/freebox.php?do=reboot
  • Rebooter la box après XX secondes : https://IP/freebox.php?do=reboot&val=XX
  • Régler la luminosité de l’afficheur LCD à XX% : https://IP/freebox.php?do=lcd&val=XX

D’autres actions devraient être intégrées prochainement.

Voyons avec un exemple comment éteindre la carte wifi et la rallumer simplement.

Créons un actionneur HTTP (pour ma part, j’y regrouperai à terme toutes les commandes de la Freebox) :

Complétons l’onglet Valeurs avec les 2 commandes de gestion du wifi :

La carte wifi active (canal 3) :

 La carte wifi désactivée par l’Eedomus :

 

Il ne vous reste plus alors qu’à créer 2 règles pour activer/désactiver la carte wifi en fonction de vos besoins (pour l’éteindre la nuit ou quand vous êtes absents par exemple). C’est la partie la plus simple, aussi, je vous laisse chercher un petit peu ;-).

 

0
0
Fabien

J'ai découvert la domotique un peu par hasard en 2011. J'ai eu l'occasion de tester diverses solutions grand public ou home made. Aujourd'hui ma domotique est basée sur une eedomus avec quelques scripts développés localement.

Laisser un commentaire