Aller au contenu
JossAlf

Rebooter Sa Box Internet En Cas De Plantage Via Un Nas

Recommended Posts

Il m'est arrivé une fois un deux de me retrouver loin de chez moi (c'est toujours àce moment làque ça arrive) avec un box internet allumée mais plantée... Il aurait suffit de la débrancher et de la retrancher mais ... j'étais po là! :13:

Ce qu'il vous faut :
1/ Un NAS ou un serveur qui peut executer un PHP
2/ une prise (Fibaro wallplug ou Everspring An157 ...) qui gèrera l'alimentation de la box internet.

Comment ça fonctionne :
1/ On teste la connexion vers l'extérieur en essayant de joindre google (la boxe peut sembler fonctionner wifi, switch et DHCP OK, mais plus d'accès vers l'extérieur)
2/ Si google ne répond pas on en déduit que la box est plantée.
3/ on éteint 5 secondes puis on rallume.


Voici le script php àmettre sur votre NAS qui va faire ça àvotre place.
Vous l'appellerez par le planificateur de tâche (Cron) avec une commande du type : "php -f /volume1/domotique/testinternet.php > /volume1/domotique/LogsTestinternet.txt" (qui sera exécutée toutes les 2 heures par exemple).

$i=0;						// initialisation du compteur pour la boucle du test d'accès au site google.fr
$echec=0;					// initialisation du nombre de tentatives infruscteuses

//Je teste 6 fois le site google.fr avec 30 secondes entre chaque test (Donc si injoignable pendant 3 minutes je reboote)
while($i<6)
{
	$fp = fsockopen('www.google.fr', 80);       //Ouvre un socket 
	if(!$fp) 
	{
	$echec++;	
	}
sleep(30);
$i++;	
}

//Si le test est négatif 3 fois de suite je relance la freebox.
if($echec==6) 
   {
   echo date('d / m / Y H:i:s').' Attention : le site de google.fr n\'a pas répondu '.$echec.' fois de suite !';
   // $zibase->execScript("lm [Relancer Freebox]");
    $fp = fsockopen('http://Login:MotDePass@AdresseIpLocaleHC2/api/callAction?deviceID=76&name=pressButton&arg1=1');
   }    
else 
   {
   echo date('d / m / Y H:i:s'). ' Le site de google.fr a bien répondu.';
   fclose($fp);         //ferme le socket ouvert
   }
?>

Le bouton de mon module virtuel contient ceci :

fibaro:call(75, "turnOff");fibaro:sleep(3000)fibaro:call(75, "turnOn");

Ma prise An157 àl'ID 75.

Voilàqui peut vous permettre de continuer vos vacances sereinement loin de chez vous avec une box toujours joignable. B)

En espérant que ça vous soit utile.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, il me semble que tu peux même te passer du nas:

Moi je check a intervalle regulier ma connectivité dans un virtual device, il set une variable globale pour stocker l'état, à  partir tu là , tu peux décider de actios  à  établir (rebooter la box, envoyer un sms via un passerelle alternative, etc..)

testnet = Net.FHttp("httpbin.org",80) 
response, status, errorCode=testnet:GET('/status/600')

if errorCode == 0 and status == "600"
  then
  if (fibaro:getGlobal("adsl") == "0") then fibaro:setGlobal("adsl", 1) end


  else
 if (fibaro:getGlobal("adsl") == "1") then fibaro:setGlobal("adsl", 0) end
end

moi je test en faisant une requete sur hhttpbin.org, tu demandes /status/xxx  et si tout va bien il te renvoie xxx

 

 

si tu veux tester plusieurs fois avant de prendre une action, tu peux dans les conditions stocker dans la variable globale le nombre de fois que tu as reçu une erreur, et prendre une décision quand le compteur arrive à  6, et bien entendu remettre le compteur à  zero si tu obtiens une réponse positive.

Partager ce message


Lien à poster
Partager sur d’autres sites
 

