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 :
- Tente de se connecter à un réseau Wi-Fi préféré avec signal suffisant.
- Sinon, active un mode hotspot local (AP).
- 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
auto_wifi.py