Jump to content

Archived

This topic is now archived and is closed to further replies.

wanou

Tutoriel: Reconnection automatique de freebox

Recommended Posts

Je cherche à réaliser soit un script shell, soit un script en perl qui sera appelé par cron tous les 1/4 d'heure pour réaliser un ping sur ma connection internet.

Si le ping ne donne pas de résultat, un message est envoyé sur le port série et un montage électronique que je prépare réalise un arrêt/marche de la freebox.

j'ai trouvé comment faire un seul ping mais je ne vois pas comment analyser la réponse de ping (je pense qu'il faut utiliser un pipe avec grep mais je bute sur le test):reflechis:

En ce qui concerne le port série, j'ai réussi à configurer correctement la vitesse et à envoyer le message de test donc pas de problème de ce côté là.

Merci par avance. :transpi:

Mise à jour:

Vous trouverez dans ce topic:

1) comment fabriquer très façilement un rebooteur de freebox:

Ma freebox est une version 2 et il se trouve qu'elle perd la synchronisation de temps à autre.

C'est pour cette raison que je me suis lancé dans la réalisation de cela.

2)un script bash permettant s'il est appelé toutes les minutes par cron de vérifier l'état d'une connexion réseau et qui écrit dans un fichier journal les dates et durées de coupures s'il y en a.

Link to post
Share on other sites

c'est vrai que sans cahier des charges complet, c'est pas facile :francais:

OK, voici le résultat du ping -c 1 -w 2 -r -q ww.xx.yy.zz (l'adresse de l'ordinateur du provider):

dans ce qui suit, aa.bb.cc.dd est mon adresse ip.

Si liaison ok:

PING ww.xx.yy.zz (ww.xx.yy.zz) from aa.bb.cc.dd : 56(84) bytes of data.

--- ww.xx.yy.zz ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 28.348/28.348/28.348/0.000 ms

Si liaison ko:

PING ww.xx.yy.zz (ww.xx.yy.zz) from aa.bb.cc.dd : 56(84) bytes of data.

--- ww.xx.yy.zz ping statistics ---
2 packets transmitted, 0 received, +1 errors, 100% loss, time 1013ms

Si la liaison est ko, j'envoie AT+REBOOT sur le port série (avec retour chariot).

là, un

echo "AT+REBOOT" > /dev/cua0

devrait faire l'affaire.

Je pense qu'il faut chopper le motif "% loss" et récupérer le chiffre devant.

Link to post
Share on other sites

je te sors le truc vite fait, là je peux pas tester mais un truc du genre

while true

do

if ! (ping -c 1 ww.xx.yy.zz )

then echo "AT+REBOOT'\n' >> /dev/cuao"

fi

sleep 30

done

explication :

-la commande ping retourne -1 ( ou false ) lorsque qu'elle ne s'execute pas correctement ;-)

- while true permet de créer une boucle infinie ;-) donc, ne pas oublier le sleep 30

donc en algo ca donnerait

tant que vrai = vrai

si ping -c 1 ww.xx.yy.zz est faux

alors afficher "AT+REBOOT'\n' >> /dev/cuao"

finsi

attendre 30 secondes

fin tantque

edit : petite modif a laquelle j'ai pensé pendant que je mangeais ;-)

Link to post
Share on other sites

par contre, j'ai beau chercher dans le man de bash et faire des help,

je ne vois pas comment ajouter une variable d'environnement.

sur un shell cmd.exe, il suffit de faire un "SET MA_VARIABLE=la_valeur"

mais là, je ne vois pas :chinois:

en plus, je cherche à donner comme contenu à cette variable, le résultat de la ligne suivante qui me donne automatiquement l'adresse ip de la machine distante:

arp -eni eth1 | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"

si je fait une redirrection, cela ne marche qu'avec un fichier et pas une variable.

quelqu'un à une idée?

Link to post
Share on other sites

pour définir des variables d'environnement :

export TEST="TEST"

ou bien

env TEST="TEST"