J'avais surtout un code tronqué en affichage. :13:  Je viens de le remettre au propre. 

 

Cela dit, l'idée est aussi de permettre à  un possesseur de HCL (donc sans lua) de lancer une scene bloc avec une commande du style :

http://<LOGIN>:<PASS>@<IP>/api/sceneControl?id=<SCENE ID>&action=start

 

Vous trouverez un petit tutoriel sur les commande http là  : http://tutoriels.domotique-store.fr/content/76/45/fr/api-commander-le-home-center-par-des-requêtes-http.html

Partager ce message


Lien à poster
Partager sur d’autres sites

oui en effet, le malheureux qui n'a pas de lua dans son hcl se retrouve à  faire la même chose dans son nas/server annexe, finalement l'intelligence se retrouve déportée dans le nas/server...

 

Et en effet ton code était tronqué, mais j'avais saisi l'idée :)

 

Je vois du coup que c'est une freebox, tu as quoi comme plantage  ?  v5   V6 ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Freebox V6
 

Ce code tourne depuis plus d'un an (et s'appuyait sur une zibase avant la HC2) et depuis ma maison est toujours joignable ;)

 

Le plantage était une perte de synchro certainement due à  des travaux dans la rue (changement de canalisations, passage de la fibre ...). Depuis que ça s'est calmé dehors, je n'ai pas eu de nouvelles désynhro.

 

Dernier lancement du script après un gros orage en juillet pendant que j'étais absent. La boxe était pourtant sur onduleur, mais les équipements extérieurs ont morfler d'après les voisins qui ont vécus la fin du monde ;) ! Le script s'est lancé et la box s'est remise d'aplomb :)

Partager ce message


Lien à poster
Partager sur d’autres sites

ah ok c 'est pas la box qui pose probleme mais l'environnement

 

J'en ai vécu des dà»res avec ma v6 ces derniers temps, ils ont changé qqch dans mon dslam qui fait que la ligne se resync dès que la marge de bruit en dl tombe sous 4dB (normalement il synchronise à  6dB et ne décroche pas tant que ça tombe pas à  zero, mais desormais c'est plus le cas)

du coup comme la marge tend a fluctuer entre jour et nuit, si tu synchronise haut le jour, t'as une resynchro la nuit, quand ça chute, tu te retrouves tjs limité à  ton débit le plus faible au delà  de 24 h...)

Partager ce message


Lien à poster
Partager sur d’autres sites
 

Finalement cette V6 est plus stable. Depuis que la guerre des trachées est terminée chez moi (et que les orages ne sont pas trop fréquents) je n'ai pas à  me plaindre. C'est la débit qui est galère (5 Méga) mais rien à  voir avec la box, c'est encore l'environnent et une ligne de 4000 mètres et d'un autre age... ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

@biboun
 Comment comptes-tu le nombre de fois que tu as reçu l'erreur? Je vois bien "trois tentatives négatives consécutives (une réponse positive remettrait le compteur à  zéro) me colle un FGS 211 (+ un relais pour inverser le contact) pendant quelques secondes pour rebooter le modem (comme le Ping Watchdog sur l'IPXv3).

Partager ce message


Lien à poster
Partager sur d’autres sites

Heu c'est le commentaire (//Si le test est négatif 3 fois de suite je relance la freebox.) qui est faut dans mon code.

Je test bien 6 fois par une boucle et j'incrémente le compteur par $echec++;

 

Si j'ai 6 échecs je reboote.

Partager ce message


Lien à poster
Partager sur d’autres sites

@biboun

 Comment comptes-tu le nombre de fois que tu as reçu l'erreur? Je vois bien "trois tentatives négatives consécutives (une réponse positive remettrait le compteur à  zéro) me colle un FGS 211 (+ un relais pour inverser le contact) pendant quelques secondes pour rebooter le modem (comme le Ping Watchdog sur l'IPXv3).

Si c'est de mon bout de code dont tu parles, je le propose, pour faire dans le même principe que JossAlf, mais ça n'est pas dans le code affiché.

