À 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 accès à internet et nous devons redémarrer le routeur 4G afin d'accéder de nouveau à nos sites favoris.
N'étant pas forcément à mon domicile durant les coupures, j'utilise Home Assistant afin de vérifier l'accès à internet ainsi qu'une prise connectée pour redémarrer automatiquement le routeur 4G si besoin.
Vérification de l'accès à internet
Home Assistant fournit l'intégration ping permettant de tester l'accessibilité d'une autre machine à travers un réseau IP. Nous allons effectuer un ping vers différents serveurs DNS afin de vérifier l'accès à internet. J'ai choisi d'utiliser quatre serveurs DNS mais vous pouvez en ajouter autant que vous le souhaitez. Vous pourrez trouver d'autres adresses IP de serveurs DNS sur le site public-dns.info.
Il est important de garder le même préfixe - exemple : "Ping - Internet access - " - pour le nom de chacune de vos entité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 ajouter un binary sensor avec un device class de type problem qui sera à off quand tout va bien et à on lorsque plus de la moitié des requêtes ping seront KO.
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 Outils de développement au sein d'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 sensibles au sein de la maison. Par conséquent, il doit toujours être allumé. Il fallait donc que la prise connectée répondent à quelques critères pour être utilisée :
- Posséder un bouton physique permettant l'allumage et l'extinction de la prise
- S'allumer automatiquement, après une extinction ou une coupure de courant, au bout de quelques secondes sans aucune intervention
- Bonus : si elle possède un voyant lumineux, avoir la possibilité de l'éteindre
Ayant une prise Shelly Plug S dans le placard, j'ai décidé naturellement de l'utiliser, mais toutes les prises connectées répondant à ces critères auraient pu faire l'affaire.
Voici le paramétrage effectué sur la prise :
Automatisation
Le scénario est très simple : lorsque le binary sensor Internet access passe à l'état on durant plus de deux minutes, il faut éteindre la prise connectée. Puis, si cette dernière est toujours éteinte au bout de 15 secondes, forcer 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 subi.
Comme vous avez pu le remarquer, cette automatisation se déclenche une seule fois en cas de perte d'accès à internet. Si la coupure persiste encore suite au redémarrage du routeur 4G, mon réseau local bascule automatiquement sur la connexion ADSL afin de permettre une continuité même si le débit reste très faible.