Aller au contenu

Rebooter Sa Box Internet En Cas De Plantage Via Un Nas


JossAlf

Messages recommandés

Bonjour!

Je ne possède pas de box fibaro mais souhaitais utiliser le script php sur mon nas et rebooter la freebox via l'utilisation d'un autre script déjà  en place en utilisant la commande:

 http://192.168.0.20/fbx/freebox.php?do=reboot (ce script fonctionne bien)

 

Le problème est que je n'y connais pas grand chose en php et lors de l'exécution du script pour contrôler la connexion internet, j'ai ce message dans le log:

 

Parse error: syntax error, unexpected '}' in /volume1/web/fbx/freebox_check.php on line 24
 
Auriez vous une idée du problème? 
Merci d avance
Lien vers le commentaire
Partager sur d’autres sites

Voilà  le fichier, mais au final je n'ai changé que le lien utilisé lorsque la connexion doit être relancée, j'ai testé avec le fichier original et j'ai la même erreur

(je lance le script via le planificateur de tache synology via la commande "php -f /volume1/web/fbx/freebox_check.php > /volume1/web/domotique/logtestinternet.txt" )

 

<?php

$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

 

//Teste 6 fois 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 !';

// ici on lance l'action sur le HC ou la HCL (appui sur bouton 1 du module virtuel 76)


 

   } 

 

else 

 

   {

   echo date('d / m / Y H:i:s'). ' Le site de google.fr a bien répondu.';

   fclose($fp);         //ferme le socket ouvert

   }

Lien vers le commentaire
Partager sur d’autres sites

oui t 'as raison, point virgule après est peut etre pas indispensable, mais la virgule sur l'agument l'est 

 

bref, la ligne 22 doit être:

$fp = fsockopen('http://192.168.0.20/...x.php?do=reboot' , 80) ;
Lien vers le commentaire
Partager sur d’autres sites

 

Je ne suis pas certain de comprendre ta question mais j'y réponds quand même ;)

 

Si tu le lances ton php avec le planificateur de taches et la commande :

"php -f /volume1/domotique/testinternet.php > /volume1/domotique/LogsTestinternet.txt"

Tu dois avoir le fichier LogsTestinternet.txt qui s'est créé ? Non ?

Lien vers le commentaire
Partager sur d’autres sites

Tout à  fait

Celui ci est vide (j'imagine que c est normal, si le script parvient à  atteindre google.fr il n y a pas d erreur à  logger)

Jusque là  est ce bien correct?

 

Je souhaiterais voir ce qu'il se passe si le script ne parvient pas à  atteindre google.fr...si il lance bien le script de reboot de la freebox.

Y a t il une solution autre que débrancher le câble réseau? ;) (je ne suis pas chez moi actuellement pour tester)

Lien vers le commentaire
Partager sur d’autres sites

J'étais en train d éditer le msg précédent:

Le log apparaît bien mais pas immédiatement (j'imagine qu'il faut le temps que la connexion se fasse)

 

J ai remplacé l adresse de vérification par une adresse qui n existe pas

voici le log

 

Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
28 / 05 / 2014 15:58:13 Attention : le site de google.fr n'a pas répondu 6 fois de suite !
Warning: fsockopen(): unable to connect to "http" - did you forget to enable it when you configured PHP?) in /volume1/web/fbx/freebox_check.php on line 22
 
 
Donc ok pour la vérification de connexion, ça ne passe pas (puisque le site n'existe pas), mais par contre je n'ai pas l'impression que mon script de reboot soit lancé car j'ai tjs accès à  ma box
Lien vers le commentaire
Partager sur d’autres sites

 

Heu tu fais des tests qui vont couper ta boxe toutes les 3 minutes alors que tu n'es pas chez toi ?  :huh:

 

Cela dit, je crois qu'il faut que tu vires le port 80 Ligne 22 (j'ai corrigé le code page 1)

$fp = fsockopen('http://192.168.0.20/fbx/freebox.php?do=reboot');
Lien vers le commentaire
Partager sur d’autres sites

J ai réduis à  3 tentatives pour le test (mais je réduirai plutôt le délai d attente pour les prochains test) et j ai ce message d erreur pour le lancement du script de reboot

 

Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed. errno=0 in /volume1/web/fbx/freebox_check.php on line 8
 
Warning: fsockopen(): unable to connect to www.gooobbogle.fr:80 (php_network_getaddresses: gethostbyname failed. errno=0) in /volume1/web/fbx/freebox_check.php on line 8
28 / 05 / 2014 16:23:41 Attention : le site de google.fr n'a pas répondu 3 fois de suite !
Warning: fsockopen(): unable to connect to "http" - did you forget to enable it when you configured PHP?) in /volume1/web/fbx/freebox_check.php on line 22
Lien vers le commentaire
Partager sur d’autres sites

J'ai exactement la même syntaxe en ligne 22

voilà  le script complet

 

<?php
$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
 
//Teste 6 fois google.fr avec 30 secondes entre chaque test (Donc si injoignable pendant 3 minutes je reboote)
while($i<6)
{
$fp = fsockopen('www.gooobbogle.fr', 80);       //Ouvre un socket 
if(!$fp) 
{
$echec++;
}
sleep(1);
$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 !';
// ici on lance l'action sur le HC ou la HCL (appui sur bouton 1 du module virtuel 76)
 
   } 
 
else 
 
   {
   echo date('d / m / Y H:i:s'). ' Le site de google.fr a bien répondu.';
   fclose($fp);         //ferme le socket ouvert
   }