aprés je sais pas comment définir le résultat de ta commande en variable d'environnement, faudrait faire qques test ou alors viens sur le forum linux et viens dans le linux bar poser ta question

Link to post
Share on other sites

J'ai posé la question dans le linux bar, tuXXX et gauret ont eu la gentillesse de me donner l'info. :transpi:

J'ai également buté sur un autre problème que j'ai résolut moi-même:

j'avait appelé l'utilitaire arp dans mon scripte pour récupérer automatiquement l'adresse ip de la machine connectée de l'autre côté de la liaison adsl et cela ne fonctionnait pas quand le script était appelé par cron en mode non interractif.

Le path semble ne pas exister en mode non interractif ce qui m'à obligé à écrire le chemin complet: /sbin/arp

voici donc mon script temporaire car la fonction reboot ne sera implémentée qu'après la finalisation de la carte électronique que je prépare.

#test de la liaison adsl lancé toutes les 10 minutes par cron
#configuration de la vitesse de com de l'uart a 38400bps
stty -F /dev/cua0 ispeed 38400 ospeed 38400

#effacement de l'ecran et ecriture de la date en 1ere ligne (16 cars par ligne)
echo -n -e "\011" > /dev/cua0
date +%e/%m/%Y\ %Hh%M > /dev/cua0

#passage en 2eme ligne pour écrire la suite
echo -n -e "\010\300" > /dev/cua0