Cependant c'est assez simple, un truc du genre: (pas testé, et je suis un pro des erreurs de syntaxe et de mélange string/integer) 

 

Au lieu de considerer la varibale adsl comme 0 down  1 up , tu considères qu'elle représente le nombre d'erreurs, et tu incrémentes, si la valeur dépasse la cible fixée, tu déclenches l'action.

pour ma part je vérifie la valeur de la var pour ne la changer que si nécessaire,et le module virtuel ne fait que tester, il n'agit pas car la variable globale est en fait un trigger pour une autre scène chargée d'informer du problème,et elle ne doit s'activer que quand il y a un réél changement d'état( pas deux échecs ou deux réussites de suite..)


count=fibaro:getGlobalValue("adsl")
count=tonumber(count)
testnet = Net.FHttp("httpbin.org",80)
response, status, errorCode=testnet:GET('/status/600')

if errorCode == 0 and status == "600"
--le net remarche, on remet la variable à  zero
then
if count > 0 then fibaro:setGlobal("adsl", 0) end

else
--ça déconne, on incremente la variable
fibaro:setGlobal("adsl", count+1) end
end
status=fibaro:getGlobalValue("adsl")
status=tonumber(status)
if status > 3 then
--3 echecs, on reset le jus de la box (module id xxx)
fibaro:call(xxx,"turnOff")
fibaro:sleep(2000)
fibaro:call(xxx,"turnOn")
fibaro:setGlobal("adsl", 0) --on remet le compteur a zero
end

Partager ce message


Lien à poster
Partager sur d’autres sites

concernant le fgs, je ne comprend pas pourquoi tu veux mettre un relai ?

en tout cas un wall plug me semblerait tout designé pour cette tâche( c'est le même prox je crois), et t'auras la conso en prime, et la possibilité de monitorer via cette conso si la box est "active" ou "vegetative"

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci biboun, et ce test est fait en continu, ça ne risque pas de saturer le HC2? J'essaye de lui insérer un

fibaro:log("Connexion internet OK") & fibaro:log("Pas de connexion internet")

pour voir l'état mais ça ne m'affiche rien. Pour le FGS, c'était pour qu'il ne soit pas collé en permanence.

 

 Pardon JossAlf, je posais la question à  biboun sur son script en Lua. J'ai bien un NAS Netgear mais à  part lui faire stocker des photos, de la musique ,je ne sais pas encore lui demander autre chose (pourtant, j'aimerai bien lui faire une base de donnée).

Partager ce message


Lien à poster
Partager sur d’autres sites

oui donc pour le fgs, si tu ne l'as pas déjà  autant prendre un wall plug, il est censé être fait pour être on 24/24 ( dans la pub, sur le frigo).

concernant le test, moi c 'est donc un bouton d'un virtual device, et le mainloop presse ce bouton et fait un fibaro:sleep(60*1000) soit un sleep de 1 minutes.

je fais le test toutes les minutes donc, au pire donc je détecte l'info avec 1 minute de délai, c'est acceptable.

 

ça ne charge pas la box, c 'est vraiment rien.

 

En revanche, moi je stocke la variable et l'exploite en dehors de ce virtual device, ça me permet d'avoir l'état toujours dispo pour me monter un reporting en cas d'alarme par exemple.

Je dois finaliser ma passerelle 3G, mais l'idée est bien-entendu de switcher sur la 3G et de notifier de la coupure ( ben oui tenter d'envoyer un mail ou un push via l'adsl qui est ....down, croyez le ou pas, ça marche moyen  :13: )

Partager ce message


Lien à poster
Partager sur d’autres sites

tiens j'ai mis mon virtual device tel quel :http://dl.free.fr/tszIxvEEb

il faut juste avoir créé  une var globale nommée adsl

 

dedans tu as le bouton qui test, la banniere qui affiche l'état, la baniere qui affiche les logs, et le mainloop s'occupe de boucler le test toutes les minutes.

 

 

