Bonjour,
[edit du 29/11/11 : mise à jour du script suite au conseil de BFG]
Le besoin :
Avoir la possibilité de désactiver et désactiver le Wifi de ma Freebox v6 (dite 'revolution') à des horaires définis, et ceci sans intervention humaine.
Le but :
Le but est de définir des plages horaires où le Wifi sera actif, le reste du temps il sera coupé.
Je ne m'étendrais pas sur la motivation d'une telle démarche : pour moi, c'est une simple règle de bon sens, tout comme on éteint la lumière en partant...
Comment :
Le script reçoit 1 seul paramètre qui peut être : [on, off, status]
Le but est d'appeler ce script depuis la crontab pour activer/désactiver le wifi selon le besoin.
Un élément de mon réseau local (un NAS en l'occurence) enverra les ordres d'activation/désactivation du Wifi à la Freebox. J'ai donc placé ce script et configuré la crontab du NAS à ma convenance.
Le script utilise curl pour envoyer les ordres au serveur web interne de la Freebox comme si un utilisateur s'y connectait et changeait l'état de la connexion Wifi sur la page dédiée.
La seule adaptation nécessaire est le mot de passe (cf. fbxPasswd) qui doit être modifié pour y mettre celui correspondant à votre Freebox. J'utilise le canal 9 (channel=9) et 20MHz (ht_mode=20) de largeur de bande : à adapter éventuellement.
Le script retourne 1 si le Wifi est activé, 0 sinon.
Divers :
Bien évidemment, une intervention manuelle sur le menu tactile du Freebox Server ou via l'interface web http://mafreebox.freebox.fr est toujours possible pour forcer l'état. De même qu'il est évident que l'élément envoyant les ordres à la Freebox doit être relié filairement à cette dernière...
Remarque :
Sur la commande 'status', je suis pollué par le code html retourné par le serveur, j'aurais juste aimé n'avoir que ma trace "Freebox Wifi is XX". 'option curl --silent n'y fait rien. Des idées ?
Exemple de crontab :
e.g. Wifi activé tous les jours de 7h30 à 8h30 et de 17h30 à 22h00 uniquement.
30 7 * * * /chemin/script/fbxWifi.sh on
30 8 * * * /chemin/script/fbxWifi.sh off
30 17 * * * /chemin/script/fbxWifi.sh on
00 22 * * * /chemin/script/fbxWifi.sh off
Le script :
#!/bin/bash
fbxLogin='freebox'
fbxPasswd='monMotDePasse'
fbxCookieFile="/tmp/fbxCookie.txt"
fbxLogin() {
curl --cookie-jar $fbxCookieFile -s -o /dev/null -L "http://mafreebox.freebox.fr/login.php?login=$fbxLogin&passwd=$fbxPasswd"
if [ $? -ne 0 ]; then
echo "Login to Freebox failed!"
exit 0
fi
}
fbxLogout() {
curl -b $fbxCookieFile -s -o /dev/null -L 'http://mafreebox.freebox.fr/login.php?logout=1'
rm -f $fbxCookieFile
if [ $? -ne 0 ]; then
echo "Logout of Freebox failed!"
fi
}
wifiOn() {
fbxLogin
curl -b $fbxCookieFile -s -o /dev/null -d 'enabled=on&channel=9&ht_mode=20&method=wifi.ap_params_set&config=Valider' -H "X-Requested-With: XMLHttpRequest" -L 'http://mafreebox.freebox.fr/wifi.cgi'
# | w3m -dump -T text/html
if [ $? -ne 0 ]; then
echo "Setting Freebox wifi ON failed!"
fi
fbxLogout
}
wifiOff() {
fbxLogin
curl -b $fbxCookieFile -s -o /dev/null -d 'channel=9&ht_mode=20&method=wifi.ap_params_set&config=Valider' -H "X-Requested-With: XMLHttpRequest" -L 'http://mafreebox.freebox.fr/wifi.cgi'
# | w3m -dump -T text/html
if [ $? -ne 0 ]; then
echo "Setting Freebox wifi OFF failed!"
fi
fbxLogout
}
wifiStatus() {
fbxLogin
checked=$(curl -b $fbxCookieFile -s -L 'http://mafreebox.freebox.fr/settings.php?page=wifi_conf' | grep '<input type="checkbox" name="enabled" checked />')
rc=0
if [ "$checked" != "" ]; then
echo "Freebox Wifi is ON"
rc=1
else
echo "Freebox Wifi is OFF"
fi
fbxLogout
exit $rc
}
case "$1" in
on)
wifiOn
exit 1
;;
off)
wifiOff
exit 0
;;
status)
wifiStatus
exit $?
;;
*)
echo "Usage: $0 {on|off|status}"
exit 0
esac
exit 0
# Au dodo
Posté par papap . Évalué à 4.
Ca c'est pour les ados qui ne veulent pas se coucher...
[^] # Re: Au dodo
Posté par Old Geek . Évalué à 3.
pas grave l'ado il se branche sur le freewifi du voisin ...
[^] # Re: Au dodo
Posté par skimpax . Évalué à 1.
Cette crontab n'est qu'un exemple et n'est pas la mienne. Cependant, effectivement, je ferme le tuyau à 22h : mes enfants n'étant pas encore ados, je m'auto-censure en coupant à 22h ;-)
# curl -o
Posté par BFG . Évalué à 3.
Il faut utiliser
curl -o /dev/null --silent
(-o /dev/null enregistre la réponse du serveur dans /dev/null, et --silent désactive les informations comme la barre de progression).[^] # Re: curl -o
Posté par skimpax . Évalué à 1.
Merci pour le tuyau, j'essaierai dès ce soir...
[^] # Re: curl -o
Posté par skimpax . Évalué à 1.
Après mise à jour du script, cela fonctionne parfaitement maintenant : plus aucune pollution sur le stdout.
Le script présenté en première page été mis à jour avec les dernières modifications.
BFG, merci pour le tuyau :-)
# Merci
Posté par kaulian (site web personnel) . Évalué à 1.
Dormant pas loin de ma freebox, je trouve cette idée pas mal
# V5
Posté par Strash . Évalué à 3.
Il n'y a pas moyen de faire la même chose sur une Freebox V5 ?
Le fait de devoir passer par la page web d'administation + redémarrage de la Freebox m'amène à ne jamais couper le Wifi, juste pour ne pas avoir à galérer lorsque je met à jour mes programmes sur mon téléphone Android (1 fois par mois...).
# égoïste!!!!!
Posté par fearan . Évalué à 2.
Et comment je fais moi pour accéder au freewifi pour mouler sur DLFP ?
accessoirement j'ai une vrai question : ça consomme et ça émet vraiment un wifi non utilisé ? J'ai pas remarqué de différence notable sur la conso de mon portable selon que le wifi est activé ou pas (je suis en filaire, mais par défaut il est activé au démarrage)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: égoïste!!!!!
Posté par skimpax . Évalué à 2.
Le Wifi, de part sa conception radio n'est pas des plus économe : il n'a pas été conçu initialement pour de l'embarqué.
Un palliatif a été de corriger cela au niveau logiciel, avec gestion de la mise en ville du wifi si non utilisé (si aucun trafic envoyé).
Bref, le wifi est plus dédié à un 'dongle', sous entendu qu'il y a un équipent derrière avec une batterie d'une certaine capacité déjà (ex. un ordinateur portable) et non pas une batterie de très petite capacité, type téléphone mobile.
C'est en cela surtout que les techno radio de téléphonie mobile sont bien meilleures : elles ont directement été pensées pour une utilisation nomade, avec une petite batterie.
Par exemple, la radio 4G LTE est encore optimisée par rapport à la 3G, notamment en 'uplink'.
Sur un ordinateur portable, si il y a beaucoup de trafic (eg nombreux téléchargements), alors la consommation du wifi sera non négligeable. A contrario, si le wifi est peu utilisé et que la gestion d'énergie du wifi est activée, cela ne devrait pas être sensible.
[^] # Re: égoïste!!!!!
Posté par fearan . Évalué à 2.
Ok donc aucun problème si je veux laisser mon freewifi ouvert, si y a personne dessus ça consomme peu ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
# Bravo et merci !!
Posté par Dan . Évalué à 2.
Génial ! Ça fait un moment que je voulais un truc du genre.
Je suis d'ailleurs en train d'écrire une application Android utilisant cette interface mafreebox pour faire la même chose, et tu m'as donné l'option qui me manquait : "X-Requested-With: XMLHttpRequest".
Si ça intéresse des gens, je devrais rendre ça disponible sous peu (reste à rendre l'interface moins moche)
Encore merci !
[^] # Re: Bravo et merci !!
Posté par steph1978 . Évalué à 2.
J'ai loupé un truc.
Tu veux allumer le wifi de la freebox avec un téléphone android... pas connecté sur le wifi de la freebox car éteint ?
Même 'pas moche', j'ai un doute.
[^] # Re: Bravo et merci !!
Posté par Dan . Évalué à 0.
C'est pas "je veux", c'est "ça marche déjà".
Dans son post initial, Skimpax utilise http://mafreebox.freebox.fr/ qui permet d'accéder à sa Freebox en local. En activant l'accès distant (Connexion Internet => Configuration => Accès distant), on accède au serveur en rempaçant mafreebox.freebox.fr par son IP (ou son nom de domaine si on en a un).
Donc changer l'état du WiFi revient simplement à un post http effectué à l'adresse de sa Freebox.
[^] # Re: Bravo et merci !!
Posté par steph1978 . Évalué à 1.
oui mais en FILAIRE.
mafreebox.freebox.fr n'est accessible que depuis le réseau local.
donc activer le wifi éteint par le wifi est un non sens.
[^] # Re: Bravo et merci !!
Posté par Dan . Évalué à -1.
Je ne comprends pas ce que tu ne comprends pas.
Il n'y a ni filaire, ni wifi ni réseau local. Tout ça c'est pour l'accès à mafreebox.freebox.fr.
Or, on peut rendre accessible cette page à l'extérieur. La nouvelle adresse d'accès est l'adresse IP de la Freebox. Ce n'est rien de plus que du routage.
En local :
mafreebox.freebox.fr correspond à 192.168.0.254 (adresse de la Freebox par défaut)
Puis, quand on active le réseau distant :
l'adresse IP de la connexion est routée par défaut sur le port 80 (part défaut) sur 192.168.0.254.
Bref, ce n'est rien de plus qu'un accès à une page Web.
PS : je viens d'activer mon réseau WiFi avec mon téléphone en passant par la 3G.
[^] # Re: Bravo et merci !!
Posté par steph1978 . Évalué à 3.
mafreebox.freebox.fr est un hôte local, il change en fonction de la ligne depuis laquelle tu y accèdes. Il ne résout pas en dehors de chez toi.
Tu as activé le wifi en 3G certainement par la console client "subscribe.free.fr" ce qui ne correspond pas vraiment au post en cours.
[^] # Re: Bravo et merci !!
Posté par Dan . Évalué à 1.
Voici en gros à peu près la ligne d'accès au script (posté tel quel on se fera bien sûr jeter si on ne se connecte pas en gardant le cookie).
HttpPost httppostWifiConf = new HttpPost("http://" + IP + "/wifi.cgi?");
Oui mafreebox.freebox.fr est un hôte local.
En revanche, mon adresse IP est 82.xxx.xx.xxx, et si je tape :
http://82.xxx.xx.xxx magie du réseau, cela tente d'accéder à mon routeur (ici ma Freebox).
Et là, magie de la Freebox, celle-ci a un bien un service qui tourne : le même que mafreebox.freebox.fr qui n'est qu'un nom de domaine local vers ce service.
Bref, ça fait 3 fois que j'écris la même chose, je t'invite à lire :
http://www.freenews.fr/spip.php?article10656
# Widget KDE (Plasmoid) pour piloter la freebow
Posté par vicnet . Évalué à 0.
Grâce à ce script légèrement retouché (il n'accepte pas les mots de passe avec des caractères spéciaux, et exit 0/1 inversé par rapport au besoin), j'ai utilisé Service Monitor pour afficher des icônes sur le bureau, qui ouvre ou non le wifi ainsi que le contrôle parental.
C'est super pratique.
Donc un grand merci pour le partage.
Vicnet
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.