Ce dépôt contient une implémentation simple (script Python) permettant de collecter les données télémétriques d’un nœud MeshCore (ex. SenseCAP T1000‑E) via Bluetooth Low Energy (BLE), de les enregistrer sous forme CSV/JSON et d’afficher les résultats dans une page web locale.
- Prérequis
- Installation
- Configuration
- Utilisation du collecteur
- Lancer un serveur web local
- Explication des variables
- Obtenir l’adresse BLE et l’ID du nœud distant
- Anonymisation des variables
- Dépannage
- Licence
- Python 3.8+ (recommandé 3.10 ou supérieur)
- Un périphérique BLE compatible (ex. dongle Bluetooth 4.0+)
- Le nœud MeshCore déjà apparié (ou connaissant son PIN)
- Bibliothèque Python
meshcore(installée avec les dépendances) - Bibliothèque
PyYAMLpour lire le fichier de configuration - Bibliothèque
requests(optionnelle, pour l’envoi vers un endpoint WordPress)
- Cloner ou copier le dossier `` dans un répertoire de travail.
- Ouvrir un terminal (PowerShell, CMD, ou bash) et naviguer dans ce dossier :
cd C:\scripts\Meshcore\Telemetry_collector\F4ASJ
- Installer les dépendances Python :
pip install meshcore pyyaml requests
Si vous ne prévoyez pas d’utiliser l’envoi WordPress, vous pouvez omettre
requests.
Le fichier config.yaml contient tous les réglages nécessaires. Copiez‑le si vous souhaitez conserver une version de secours, puis éditez‑le selon votre matériel.
ble:
address: "XX:XX:XX:XX:XX:XX" # ← adresse BLE du SenseCAP (à remplacer)
pin: "XXXXXX" # ← PIN de l’appareil (par défaut 123456 si non utilisé)
collection:
interval_sec: 3600 # intervalle entre deux collectes (secondes)
telemetry_timeout: 15.0 # timeout (s) pour la requête télémétrie
contact_update_every: 5 # mettre à jour la liste des contacts tous les N cycles
targets:
remote_node_id: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # ← ID du nœud distant (à remplacer ou laisser vide)
output:
csv_file: "telemetry.csv" # fichier CSV de sortie
json_file: "telemetry.json" # fichier JSON de sortie
wp_endpoint: null # URL WordPress/PHP (ex. https://example.com/wp-json/telemetry) ou null
wp_timeout: 5 # timeout (s) pour le POST WordPress| Section | Clé | Description | Exemple / Valeur par défaut |
|---|---|---|---|
ble |
address |
Adresse MAC BLE du périphérique MeshCore (format XX:XX:XX:XX:XX:XX) |
XX:XX:XX:XX:XX:XX |
ble |
pin |
Code PIN pour l’appairage BLE (si requis par la bibliothèque) | XXXXXX |
collection |
interval_sec |
Temps d’attente entre deux cycles de collecte (en secondes) | 3600 |
collection |
telemetry_timeout |
Durée maximale d’attente d’une réponse télémétrie du nœud distant | 15.0 |
collection |
contact_update_every |
Chaque N cycles, rafraîchir la liste des contacts MeshCore | 5 |
targets |
remote_node_id |
Clé publique (hex) du nœud dont on veut lire la télémétrie. Laisser vide ou null pour ne collecter que les infos self. |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
output |
csv_file / json_file |
Noms des fichiers de sortie (CSV et JSON) créés dans le même répertoire | telemetry.csv / telemetry.json |
output |
wp_endpoint |
URL d’un endpoint pouvant recevoir un POST JSON (optionnel). Mettre null pour désactiver. |
null |
output |
wp_timeout |
Timeout (secondes) pour la requête POST WordPress | 5 |
Dans le répertoire F4ASJ :
python TELEMETRY.PY.PYLe script affichera des logs d’information :
- Connexion BLE établie
- Lecture du self‑info (node‑ID) + éventuelle batterie
- Requête télémétrie vers le nœud distant (si configuré)
- Écriture des lignes dans
telemetry.csvet ajout d’objets danstelemetry.json - (Optionnel) envoi vers l’endpoint WordPress
- Surveillance du RSSI/SNR si disponible
Appuyez sur Ctrl +C pour arrêter proprement le collecteur ; il déclenchera un arrêt gracieux (déconnexion BLE).
Pour visualiser les données en temps réel avec la page telemetry.html :
-
Dans le même répertoire (
F4ASJ), lancer un serveur HTTP simple :python -m http.server 8001
(Le port
8001peut être changé ; le serveur répondra surhttp://localhost:8001/.) -
Ouvrir votre navigateur et naviguer vers :
http://localhost:8001/telemetry.htmlLa page affichera un tableau contenant les 30 dernières lignes du fichier
telemetry.jsonet se rafraîchira automatiquement toutes les 10 secondes (voir le script JavaScript).
Astuce : si vous souhaitez que le rafraîchissement corresponde exactement à l’intervalle de collecte, éditez la ligne
setInterval(loadTelemetry, 10000);danstelemetry.htmlet remplacez10000parINTERVAL_SEC * 1000(ex.20000pour 20 s).
address: identifie le périphérique BLE auquel se connecter. Vous pouvez l’obtenir avec un scanner Bluetooth (ex.bluetoothctlsur Linux, ou une appli comme “BLE Scanner” sur Android/iOS).pin: certains appareils MeshCore exigent un PIN lors du premier appairage. Si la bibliothèquemeshcorene l’utilise pas, vous pouvez laisser la valeur par défaut (123456) ou celle fournie par le fabricant.remote_node_id: il s’agit de la clé publique du nœud MeshCore dont vous voulez souscrire la télémétrie. C’est une chaîne hexadécimale de 64 octets (128 caractères). Si vous ne connaissez pas cet ID, laissez le champ vide ("") ou commentez‑le ; le script ne tentera alors aucune requête distante et ne collectera que les infos self.interval_sec: définit la fréquence à laquelle le script effectue une nouvelle collecte. Valeur trop petite peut saturer le lien BLE ; valeur trop grande réduit la résolution temporelle.wp_endpoint: si vous avez un serveur WordPress avec un endpoint capable de recevoir du JSON (ex. via le plugin WP REST API ou un script PHP personnalisé), indiquez‑son URL ici. Le script effectue unPOSTavec le payload complet (self + remote). Mettrenullpour désactiver cette fonctionnalité.
- Sous Windows : ouvrez Paramètres → Périphériques → Bluetooth et autres appareils, cliquez sur Plus d’options Bluetooth, puis Afficher les appareils. Notez l’adresse MAC affichée.
- Sous Linux : exécutez
bluetoothctl, puisscan on. Repérez la ligne contenant le nom de votre périphérique et notez l’adresse. - Sous Android/iOS : utilisez une application de scan BLE (ex. “nRF Connect”, “BLE Scanner”) et relevez l’adresse.
- Assurez‑vous que le nœud distant est allumé et dans portée.
- Dans le script, activez temporairement l’affichage debug : cherchez la ligne
print(f"[INFO] Envoi de la requête télémétrie vers le nœud {TARGET_NODE_ID[:8]}...")et augmentez le nombre de caractères affichés ou ajoutez unprint(self_info)après la connexion. - Le champ
public_keyretourné parmesh.self_infocorrespond à l’ID du nœud self. Pour obtenir l’ID d’un nœud voisin, vous pouvez :- Utiliser la commande MeshCore
mesh.ensure_contacts()puis inspecter la liste des contacts (déjà affichée en debug lorsqu’elle est mise à jour). - Ou bien consulter la documentation du fabricant : souvent l’ID est imprimé sur l’étiquette du dispositif ou disponible via son appli mobile.
- Utiliser la commande MeshCore
Une fois que vous avez l’adresse et l’ID, remplacez les valeurs dans config.yaml.
Pour publier ce dépôt sur GitHub sans révéler vos adresses réelles, remplacez les valeurs sensibles par des placeholders explicites :
ble:
address: "XX:XX:XX:XX:XX:XX" # ← à remplacer par votre adresse BLE
pin: "XXXXXX" # ← à remplacer par votre PIN (ou laisser 123456 si non utilisé)
targets:
remote_node_id: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # ← 64 octets hexadécimaux, à remplacerLors du clonage du dépôt, chaque utilisateur devra éditer config.yaml avec ses propres valeurs avant de lancer le collecteur.
| Symptom | Cause possible | Solution |
|---|---|---|
BluetoothAdapterNotAvailable ou échec de connexion |
Dongle BLE absent, pilote non installé, ou périphérique hors portée | Vérifier que le Bluetooth est activé, que le dongle fonctionne, rapprocher le périphérique. |
TimeoutError lors de req_telemetry_sync |
Nœud distant ne répond pas, mauvais ID, lien BLE faible | Confirmer le remote_node_id, réduire les obstacles, augmenter telemetry_timeout. |
Aucun donnée dans telemetry.csv/.json |
Script interrompu avant première écriture, ou interval_sec trop élevé |
Vérifier les logs, s’assurer que la boucle while not stop_event.is_set() s’exécute. |
| Page web vide malgré présence de données | Le JavaScript attend un format JSON plat alors que le fichier contient {type:, data:} |
Utilisez la version de telemetry.html fournie (déjà adaptée) ou assurez‑vous d’avoir récupéré la dernière version. |
Erreur UnicodeEncodeError lors de l’affichage |
Caractères spéciaux (espace fine) dans les print français |
Le script a déjà été nettoyé ; si vous modifiez le code, remplacez les espaces insécables par des espaces réguliers. |
Pour toute autre question, ouvrez une issue sur le dépôt GitHub ou contactez le mainteneur.
Ce projet est mis à disposition sous la licence MIT – voir le fichier LICENCE pour plus de détails.
Bon hacking et bonne collecte de télémétrie ! 🚀