#obtention de l'adresse ip distante sur l'interface reseaux eth1
#la première adresse IP trouvée est celle du routeur de chez free
DIST_IP=$(/sbin/arp -eni eth1 | grep -Em 1 -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')

#on récupère l'état du service au dernier ping
#si le fichier n'existe pas encore, on pare du principe que la liaison est
#bonne
if !(test -s /root/etat_adsl)
then
   ETAT_SERVICE="OK"
else    
   ETAT_SERVICE=$(cat /root/etat_adsl)
fi    

#préparation du fichier log si c'est la première utilisation
if !(test -s /root/adsl.log)
then
   echo "Suivit de l'état de la connection adsl" > /root/adsl.log
fi    

#test par ping: l'option -w permet de reduire le time-out a 2 secondes
#pour eviter que le test s'eternise en cas de liaison KO
if !(ping -r -c 1 -w 2 -q $DIST_IP > /dev/nul)
then
   echo -n -e "ADSL KO         " > /dev/cua0
   #si le service vient de s'arrêter, on écrit l'heure dans le log
   if [ $ETAT_SERVICE == "OK" ]
   then
   	echo -n "service non disponible:" >> /root/adsl.log
   	date +%e/%m/%y\ %Hh%M >> /root/adsl.log
   	echo -n "KO" > /root/etat_adsl
   fi
else
   echo -n -e "ADSL OK         " > /dev/cua0
   #si le service vient de reprendre, on l'écrit dans le log avec l'heure
   if [ $ETAT_SERVICE == "KO" ]
   then
   	echo -n "reprise du service internet:" >> /root/adsl.log
date +%e/%m/%y\ %Hh%M >> /root/adsl.log
   	echo -n "OK" > /root/etat_adsl
   fi	
fi

vos commentaires sont les bien venus :fou:

Link to post
Share on other sites

oyez, oyez, braves gens, le montage avance!

J'ai opté pour la modif d'un matériel existants plutôt que pour la création à partir de 0 d'une prise commandée par port série.

J'ai trouvé tout ce qu'il faut sur le catalogue sélectronic (ils font de la VPC aussi).

C'est de la pub gratos mais j'ai pas vraiment le choix.

Voici la liste des choses les plus importantes à obtenir avec la référence sélectronic correspondante:

prise télécommandée sans fil: 50.0151-2 (l'unité 8,9 euros ttc).

20cm de fil type KY30-04: 50.9635-10 (pour 10m, 2 euros ttc).

6cm de gaine thermo-rétractable diamètre 9,5mm: 50.9558 (pour 1m, 4,5 euros ttc).

un bout de plaque d'essai pastillée 3 de larges 10 pastilles de longueur: 50.3188 (50*100mm, 2 euros ttc).

un opto-coupleur cny17-2 ou équivalent: 50.7934 (0,4 euros ttc).

pour ceux qui ne peuvent pas mettre la main sur un cny17-2: il est IMPERATIF que l'opto-coupleur tienne AU MOINS 3750V d'isolation et il faut un taux de transfert en courant de 80% mini.

1 condensateur chimique radial 100µF 10V: 50.6735-2 (lot de 2, 0,4 euros ttc).

une résistance de 1kilo ohm: 50.4562-10 (lot de 10, 0,6 euros ttc).

une diode 1N4148: 50.3992-10 (lot de 10, 0,5 euros ttc).

total: 19,3 euros.

et pour finir: Un fil de souris série (les vieilles souris série ne manquent pas), avec sa prise sub-d 9 broches.

Il vous faudra bien sur posséder le petit matériel de base:

-> fer à souder à pointe fine

-> soudure de diamètre 0,5mm maximum (perso c'est du 0,35mm)

-> de la tresse à déssouder de bonne qualité (ex: soder-wick 1,5mm 50.9293-:transpi:, et de largeur 2mm maximum (sinon, stress des pistes assuré)

-> un briquet ou un sèche-cheveux pour la gaine termo-rétractable.

-> un tournevis cruciforme et un tournevis plat à embout

suite au prochain épisode.

(modif du 17/01/05: la référence de l'opto-coupleur à été corrigée)

Link to post
Share on other sites

Juste pour savoir, un reboot freebox ça s'opère comment (à part en débranchant/rebranchant la bête ?)

Parce que je pensais que puisque la freebox fait tourner un linux (en gros) on pourrait se servir de la connection la reliant nativement au pc (USB ou Ethernet) pour la rebooter. Vous comprenez ? :transpi:

Par contre, le problème majeur doit être de trouver de la doc relative à la freebox et de savoir si elle accepterait un signal de reboot distant...

Enfin je dis peut-être des grosses bêtises :-D

Link to post
Share on other sites

première étape: ouverture et modif de la prise commandée.

prise.jpg

il faut se munir d'un tournevis cruxiforme et d'un tournevis plat spécial dotté d'un creux dans la méplat pour les vis de sécurité (on peut dire aussi à la con).

Il est assez facile de créer soi-même le tournevis en question avec un vieux tournevis plat et une lime:

vis.jpg

après ouverture, il faut réaliser quelques modifs sur la carte:

modifs.jpg

detail_modifs.jpg

1 - en Bleu: couper la piste qui vient du circuit intégré vers la led.

2 - en Vert: ponter la led vers la sortie 5V du 78L05.

3 - en Rouge: désouder C13 et souder en lieu et place 2 fils de 4cm.

voici ce que cela donne côté composants:

ajout_fils.jpg

rendez vous au prochain épisode pour la préparation de la carte ajoutée

Link to post
Share on other sites
Juste pour savoir, un reboot freebox ça s'opère comment (à part en débranchant/rebranchant la bête ?)

Parce que je pensais que puisque la freebox fait tourner un linux (en gros) on pourrait se servir de la connection la reliant nativement au pc (USB ou Ethernet) pour la rebooter. Vous comprenez ? :-D

Par contre, le problème majeur doit être de trouver de la doc relative à la freebox et de savoir si elle accepterait un signal de reboot distant...

Enfin je dis peut-être des grosses bêtises :censored:

nonas -> la solution du reboot par la prise électrique est la seule que je connaisse personellement et cela fonctionne bien.

Etant électronicien de proffession, cette solution est très simple pour moi. :roll:

Si tu as des infos pour le faire autrement, je pense que pas mal de monde est intéressé. :chinois:

Link to post
Share on other sites
nonas -> la solution du reboot par la prise électrique est la seule que je connaisse personellement et cela fonctionne bien.

Etant électronicien de proffession, cette solution est très simple pour moi. :8

Si tu as des infos pour le faire autrement, je pense que pas mal de monde est intéressé.  :chinois:

Donc en gros le montage en question ici écoute le port série et si besoin est, fait un reboot électrique de la freebox ? (il coupe le jus quoi :roll: )

Non désolé, j'ai pas d'infos là-dessus, c'est juste une idée qui me passait par la tête. :-D

Nonas : Avec la prise télécommandée peut être ?

C'est clair que ce serait cool le ssh sur la freebox, mais ils ne veulent peut être pas qu'on tripote là dedans.

C'est vrai que le ssh sur la freebox ça pourrait être sympa mais en effet ça doit pas être dans l'intérêt de Free de documenter la bestiole... :censored:

Link to post
Share on other sites

deuxième étape: préparation de la carte qui reçevra l'opto-coupleur.

la plaque neuve:

plaque_neuve.jpg

Il vas falloir en retirer un bout de 3 pastilles sur 10 en coupant avec un cutter.

commencer par tracer la découpe en utilisant le côté tranchant de la lame:

coupure_1.jpg

puis utiliser le bord non tranchant du cutter comme ceci:

cutter.jpg

pour obtenir un meilleur résultat et une lame non abimée:

coupure_2.jpg

une fois l'opération menée correctement sur les deux faces (une bonne profondeur des sillons est requise), on peut terminer la travail à la main ou à l'aide d'une pince plate en tordant la plaque sur le sillon.

normalement la plaque se déchire sans forcer suivant le tracé:

coupure_3.jpg

Il faut maintenant enlever quelques pastilles pour assurer une isolation galvanique conforme à la norme IEC1010.

Pour décoller les pastilles:

-> prendre un fer à souder et le faire chauffer au max (400° min pour les fers thermostatés).

-> pour chaque pastille, planter la pointe du fer dans le trou de la pastille pendant 1 seconde (pas plus), en appuyant légèrement.

Voila le résultat:

coupure_4.jpg

la suite demain si tout vas bien. :-D

Link to post
Share on other sites

Episode 3:

Une petite étude du schéma qui suit montre l'extrème complexité du problème et donne une idée du nombre d'heures passées à créer cette merveille! :non:

schema.jpg

montage des composants sur la cartelette

- La capacité peut être montée verticalement si c'est une 6,3V sinon, il faudra la monter couchée.

Dépasser 10V pour la capacité augmentera la place occupée et rendra impossible la mise en boîte.

- La résistance est montée à la japonaise c'est à dire verticalement.

- La diode est montée également verticalement (j'ai utilisé une led pour me permettre de valider le concept).

voila ce que cela donne:

cote_composants.jpg

et

cote_pistes.jpg

on peut en suite:

1 - souder les fils venants de la prise.

2 - placer 5cm de gaine thermo-rétractable le long du cordon série.

3 - souder les deux fils qui viennent de la prise sub-D.

4 - placer la gaine au niveau du montage (la gaine doit dépasser pas mal du côté prise série).

5 - faire se rétracter la gaine avec de préférence un sèche cheveux ou un décapeur thermique.

Pour les adeptes du briquet: ne pas approcher la flame trop près de la gaine, il faut donc avoir le briquet à côté de le gaine et pas en dessous. :non:

un petit rappel: PAS DE SCOTCH D'ELECTRICIEN à la place de la gaine thermo.

on obtient cela:

gaine_thermo.jpg

préparation du trou pour passer le fil série

L'instrument idéal pour cela est une lime queue de rat.

Si vous n'êtes pas l'heureux possesseur ce cet outils, essayez dans l'ordre:

- une autre lime.

- un cutter (bon courrage ;)).

- le fer à souder (très sale mais ça marche :D ).

La gaine thermo rétractable doit dépasser et vas être poincée, ne pas oublier donc de donner un coup de lime à plat autour du trou (léger quand même).

et voila le travail!

detail_trou.jpg

Montage final

si tout c'est bien passé, la longeur de la cartelette et des composants qui dépassent un peu ne doit pas dépasser l'espace entre la diode et le bord du boitier.

il ne reste plus qu'à refermer le tout (la gaine thermo doit être pincée, c'est important pour la tenue mécanique et pour l'isolation).

il faut impérativement remettre les 4 vis donc les deux vis bizzares.

final.jpg

Un petit plus pour ceux qui peuvent avoir à leur disposition un testeur d'isolement (appelé également mégommètre ou gigommètre):

- prendre une fiche sub-d mâle.

- souder ensemble les neufs points de la fiche sub-d mâle.

- connecter cette prise au câble série de notre montage.

- mesurer la résistance entre le côté série (les neufs points en même temps donc), et les deux plots de la prise mâle secteur.

- la mesure doit se faire en calibre 500V ou 1000V et doit donner au moins 4 méghom.

On peut également utiliser un diélectrimètre (le top), et mesurer le courant de fuite à 3750V alternatif pendant 1 minute: il ne doit pas dépasser 1mA.

Pour ceux qui ne possèdent pas tous ceci, si vous avez réspecté les consignes, tout se passera bien :chinois: .

Rendez vous au prochain épisode pour la partie logicielle.

Link to post
Share on other sites

Episode 4

voici mon script modifié:

#test de la liaison adsl lance toutes les 10 minutes par cron
#configuration de la vitesse de com de l'uart a 300bps
stty -F /dev/cua0 ispeed 300 ospeed 300

#obtention de l'adresse ip distante sur l'interface reseaux eth1
#la première adresse IP trouvée est celle du routeur de chez free
DIST_IP=$(/sbin/arp -eni eth1 | grep -Em 1 -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')

#on récupère l'état du service au dernier ping
#si le fichier n'existe pas encore, on part du principe que la liaison est
#bonne
if !(test -s /root/etat_adsl)
then
   ETAT_SERVICE="OK"
else    
   ETAT_SERVICE=$(cat /root/etat_adsl)
fi    

#préparation du fichier log si c'est la première utilisation
if !(test -s /root/adsl.log)
then
   echo "Suivit de l'état de la connection adsl" > /root/adsl.log
fi    

#test par ping: l'option -w permet de reduire le time-out a 2 secondes
#pour eviter que le test s'eternise en cas de liaison KO
if !(ping -r -c 1 -w 2 -q $DIST_IP > /dev/nul)
then
   #si le service vient de s'arrêter, on écrit l'heure dans le log
   if [ $ETAT_SERVICE == "OK" ]
   then
   	echo -n "service non disponible:" >> /root/adsl.log
   	date +%e/%m/%y\ %Hh%M >> /root/adsl.log
   	echo -n "KO" > /root/etat_adsl
   fi
  #on envoie pleins de caractères espace, ce qui éteint la prise de courant
   echo  "  reboot de la freebox" >> /root/adsl.log
   echo "                                                             " > /dev/cua0

else
   #si le service vient de reprendre, on l'écrit dans le log avec l'heure
   if [ $ETAT_SERVICE == "KO" ]
   then
   	echo -n "reprise du service internet:" >> /root/adsl.log
date +%e/%m/%y\ %Hh%M >> /root/adsl.log
   	echo -n "OK" > /root/etat_adsl
   fi	
fi

et voila, en cas d'absence de réponse au ping, votre freebox redémarre.

Un dernier conseil pour finir: la durée entre deux appels successifs du script ne doit pas être inferieure à la durée max d'établissement de la connection par la freebox.

Les mises à jour prennent un peu de temps, c'est pourquoi j'ai choisi 10 minutes.

Il est possible d'utiliser un cordon de souris bimode PS2/série, ce qui permettra de commander la prise à partir d'un montage perso en préparation un peu plus intelligent mais qui demande plus de compétences en électronique.

C'est tout!

Link to post
Share on other sites

:francais: Super idée. C'est certain que ça va servir à beaucoup de monde.

Déjà un pote et moi on va tester ça dans pas lontemps. J'ai vu aussi une autre personne intéressée sur le forum, mais je ne sais plus qui.

En tout cas :ouioui: wanou

Link to post
Share on other sites


×
×
  • Create New...