-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Meshtastic Config Manager est un outil graphique Python (Tkinter) permettant de sauvegarder, restaurer et déployer la configuration complète d'appareils Meshtastic via liaison USB/série.
Il s'adresse aux administrateurs de flottes de nœuds Meshtastic souhaitant gérer leurs configurations de manière reproductible, sécurisée et sans nécessiter de ligne de commande.
Auteur : Zifnab69_fr@yahoo.fr Version : 1.2 Langage : Python 3.10+ Interface: Tkinter (GUI native Windows/Linux/macOS) Format : EXE autonome (PyInstaller) ou script Python direct

Logiciels requis :
- Python 3.10 ou supérieur
- meshtastic (pip install meshtastic)
- pyserial (pip install pyserial)
- protobuf (pip install protobuf)
Matériel :
- Appareil Meshtastic avec firmware 2.x minimum
- Câble USB data (pas un câble charge seul)
- Port COM disponible (COM1 est automatiquement exclu — port système Windows)
Installation depuis le source : pip install meshtastic pyserial protobuf python meshtastic_config_manager_v1.1.py
Installation depuis l'EXE : Lancer directement meshtastic_config_manager_v1.1.exe Aucune installation Python requise.
L'interface est organisée en deux onglets principaux :
- Onglet "Principal" : toutes les opérations de gestion
- Onglet "Aide" : guide d'utilisation intégré

- La liste des ports COM est détectée automatiquement au démarrage
- COM1 est systématiquement exclu (port système Windows, jamais un appareil USB)
- Le premier port disponible est pré-sélectionné
- Cliquer "Détecter ports" pour actualiser la liste
- Laisser le champ vide = scan automatique de tous les ports

- Par défaut : dossier de l'application
- Bouton "Choisir dossier" pour changer l'emplacement
- Bouton "Ouvrir dossier" pour ouvrir l'explorateur Windows
Affiche tous les fichiers JSON du dossier de travail avec : - Nom du fichier - Date d'export - Appareil source (long_name) - Type (backup complet ou profil flotte) - Région LoRa - Preset modem

