Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Collecteur de télémétrie MeshCore

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.


📋 Table des matières


Prérequis

  • 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 PyYAML pour lire le fichier de configuration
  • Bibliothèque requests (optionnelle, pour l’envoi vers un endpoint WordPress)

Installation

  1. Cloner ou copier le dossier `` dans un répertoire de travail.
  2. Ouvrir un terminal (PowerShell, CMD, ou bash) et naviguer dans ce dossier :
    cd C:\scripts\Meshcore\Telemetry_collector\F4ASJ
  3. 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.

Configuration

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

Variables importantes

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

Utilisation du collecteur

Dans le répertoire F4ASJ :

python TELEMETRY.PY.PY

Le 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.csv et ajout d’objets dans telemetry.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).

Lancer un serveur web local

Pour visualiser les données en temps réel avec la page telemetry.html :

  1. Dans le même répertoire (F4ASJ), lancer un serveur HTTP simple :

    python -m http.server 8001

    (Le port 8001 peut être changé ; le serveur répondra sur http://localhost:8001/.)

  2. Ouvrir votre navigateur et naviguer vers :

    http://localhost:8001/telemetry.html
    

    La page affichera un tableau contenant les 30 dernières lignes du fichier telemetry.json et 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); dans telemetry.html et remplacez 10000 par INTERVAL_SEC * 1000 (ex. 20000 pour 20 s).

Explication des variables

  • address : identifie le périphérique BLE auquel se connecter. Vous pouvez l’obtenir avec un scanner Bluetooth (ex. bluetoothctl sur Linux, ou une appli comme “BLE Scanner” sur Android/iOS).
  • pin : certains appareils MeshCore exigent un PIN lors du premier appairage. Si la bibliothèque meshcore ne 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 un POST avec le payload complet (self + remote). Mettre null pour désactiver cette fonctionnalité.

Obtenir l’adresse BLE et l’ID du nœud distant

Adresse BLE (address)

  • 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, puis scan 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.

ID du nœud distant (remote_node_id)

  1. Assurez‑vous que le nœud distant est allumé et dans portée.
  2. 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 un print(self_info) après la connexion.
  3. Le champ public_key retourné par mesh.self_info correspond à 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.

Une fois que vous avez l’adresse et l’ID, remplacez les valeurs dans config.yaml.

Anonymisation des variables

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, à remplacer

Lors du clonage du dépôt, chaque utilisateur devra éditer config.yaml avec ses propres valeurs avant de lancer le collecteur.

Dépannage

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.

Licence

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 ! 🚀

About

Récupération des informations de telemetry d'un noeud Meshcore, affichage du résultat sur une page web

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages