Gestionnaire automatique de connexion Wi-Fi

Introduction

Ce système permet de basculer automatiquement entre différents réseaux Wi-Fi préconfigurés et un mode hotspot local si aucun réseau approprié n’est disponible. Il est conçu pour être exécuté sur un appareil Linux (comme un Raspberry Pi) disposant de nmcli (NetworkManager) et d’une interface sans fil.

Le programme repose sur deux fichiers principaux :

  • auto_wifi.py : script principal qui gère la logique d’auto-connexion.
  • lib_wifi.py : bibliothèque fournissant les fonctions bas-niveau de gestion Wi-Fi.

Un client MQTT est utilisé pour publier les événements de connexion/déconnexion. Utiliser par exemple mosquitto pour installer le serveur MQTT sur le Raspberry (Robot).


Configuration

Fichier de configuration : wifi_config.txt

Le fichier wifi_config.txt contient la configuration des réseaux Wi-Fi autorisés.

Format :

50
Maison=motdepasse123
Atelier=ateli3r123
  • La première ligne est le seuil minimal de signal (%).
  • Chaque ligne suivante est de la forme SSID=motdepasse.

Variables importantes dans auto_wifi.py

BROKER = "localhost"             # Adresse du broker MQTT
PORT = 1883                      # Port du broker MQTT
CONFIG_FILE = "wifi_config.txt" # Fichier de configuration
CHECK_INTERVAL_MINUTES = 1      # Fréquence des vérifications (en minutes)
HOTSPOT_SSID = "tondeuse"        # SSID du mode hotspot
HOTSPOT_PASSWORD = "tondeuse"    # Mot de passe du hotspot
IP = "192.168.1.151"             # IP locale fixe pour les connexions

Installation

Dépendances :

  • Python 3
  • nmcli (inclus avec NetworkManager, notamment sous Bookworm pour les Raspberry)
  • paho-mqtt

Installation de paho-mqtt :

pip install paho-mqtt

Utilisation

Lancement du programme

python3 auto_wifi.py

Le script :

  1. Tente de se connecter à un réseau Wi-Fi préféré avec signal suffisant.
  2. Sinon, active un mode hotspot local (AP).
  3. Publie les événements sur le canal MQTT autowifi.

Log des événements

Tous les événements sont journalisés dans log.txt avec un timestamp.


Détails techniques

Classe WiFiManager (lib_wifi.py)

Permet d’exécuter des commandes nmcli et d’interagir avec l’interface Wi-Fi.

Principales méthodes :

  • get_wifi_list() : Liste les réseaux disponibles avec leur signal.
  • get_wifi_info() : Informations sur le réseau actuel.
  • connect_wifi(ssid, password, ip) : Connexion à un réseau Wi-Fi.
  • set_hotspot(ssid, password, ip) : Active un hotspot local.

Classe WiFiAutoSwitcher (auto_wifi.py)

Implémente la logique d’auto-switch :

  • Lecture du fichier de config
  • Sélection du meilleur réseau disponible
  • Activation du hotspot si aucun réseau n’est acceptable
  • Boucle de vérification en tâche de fond

MQTT

Le client MQTT se connecte au broker localhost, publie sur le topic autowifi, et peut s’abonner à tous les messages (#). Le callback on_message est commenté mais peut être activé pour ajouter des commandes distantes.


Extension possible

Ajout de commandes MQTT

En décommentant on_message, il est possible de réagir à des messages MQTT pour forcer des actions :

# Exemple : forcer le mode hotspot ou recharger la config

Interface Web de supervision

Une page Flask pourrait être ajoutée sur le même hôte pour afficher l’état courant, les réseaux visibles, etc.


Bonnes pratiques

  • Tester manuellement la commande nmcli pour chaque SSID avant usage automatique.
  • Conserver les identifiants Wi-Fi à jour dans le fichier wifi_config.txt.
  • Éviter des noms de réseau SSID contenant des caractères spéciaux.

Exemple de sortie console

20250702 15:03 [INFO] Connexion conservée grimeco (60%)
20250702 15:04 [INFO] Signal trop faible (18%) sur grimeco
20250702 15:04 [INFO] Connexion au meilleur réseau : grimeco_EXT
20250702 15:05 [INFO] Signal trop faible (15%) sur grimeco_EXT
20250702 15:05 [INFO] Passage en mode hotspot.
20250702 15:06 [INFO] Toujours en mode hotspot.
20250702 15:07 [INFO] Toujours en mode hotspot.
20250702 15:08 [INFO] Connexion au meilleur réseau : grimeco
20250702 15:09 [INFO] Connexion conservée grimeco (63%)
20250702 15:10 [INFO] Connexion conservée grimeco (65%)

Maintenance

  • Supprimer manuellement les connexions obsolètes via nmcli con delete si nécessaire.
  • Utiliser nmcli dev wifi list pour vérifier la qualité du signal et les SSID visibles.

Auteurs

  • Ce programme a été conçu pour automatiser la gestion réseau sur un robot autonome (ex. tondeuse connectée).

Licence

Ce code est open-source et peut être adapté à d’autres projets de robotique ou domotique basés sur Linux et MQTT.

Sources

lib_wifi.py

Python

auto_wifi.py

Python

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *