Redémarrer automatiquement son routeur 4G avec Home Assistant
Notre accès à internet tombe régulièrement. Voici comment je le surveille avec Home Assistant et redémarre automatiquement le routeur 4G via une prise Shelly.
À la maison, nous utilisons un routeur 4G avec une carte SIM Free afin d'accéder à internet en attendant l'arrivée de la fibre. Nous perdons parfois notre connexion et nous devons redémarrer le routeur pour retrouver l'accès à nos sites favoris.
N'étant pas forcément à mon domicile durant les coupures, j'utilise Home Assistant pour vérifier l'accès à internet, ainsi qu'une prise connectée pour redémarrer automatiquement le routeur 4G si besoin.
⚠️ Cet article a été publié initialement en 2022. Home Assistant a beaucoup évolué depuis et le code présenté ci-dessous n'est plus fonctionnel en l'état. La configuration de l'intégration ping en YAML a été retirée à partir de la version 2023.12 au profit d'une configuration via l'interface graphique, et la syntaxe des automatisations a changé (service est devenu action avec la version 2024.8). Le principe général reste valable, mais il vous faudra adapter les exemples à votre version.
Vérification de l'accès à internet
Home Assistant fournit l'intégration ping, qui permet de tester l'accessibilité d'une autre machine à travers un réseau IP. Nous allons interroger plusieurs serveurs DNS afin de vérifier l'accès à internet. J'en ai retenu quatre, mais vous pouvez en ajouter autant que vous le souhaitez. Vous trouverez d'autres adresses sur le site public-dns.info.
Il est important de conserver le même préfixe - ici « Ping - Internet access - » - pour le nom de chacune de vos entités : c'est sur ce préfixe que s'appuiera le capteur de synthèse que nous créerons juste après.
binary_sensor:
- platform: ping
name: Ping - Internet access - DNS - Cloudflare
host: 1.1.1.1
count: 2
scan_interval: 60
- platform: ping
name: Ping - Internet access - DNS - FDN
host: 80.67.169.12
count: 2
scan_interval: 60
- platform: ping
name: Ping - Internet access - DNS - Google
host: 8.8.8.8
count: 2
scan_interval: 60
- platform: ping
name: Ping - Internet access - DNS - Quad9
host: 9.9.9.9
count: 2
scan_interval: 60
Nous allons ensuite ajouter un binary sensor de type template, avec un device class problem. Attention, la logique est inversée par rapport à ce que l'on pourrait attendre : ce capteur reste à off tant que tout va bien, et passe à on lorsque plus de la moitié des requêtes ping échouent.
template:
- binary_sensor:
- name: Internet access
state: >
{{ (states.binary_sensor
| selectattr('attributes.device_class', 'eq', 'connectivity')
| selectattr('entity_id', 'match', 'binary_sensor.ping_internet_access_')
| selectattr('state','eq','on')
| list | count | int)
<
(((states.binary_sensor
| selectattr('attributes.device_class', 'eq', 'connectivity')
| selectattr('entity_id', 'match', 'binary_sensor.ping_internet_access_')
| list | count | int) / 2) | round(0, 'ceil')) }}
device_class: problem
N'hésitez pas à utiliser les Outils de développement de Home Assistant pour comprendre ce que réalise chaque selectattr().
Redémarrer le routeur
Avant de se lancer dans l'automatisation, il convient d'expliquer le choix du modèle Shelly Plug S.
Shelly Plug S
Le routeur 4G fait partie des appareils critiques de la maison : il doit toujours être alimenté. Il fallait donc que la prise connectée réponde à quelques critères pour être retenue :
- Posséder un bouton physique permettant l'allumage et l'extinction de la prise
- Se rallumer automatiquement au bout de quelques secondes après une extinction ou une coupure de courant, sans aucune intervention
- Bonus : pouvoir éteindre le voyant lumineux, si elle en possède un
Ayant une Shelly Plug S dans le placard, je l'ai tout naturellement retenue, mais n'importe quelle prise connectée répondant à ces critères aurait fait l'affaire.
Voici le paramétrage effectué sur la prise :


Automatisation
Le scénario est très simple : lorsque le binary sensor Internet access reste à l'état on - donc en défaut - pendant plus de deux minutes, on coupe la prise connectée. C'est le rallumage automatique configuré sur la Shelly qui remet ensuite le routeur sous tension. Par sécurité, si la prise est toujours éteinte au bout de 15 secondes, on force son allumage.
La prise Shelly Plug S correspond dans l'automatisation à l'entité switch.bureau_routeur_4g.
automation:
- description: Check internet connection
alias: check_internet_connection
id: 7f45bcd7-7478-410e-ae1b-3771220f8179
trigger:
- platform: template
value_template: "{{ is_state('binary_sensor.internet_access', 'on') }}"
for:
minutes: 2
action:
- service: switch.turn_off
entity_id: switch.bureau_routeur_4g
- delay:
seconds: 15
- choose:
- conditions: "{{ is_state('switch.bureau_routeur_4g', 'off') }}"
sequence:
- service: switch.turn_on
entity_id: switch.bureau_routeur_4g
Conclusion
J'utilise ce scénario depuis plusieurs mois et nous n'avons pas eu de faux positifs, malgré la dizaine de coupures que nous avons subies.
Comme vous avez pu le remarquer, cette automatisation ne se déclenche qu'une seule fois par perte d'accès. Si la coupure persiste après le redémarrage du routeur 4G, mon réseau local bascule automatiquement sur la connexion ADSL afin d'assurer une continuité de service, même si le débit reste très faible.