C'est la version qui considère que c 'est down au premier essai (ce qui ne m'a jamais fait défaut jusque là )

 

le test sur la page /600 permet de ne pas se contenter d'un retour sans erreur pour définir que la connection est up, car la freebox v6 a une feature qui renvoie un message en cas de ligne indisponible, et du coup ca renvoie un code d'erreur correct malgré la coupure...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais essayer ton code en parallèle du mien. Comme ça si le NAS est planté j'ai une roue de secoure. ;)

 

A force on va devenir des gros malades !!  :blink:

 

"C'est déjà  fait !  :ph34r:

 

 

 

Qui a dit ça ?  :99:

Partager ce message


Lien à poster
Partager sur d’autres sites

 Merci beaucoup biboun, j'ai importé ton device (la variable globale adsl était créée) mais je ne vois pas le module pour changer l'Id et je ne peux pas remplacer l'icône (toujours le cube bleu... tiens encore ce cube bleu).

Partager ce message


Lien à poster
Partager sur d’autres sites

ah oui c 'est ma version que je t'ai filé, comme base.

elle ne comprend pas d'action pour relancer ta box, mais tu dois pouvoir le faire avec le bout de code que j'ai mis plus haut (à  tester)

 

pour l'icone, comme le bouton "manual check" est appelé chaque minute, c 'est son icone qui s'établit , docn si tu veux mettre une icone, mets là  sur ce bouton, elle devrait rester..

 

L'idée de te filer le VD était de te montrer comment gérer l'affichage dans le VD, pour avoir qqch de visuel..

Dis-moi si t'as besoin d'aide pour modifier avec le systeme de 3 echecs et le poweroff/on de ta box

Partager ce message


Lien à poster
Partager sur d’autres sites

Je comprends pourquoi on a été choisi par les modo comme membres du mois ;)

On arrive même àfaire des sujets rien que tous les 3 ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

bah je suis sur que tapis dans l'ombre, il y en a qui lisent ou qui liront un jour, et ça leur servira ( à  rien..)

 

:)

 

Alors Did, tu t'en sors ou tu mate The Voice ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Vous faites pas de soucis cela risque de servir ;)

Demain je jetterais un oeil au device :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas taper hein, niveau code, des fois c'est pas élégant..

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, je m'en sors qu'à  moitié, j'ai réussi à  mettre l'icône mais pour l'ajout de ligne, j'ai ajouté la partie module en fin de script

if tonumber(fibaro:getGlobal("adsl")) > 3 then
--3 echecs, on reset le jus de la box (module id xxx)
fibaro:call(30,"turnOn")
fibaro:sleep(2000)
fibaro:call(30,"turnOff")
end

(j'ai inversé le turn on & off pour mes essais avec un module câblé sur une lampe en volant). Et aussi le compteur

count=tonumber(fibaro:getGlobal("adsl"))

que j'ai inséré avant la ligne 13 testnet mais ça ne fonctionne pas. Le debug m'affiche:

 

[DEBUG] 23:42:32: button pressed
[DEBUG] 23:42:32: checking connectivity
[ERROR] 23:42:32: line getSelfId()..."]:13

Et je n'ai pas encore essayé avec mon modem éteint.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

t 'as modifié plus haut pour incrementer la variable adsl tout ça ?

 

met tout le code du bouton, je vois pas trop ce qui cause l'erreur la..

 

ca marchait avec le VD au départ ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oh, c'est beau, un topic de 3 nominés, avec 2 membres du mois qui viennent juste pour saluer :D

 

Je pense que ça me servira aussi un jour... mais pour le moment, pas de pb de box, car quand l'ADSL ne fonctionne pas c'est qu'on ma volé les câbles souterrains en cuivre, donc un reboot ne suffit pas (c'est arrivé 2 fois l'année dernière, c'est la nouvelle grande mode).

Partager ce message


Lien à poster
Partager sur d’autres sites

×