?>
Lien vers le commentaire
Partager sur d’autres sites

 

tu es certain de la commande 

http://192.168.0.20/fbx/freebox.php?do=reboot

Tu devrais essayer de chez toi en tapant directement ça dans ta barre de navigateur.

 

Théoriquement tu pourrais même utiliser 

http://mafreebox.freebox.fr/fbx/freebox.php?do=reboot

Mais perso ça ne fonctionne pas chez moi. Si j'ai le temps j'essayerai de chercher dans l'API. Je dois filer là ...

Lien vers le commentaire
Partager sur d’autres sites

Je viens de me rendre compte que l'autre fonction que j'utilisais parfois (wifi_on ou wifi_off) ne fonctionne plus...après vérification c'est le cas chez tous les utilisateurs du script php pour la freebox et c'est sans doute du au nouveau firmware de la freebox.

Du coup je pense que l'erreur vient de làet j'attends la maj du script freebox pour retester.

Je vous tiendrai au courant dès que ça avance!

Encore merci pour ton aide!

Lien vers le commentaire
Partager sur d’autres sites

 

Re. Oui je me disais aussi. La commande doit être obsolète.

Si c'est le cas, ils abusent chez free de ne pas avoir un minimum de compatibilité ascendante dans leur API. On dirait qu'ils la refondent à  chaque fois... :(

 

C'est aussi pour ça que je passe par une prise pilotée pour faire un vrai OFF/ON. Au moins ça sera toujours indépendant de l'API.

Et dernier avantage, si la boxe est vraiment plantée coté software (après un gros orage par exemple - même si maintenant elle est sur onduleur ... ) et bien le OFF/ON la redémarrera alors que les commandes http peuvent restées sans suite...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour,

je remonte un peu ce sujet car j'ai essayé de mettre en place le script sur un VD sauf que je bloque à un endroit :

Si je colle le script dans la boucle du VD, cela fonctionne mais il fait le test du ping toute les secondes et c'est bien trop rapide...

Comment je peux faire pour que le test ne se fasse qu'une fois toute les 10 secondes par exemple ? j'ai essayé de mettre un fibaro:sleep après le test mais ca ne marche pas car il redémarre le script toute les secondes..

malheureusement le VD posté il y a 3 ans n'est plus dispo sur le lien free donc je n'arrive pas à comprendre comment il créé une boucle qui ne soit pas executé toute les secondes.. une idée ?

 

voici mon code adapté :

 

local selfId = fibaro:getSelfId()
fibaro:debug("Démarrage du Test - Bouton Actionné")
function printlog(message)
  fibaro:call(selfId, "setProperty", "ui.log.value",  message);
  fibaro:debug(message)
  fibaro:log(message)
end
     
     
     
printlog("Test connexion Internet")
count=fibaro:getGlobalValue("Internet")
count=tonumber(count)
testnet = Net.FHttp("httpbin.org",80)
response, status, errorCode=testnet:GET('/status/600')
printlog("Réponse"..response .." Status=".. status.." ErrorCode=" .. errorCode)
--uncomment sleep to debug response in log windows
fibaro:sleep(1000)
if errorCode == 0 and status == "600"
-- Le net remarche, Remise à  zéro de la variable
then
  if count > 0 then fibaro:setGlobal("Internet", 0)  
  end
else
-- Plus d'internet, Incrémentation de la variable
  fibaro:setGlobal("Internet", count+1)
end
     
local status = fibaro:getGlobalValue("Internet")
fibaro:debug("Internet: "..status)
if status=="0" then
     
fibaro:call(selfId, "setProperty", "ui.status.value", "OK")
  else
fibaro:call(selfId, "setProperty", "ui.status.value", "HS")
  end
     
status=tonumber(status)
if status > 30 then
  printlog("Reboot Box Internet en cours")
  
	fibaro:call(332, "turnOff");
    fibaro:sleep(1000);
    fibaro:call(364, "pressButton", "1");
	fibaro:sleep(2000);
	fibaro:call(332, "turnOn");
  
fibaro:setGlobal("Internet", 0) -- Remise à  zero du compteur
fibaro:sleep(2000);
fibaro:debug("Internet: "..status)

fibaro:sleep(240 * 1000); -- Test Internet dans 4 min

testnet = Net.FHttp("httpbin.org",80)
response, status, errorCode=testnet:GET('/status/600')
printlog("Réponse"..response .." Status=".. status.." ErrorCode=" .. errorCode)
fibaro:sleep(1000)
if errorCode == 0 and status == "600"
-- Le net remarche, Remise à  zéro de la variable
then
fibaro:call(270, "sendDefinedPushNotification", "350");

fibaro:debug("Prochain test dans 5 Min")  
fibaro:sleep(300 * 1000)    
end
  
end

 

Lien vers le commentaire
Partager sur d’autres sites

Salut, il semblerait que ça soit moi qui avait mis ça en ligne, en effet

je t'exporte l'actuel, en l'état, ça n'a pas bougé je pense, ça ne fait que checker 'état de la connec, mais il suffit d'ajouter les modifs citées à l'époque.

http://dl.free.fr/rVJwQR1uP

Pour le principe, le test se situe derrière un bouton du VD, et le main loop se contente d'appuyer sur ce bouton (ici le 2):

 

--[[
%% properties
%% globals
--]]
local frequency=120 --check frequency in seconds

local selfId = fibaro:getSelfId();
fibaro:debug(selfId)



fibaro:call(selfId, "pressButton", "2");

fibaro:sleep(frequency*1000)

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...