Boutons disponibles sur le fichier sélectionné : - Actualiser : recharger la liste - Voir contenu : afficher le JSON formaté - Éditer champs clés : modifier les champs essentiels (région, modem, owner) - Copier fichier : copier le fichier JSON dans un autre dossier - Supprimer : supprimer le fichier - Choisir un autre fichier : parcourir les dossiers pour sélectionner un JSON
- Brancher l'appareil et sélectionner le port COM
- Cliquer "EXPORTER CONFIG COMPLÈTE → JSON"
- L'appareil est lu en premier
- Une boîte de sauvegarde s'ouvre avec un nom suggéré automatiquement Format du nom : meshtastic_NOM_XXXX_YYYYMMDD_HHMMSS.json où NOM = short_name de l'appareil, XXXX = 4 derniers hex de l'adresse MAC Exemple : meshtastic_JMC_5F7B_20260509_095500.json
- Le fichier JSON est sauvegardé dans le dossier de travail
Permet d'exporter plusieurs appareils l'un après l'autre sans redémarrer l'outil.
- Cliquer "Export multi-nœuds (séquentiel)"
- Une boîte de dialogue s'ouvre pour chaque nœud :
- Sélectionner le port COM de l'appareil (COM1 exclu automatiquement)
- Bouton "Détecter" pour rafraîchir la liste des ports
- Cliquer "Exporter ce nœud"
- L'appareil est lu, puis une boîte de sauvegarde s'ouvre avec le nom de fichier suggéré automatiquement (short_name + hex MAC)
- Cliquer "Passer" pour sauter un nœud
- Cliquer "Terminer" pour clore la session
Le fichier JSON contient les sections suivantes :
_export_date : date/heure de l'export _app_version : version du logiciel _schema_version : version du schéma JSON
owner : informations sur l'appareil long_name : nom long (ex: "Jean-Marc") short_name : nom court + hex MAC (ex: "JMC_5F7B") hw_model : modèle matériel (ex: "TLORA_V2_1_1P6")
local_config : configuration locale complète lora : paramètres radio (région, modem preset, fréquence...) bluetooth : BT activé/désactivé, PIN, mode network : WiFi SSID/PSK, NTP, Ethernet display : luminosité, veille, rotation position : GPS, smart position, broadcast power : alimentation, sleep, charge device : mode appareil, rôle, debug security : clé publique, clé privée, admin_key, flags
module_config : modules logiciels mqtt, serial, range_test, telemetry, cannedmessage, audio, remotehardware, neighborinfo, ambientlighting, detectionsensor, paxcounter
channels : canaux de communication (0 à 7) index : numéro du canal (0 = primaire) settings.name : nom du canal settings.psk : clé de chiffrement AES-256 (hex 32 octets) ou "01" (défaut) settings.module_settings.position_precision : précision GPS partagée role : 1=PRIMARY, 2=SECONDARY, 0=DISABLED
known_nodes : liste des nœuds connus du réseau mesh
my_info : informations brutes du nœud local metadata : métadonnées firmware
Le profil flotte est une version épurée d'une configuration, déployable sur n'importe quel nœud de la flotte.
Éléments supprimés du profil flotte :
- owner (long_name, short_name, hw_model)
- security.public_key et security.private_key (chaque nœud doit conserver ses propres clés uniques)
- network.wifi_ssid et network.wifi_psk
- my_info, metadata, known_nodes
- Compteurs de version internes
Éléments conservés :
- security.admin_key (commune à toute la flotte)
- Toute la configuration LoRa (région, preset, fréquence...)
- Tous les canaux avec leurs clés PSK
- Modules, display, BT, position, power, device
Génération :
- Sélectionner un fichier backup dans la liste
- Cliquer "GÉNÉRER PROFIL FLOTTE"
- Le fichier est sauvegardé avec le suffixe _fleet.json
- Sélectionner le fichier JSON dans la liste
- Brancher l'appareil et vérifier le port COM
- Cliquer "RESTAURER le fichier sélectionné → Appareil"
- Une confirmation s'affiche avec : nom du fichier, type, date, appareil source
- La restauration s'effectue section par section
- Un log détaillé s'affiche à la fin
- Redémarrer l'appareil pour appliquer les changements
Déploie le même fichier JSON sur plusieurs appareils successivement. Utilise le fichier sélectionné dans la liste (identique à la restauration unique).
- Sélectionner le fichier JSON dans la liste
- Cliquer "Import multi-nœuds"
- Pour chaque appareil :
- Brancher l'appareil
- Sélectionner son port COM (COM1 exclu automatiquement)
- Cliquer "Restaurer ce nœud"
- Cliquer "Passer" pour sauter un nœud
- Cliquer "Terminer" quand tous les nœuds sont traités
- Redémarrer chaque appareil pour appliquer
Note profil flotte : les clés private_key et public_key ne sont pas restaurées (absentes du profil), chaque nœud conserve ses propres clés. L'admin_key commune est bien restaurée sur tous les nœuds.
Avant toute restauration, le fichier est automatiquement vérifié :
- Présence des sections local_config et local_config.lora
- Présence de la section channels
- Cohérence de la config LoRa (région, modem_preset)
En cas de problème détecté, un avertissement s'affiche. L'utilisateur peut annuler ou forcer la restauration malgré l'avertissement.
Les canaux sont restaurés dans cet ordre :
- Canaux secondaires (role=2) en premier
- Canal primaire (role=1) en dernier
Cet ordre est important : écrire le canal primaire en dernier empêche le firmware de réinitialiser sa configuration lors de l'écriture des canaux suivants.
Pour chaque canal sont restaurés :
- Nom du canal
- Rôle (PRIMARY / SECONDARY / DISABLED)
- Clé PSK (AES-256, 32 octets) — restauration complète garantie
- module_settings (position_precision, is_muted)
La PSK est stockée en hexadécimal dans le JSON et convertie en bytes lors de la restauration. La valeur "01" correspond à la clé par défaut Meshtastic (canal non chiffré avec clé publique connue).
public_key : restaurée depuis un backup complet private_key : restaurée depuis un backup complet (absente des profils flotte — chaque nœud a sa propre paire) admin_key : restaurée dans tous les cas (backup ET profil flotte)
Les clés permettent d'administrer l'appareil à distance. Un backup complet permet une restauration totale y compris la capacité d'administration à distance.
Le bouton "Éditer champs clés" (entre "Voir contenu" et "Copier fichier") permet de modifier les champs essentiels d'un fichier JSON sans éditeur externe :
- Nom long (long_name)
- Nom court (short_name)
- Région LoRa
- Modem preset
- Canaux (noms)
Les modifications sont sauvegardées directement dans le fichier JSON sélectionné.
Les fichiers exportés suivent ce format automatique : meshtastic_[short_name][YYYYMMDD][HHMMSS].json
Exemple : meshtastic_JMC_5F7B_20260509_095500.json
Le short_name inclut les 4 derniers caractères hexadécimaux de l'adresse MAC de l'appareil, ce qui permet d'identifier chaque nœud de manière unique, même si deux appareils ont le même short_name utilisateur.
En cas d'échec de récupération du nom, le format de repli est : meshtastic_backup_[YYYYMMDD]_[HHMMSS].json
Si une clé est absente du JSON (ex: adc_multiplier supprimé manuellement), la valeur présente dans l'appareil reste inchangée lors de la restauration. C'est le comportement standard du protocole protobuf : les champs absents ne sont pas remis à zéro.
Attention : une valeur présente avec la valeur par défaut du type (0, false, "") peut dans certains cas être ignorée par protobuf — supprimer la ligne est plus sûr pour préserver une valeur existante.
pyinstaller --onefile --windowed meshtastic_config_manager_v1.1.py
L'EXE généré dans dist/ est autonome et ne nécessite pas Python installé. Taille typique : 30 à 60 Mo selon les dépendances embarquées.
Aucun port COM détecté → Vérifier le câble USB (cable data, pas charge seule) → Vérifier les pilotes CH340/CP2102/FTDI selon le modèle → Laisser le champ port vide pour un scan automatique
Section owner vide dans le JSON → Attendre 2-3 secondes après branchement avant d'exporter → Le firmware peut mettre quelques secondes à initialiser les infos nœud
La PSK d'un canal est "01" après restauration → Vérifier que le fichier JSON contient bien une PSK de 32 octets (64 hex chars) → Écrire les canaux secondaires avant le primaire — géré automatiquement en v1.1
hw_model vide → Firmware trop ancien (< 2.3) ou modèle non reconnu dans l'enum protobuf → Sans impact fonctionnel
Erreur "Cannot import protobuf" → pip install --upgrade protobuf meshtastic
v1.1 (mai 2026)
- Ajout onglet "Aide" dans l'interface
- Export : lecture de l'appareil avant sélection du fichier de destination
- Nommage automatique des fichiers avec short_name + 4 hex MAC
- Export multi-nœuds avec sélection de port par nœud, COM1 exclu
- Import multi-nœuds : utilise le fichier sélectionné dans l'UI
- COM1 automatiquement exclu de toutes les listes de ports
- Détection automatique des ports au démarrage
- Restauration complète des clés PSK des canaux (bug corrigé)
- Ordre de restauration des canaux : secondaires d'abord, primaire en dernier
- Restauration de module_settings (position_precision, is_muted)
- Restauration complète des clés de sécurité (private_key incluse)
- Profil flotte : suppression public_key ET private_key (admin_key conservée)
- hw_model converti depuis enum protobuf en nom lisible
- short_name complété avec les 4 derniers hex de l'adresse MAC
- Bouton "Éditer champs clés" déplacé dans la barre fichiers
- Activation du bouton "Export multi-nœuds" (précédemment code mort)
- Section owner : 5 méthodes de fallback successives pour la récupération
v1.0 (initial)
- Export/import configuration complète
- Génération profil flotte
- Validation d'intégrité
- Éditeur de champs clés
- Visualisation et gestion des fichiers JSON