Comment rebooter automatiquement son routeur quand il perd sa connexion ? Après mes premières tentatives il y a quelques années, est-ce toujours possible aujourd'hui ? Quel matériel utiliser ? Tous les détails dans ce nouvel article.
Trois ans se sont écoulés depuis l'écriture de mon premier article sur Comment rebooter automatiquement son routeur ?
J'ai 2 raisons de revenir aujourd'hui sur ce sujet:
Bref, il était donc temps de faire un petit "refresh" de la solution.
La mauvaise nouvelle c'est que depuis 3 ans, comme me l'ont fait remarqué plusieurs lecteurs, la prise connectée Kankun n'est plus disponible: ni sur Amazon, ni sur Aliexpress, ni ailleurs, …
Ce n'est pourtant pas les prises connectées qui manquent sur le marché car avec l'avènement d'Alexa, de la Google Home et autres Home Pod, tout le monde propose ses prises connectées y compris les enseignes comme Ikea (la prise TRÅDFRI) ou Leroy Merlin (la solution ENKI).
L'avantage est que les prix de ces solutions ont (encore) baissés.
L'inconvénient est que ce sont des solutions orientées vers un usage grand public qui sont donc pilotables:
Ce n'est pas ce que je recherche, j'ai besoin d'une solution sur lequel j'ai complètement la main et que je peux piloter par programmation sans trop d'effort.
Dans le précédent article je vous parlais d'OpenWRT qui est une distribution Linux légère, embarquée sur des équipements réseaux. Le fait de disposer d'OpenWRT sur la prise connectée Kankun apportait la souplesse et l'autonomie de la solution de redémarrage automatique.
Existe-t-il d'autres prises connectées utilisant OpenWRT ou sur lequel il est possible de l'installer ?
Après pas mal de recherches, je trouve la prise connectée Weave Smart Plug qui semble permettre de faire la même chose que la prise Kankun. Hélas, impossible de la commander où que ce soit, elle ne semble plus disponible non plus.
Il est sinon possible de construire sa propre prise connectée intelligente, voir par exemple une explication ici, mais ça reste réservé à des spécialistes ce que je ne suis pas.
Autre possibilité: modifier une prise connectée du marché pour y installer OpenWRT. Plusieurs hackers ce sont penchés sur la question. Sur la Belkin Wemo Smartswitch, il est par exemple possible de mettre à jour la prise sur certaines versions du firmware qui sont mal sécurisées. Voir ici. Intéressant mais encore faut-il avoir la bonne version du firmware sur la prise qu'on va acheter. C'est un peu aléatoire.
Sur une autre prise Belkin, la Wemo Insight Smartplug, il est possible de flasher le firmware vers OpenWRT. Détail ici. Mais là il faut démonter la prise et utiliser un fer à souder pour intervenir sur le process de boot. Pas vraiment ma tasse de thé 🙂
Au fil de mes recherches, je tombe enfin sur une alternative bien plus intéressante.
Une bande de hacker, softScheck, s'est penchée sur une autre prise connectée la HS 110 de TP-Link.
Concrètement ils ont fait du "reverse engeneering" du protocole de communication utilisé par la prise. Autrement dit ils ont écouté le réseau WiFi lorsque la prise était sollicitée pour voir s'ils pouvaient arriver à comprendre comment la piloter. Et ils ont réussi en exploitant une faille de sécurité du protocole ! Voir le détail ici.
Et non seulement ils ont réussi mais en plus ils ont écrit une API en Python pour piloter cette prise ainsi que d'autres modèles de la marque. Voilà qui est intéressant !
D'autant plus que la prise TP-Link peut être facilement trouvée dans la commerce (chez Darty, sur Amazon ou chez LDLC par exemple) pour environ 25€.
Aussitôt dit, aussitôt fait je l'achète et 2 jours plus tard me voilà avec.
Pour la faire fonctionner, rien de plus simple: il suffit d'installer l'application iOS/Android associée (et elle est en Français contrairement à celle de Kankun !) et de brancher la prise. L'application recherche alors un réseau WiFi TP-LINK-XXX qui est exposé par la prise en phase d'initialisation et il suffit de la configurer en lui indiquant le réseau WiFi à utiliser.
L'application présente une interface simple pour commander la prise: allumer/éteindre, programmation horaire, voir la consommation électrique, …
Lançons nous maintenant dans le pilotage de la prise.
Première chose à faire: installer "l'API" développée par softScheck. Pour cela, il suffit de cloner ou downloader sur son PC le contenu de leur repo Github.
Deuxième chose à faire: identifier l'adresse IP de votre prise connectée. Vous devriez pouvoir la trouver depuis l'interface d'administration de votre routeur ou votre box. Il y a de fortes chances que ce soit quelque chose du genre 192.168.1.X. Par exemple, 192.168.1.77 dans mon cas.
Et c'est tout !
Sous réserve que Python soit installé sur votre PC, pour allumer la prise il suffit de lancer le script tplink_smartplug.py avec l'adresse IP et l'option "-c on":
$ ./tplink_smartplug.py -t 192.168.1.77 -c on Sent: {"system":{"set_relay_state":{"state":1}}} Received: {"system":{"set_relay_state":{"err_code":0}}} $
Et pour éteindre la prise il faut lancer ce même script avec l'option "-c off":
$ ./tplink_smartplug.py -t 192.168.1.77 -c off Sent: {"system":{"set_relay_state":{"state":0}}} Received: {"system":{"set_relay_state":{"err_code":0}}} $
Et aussi incroyable que cela puisse paraître (car c'est quand même une faille de sécurité 😉) ça fonctionne parfaitement !
Si l'on revient à notre problème initial (voir l'article): rebooter le router lorsqu'il n'y a plus de connexion à internet, il faut modifier légèrement le script que nous avions écrit, il devient:
# checkinternet while true do wget -q -s http://google.com if [[ $? -eq 0 ]]; then echo $(date) was: online else echo $(date) was: OFFLINE, retry in 30 seconds sleep 30 wget -q -s http://google.com if [[ $? -eq 0 ]]; then echo $(date) was: now online else echo $(date) was: still OFFLINE, reboot in 10s sleep 10 tplink_smartplug.py -t 192.168.1.77 -c off sleep 3 tplink_smartplug.py -t 192.168.1.77 -c on sleep 600 fi fi sleep 300 done
J'ai simplement remplacé les 2 lignes: "echo X > /sys/class/leds/tp-link:blue:relay/brightness" (qui commandait la prise Kankun) par un appel au script "tplink_smartplug.py".
Facile non ?
Cette solution fonctionne bien et permet donc de redéployer une solution de redémarrage automatique du routeur.
Elle a néanmoins un inconvénient: elle nécessite d'avoir une machine qui exécute ce script en permanence. Dans la solution précédente, le script était hébergé sur la prise connectée elle-même. Mais là, vu qu'on n'utilise pas OpenWRT sur la prise, on n'a pas accès au système pour y installer le script.
C'est dommage mais il est toujours possible d'installer ce script sur un mini-serveur (type RaspberryPI) qui serait lui-aussi connecté à votre réseau.
Voilà, j'espère que vous parviendrez à faire fonctionner cette nouvelle solution. Dites-le moi dans les commentaires !
(Crédit image de une: Sean MacEntee via Flickr)