Bonjour,
Pour ceux que cela intéresse, j’ai créé un script sur mon Raspberry PI4, qui héberge ma solution Jeedom. Ce script redémarre ma box Bouygues Telecom (Sagemcom F@st5688b), de manière automatique, sans aucune interaction humaine. Ce script est associé à un autre script qui se charge de faire un “ping” vers des serveurs Web, et en cas de non réponse, au bout de x tentatives, redémarre ma BBox automatiquement. Le tout est associé à un scenario qui pilote tout ça.
Les raisons ? J’ai remarqué que mon accès internet, via ma Bbox, se fige regulièrement, tous les 2-3 mois (débit upload = 35 To / mois env.). La seule solution pour retrouver un accès Internet est de la redémarrer électriquement; ou lancer un reboot depuis mon LAN tant que la box n’est pas complètement plantée. Avec la mise en place de ce script, Jeedom surveille cet accès Internet et se charge de redémarrer la box de manière automatique, pratique quand on est absent de la maison.
1er élément = script de test “ping”, via le plugin “Script”, exécuté toutes les 2 mn :
Commande = ping -c 1 8.8.8.8 > /dev/null 2>&1 || ping -c 1 1.1.1.1 > /dev/null 2>&1 && echo 1 || echo 0
Je m’affranchis de toute résolution DNS en testant directement 2 adresses IP attribuées à des acteurs “majeurs” du net, Google en 1er, puis CloudFlare ensuite. Si le premier ne répond pas, je passe au serveur CloudFlare. Le serveur Google est assez tolérant sur un ping toutes les 2 mn, ce que ne permet pas CloudFlare car je suis tres vite “blacklisté” avec une période de “ping” si petite.
En l’occurrence, cette commande teste le ping vers Google (8.8.8.8) en priorité et s’il ne passe pas, il teste le serveur CloudFlare (1.1.1.1).
Le résultat de cette commande est conforme aux règles Jeedom : 0 si KO, 1 si OK.
Puis, vient le script de redémarrage de la Bbox en lui même, de manière automatique.
Ce script est déposé sur mon raspberry : /var/www/html/plugins/script/data/reboot_bbox.sh.
Ne pas oublier d’activer d’ajouter la permission d’exécution sur ce script (chmod +x …). Et, en utilisant ce type de chemin, ce script est inclus dans la politique standard de sauvegarde Jeedom.
2ieme élément : script de redémarrage “reboot_bbox.sh”, via le plugin “Script”, déposé dans /var/www/html/plugins/script/data/ :
Contenu de “reboot_bbox.sh”:
#!/bin/bash
/usr/bin/python3 /var/www/html/plugins/script/data/reboot_bbox.py
En effet, impossible de trouver une solution qui fonctionne simplement via un script standard, voici le contenu du script python “reboot_bbox.py”:
#!/usr/bin/env python3
import time
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
BBOX_URL = « https://mabbox.bytel.fr »
PASSWORD = « <mot_de_passe_BBox> » # Ton mot de passe d’administration Bbox
session = requests.Session()
session.verify = False
print(« 1. Connexion à la Bbox… »)
login_payload = {« password »: PASSWORD}
r_login = session.post(f"{BBOX_URL}/api/v1/login", data=login_payload)
if r_login.status_code != 200:
print(f"Échec de connexion (HTTP {r_login.status_code}) : {r_login.text}")
exit(1)
print(« Connexion réussie ! »)
print(« 2. Récupération du token BBOXI… »)
r_token = session.get(f"{BBOX_URL}/api/v1/device/token")
try:
data = r_token.json()
if isinstance(data, list) and len(data) > 0:
data = data[0]
btoken = data.get(« device », {}).get(« token »)
except Exception as e:
print(f"Erreur lors de la lecture du token : {e}")
exit(1)
if not btoken:
print(« Impossible d’extraire le token de la réponse. »)
exit(1)
print(f"Token BBOXI obtenu : {btoken}")
print(« 3. Demande de redémarrage… »)
#Tentative via paramètre d’URL (btoken ou token)
r_reboot = session.post(
f"{BBOX_URL}/api/v1/device/reboot",
params={« btoken »: btoken},
headers={« BBOXI »: btoken},
)
#Si erreur 403, tentative alternative en envoyant le token dans le body
if r_reboot.status_code == 403:
r_reboot = session.post(
f"{BBOX_URL}/api/v1/device/reboot",
data={« btoken »: btoken},
headers={« BBOXI »: btoken},
)
if r_reboot.status_code == 200:
print(« Redémarrage lancé avec succès ! »)
else:
print(
f"Erreur au redémarrage (HTTP {r_reboot.status_code}) : {r_reboot.text}"
)
Il suffit de changer la valeur de <mot_de_passe_BBox> par le mot de passe de la BBox, et cela fonctionne. On peut le tester directement en ligne de commande, en lançant au préalable un ping manuel vers un serveur type Google (8.8.8.8) pour s’assurer que la box redémarre bien. Puis, vérifier que la Bbox a bien redémarré en vérifiant son “uptime” directement sur son interface Web (https://mabbox.bytel.fr ou via l’adresse IP directement / 192.168.1.254).
Enfin, un scenario, est exécuté toutes les 5 mn :
La condition d’exécution est : ping KO vers Google et CloudFlare, et si cette condition est valide depuis plus > 10 mn : le script de reboot de la BBox est lancé.
Pour tester toute la chaine dans Jeedom, il suffit de changer les adresses IP des serveurs Google et CloudFlare dans le script, en les remplaçant par des adresses IP inexistantes (genre 10.0.0.255). Cela simulera une indisponibilité de joindre les serveurs, comme si l’accès internet était indisponible.
On peut aussi imaginer un redémarrage “préventif”, tous les 1er du mois, de la BBox, il suffit de rajouter un scenario programmé.
Si cela peut aider d’autres utilisateurs … Bonne journée.


