Utilisation de l'API Python MeshCore
Créez des applications et scripts sur mesure avec la bibliothèque Python officielle meshcore pour l'automatisation, le monitoring et les intégrations
Qu'est-ce que l'API Python MeshCore ?
La bibliothèque Python meshcore vous donne un accès programmatique aux nœuds radio companion MeshCore. Vous pouvez envoyer des messages, gérer des contacts, lire la télémétrie et créer des applications personnalisées. Idéal pour l'automatisation, le monitoring et les intégrations IoT.
L'API Python communique avec votre nœud via liaison série (USB), Bluetooth Low Energy (BLE) ou TCP/IP. La bibliothèque est entièrement basée sur async et repose sur une architecture orientée événements. Open source et activement maintenue.
Ce guide vous montre comment installer la bibliothèque meshcore, effectuer les opérations de base et écrire des scripts pratiques. L'API facilite l'intégration de MeshCore dans vos projets Python.
Installation de meshcore
Installez la bibliothèque via pip (Python 3.10+ requis) :
# Installer la bibliothèque meshcore
pip install meshcore
# Ou via pipx (recommandé pour les outils CLI)
pipx install meshcore-cli
# Vérifier l'installation
python -c "import meshcore; print('meshcore installé !')"
Sous Linux, vous pourriez avoir besoin de droits supplémentaires pour accéder au port série. Ajoutez-vous au groupe dialout : sudo usermod -a -G dialout $USER (puis reconnectez-vous). Pour le BLE, couplez d'abord votre appareil via bluetoothctl.
Utilisation de base
La bibliothèque meshcore est basée sur async. Voici un exemple simple pour se connecter et envoyer un message :
import asyncio
from meshcore import MeshCore, EventType
async def main():
# Connexion via USB série
meshcore = await MeshCore.create_serial("/dev/ttyUSB0")
# Récupérer les infos de l'appareil
result = await meshcore.commands.send_device_query()
if result.type != EventType.ERROR:
print(f"Connecté à : {result.payload}")
# Récupérer les contacts
contacts = await meshcore.commands.get_contacts()
print(f"Nombre de contacts : {len(contacts.payload)}")
# Envoyer un message au premier contact
if contacts.payload:
contact = contacts.payload[0]
await meshcore.commands.send_msg(contact, "Bonjour depuis Python !")
# Fermer la connexion
await meshcore.disconnect()
asyncio.run(main())
Ce script se connecte via USB, récupère les informations de l'appareil et les contacts, puis envoie un message. Toutes les commandes sont async et retournent un objet Event avec un type et un payload.
Applications pratiques
Chatbots
Créez un bot qui répond automatiquement aux messages. Par exemple : un bot météo, un bot info ou un bot admin pour la gestion du réseau.
Tableaux de bord de monitoring
Collectez la télémétrie de tous les nœuds et visualisez dans Grafana, InfluxDB ou un tableau de bord personnalisé. Monitoring réseau en temps réel.
Systèmes d'alerte
Envoyez des notifications par e-mail, Telegram ou Discord lors d'événements spécifiques. Par exemple : batterie faible, nœud hors ligne, alarme capteur.
Domotique
Intégrez MeshCore avec Home Assistant, Node-RED ou Domoticz. Déclenchez des automatisations basées sur des messages mesh.
Scripts passerelle
Pont entre MeshCore et d'autres systèmes : broker MQTT, API REST, base de données. Centralisez les données de plusieurs nœuds.
Tests & débogage
Tests automatisés de portée réseau, latence et perte de paquets. Outils de débogage pour le dépannage.
Exemples de code
1. Réception de messages par événements
Abonnez-vous aux événements pour recevoir des messages en temps réel :
import asyncio
from meshcore import MeshCore, EventType
async def handle_message(event):
"""Callback pour les messages entrants"""
msg = event.payload.get("text", "")
sender = event.payload.get("pubkey_prefix", "inconnu")
print(f"[{sender}]: {msg}")
async def main():
meshcore = await MeshCore.create_serial("/dev/ttyUSB0")
# S'abonner aux messages
meshcore.subscribe(EventType.CONTACT_MSG_RECV, handle_message)
# Démarrer la récupération automatique des messages
await meshcore.start_auto_message_fetching()
print("En écoute... (Ctrl+C pour arrêter)")
try:
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
await meshcore.disconnect()
asyncio.run(main())
2. Connexion via différentes méthodes
La bibliothèque supporte les connexions Serial, BLE et TCP :
from meshcore import MeshCore
# Via USB Serial
meshcore = await MeshCore.create_serial("/dev/ttyUSB0", 115200)
# Via Bluetooth Low Energy
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB")
# Avec appairage PIN
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB", pin="123456")
# Via TCP/IP (si le nœud exécute un serveur TCP)
meshcore = await MeshCore.create_tcp("192.168.1.100", 4000)
3. Gestion des contacts
Récupérez les contacts et cherchez par nom ou clé :
import asyncio
from meshcore import MeshCore, EventType
async def main():
meshcore = await MeshCore.create_serial("/dev/ttyUSB0")
# Récupérer tous les contacts
result = await meshcore.commands.get_contacts()
if result.type == EventType.ERROR:
print(f"Erreur : {result.payload}")
return
contacts = result.payload
print(f"=== {len(contacts)} Contacts ===")
for contact in contacts:
print(f" - {contact.name} ({contact.pubkey_prefix})")
# Chercher un contact par nom
contact = meshcore.get_contact_by_name("MonNoeud")
if contact:
await meshcore.commands.send_msg(contact, "Bonjour !")
await meshcore.disconnect()
asyncio.run(main())
Points forts de la bibliothèque meshcore
Python moderne
Entièrement basé sur async/await avec Python 3.10+. API élégante avec type hints et excellent support IDE.
Méthodes de connexion variées
Connectez-vous via Serial, BLE ou TCP. Reconnexion automatique avec backoff exponentiel en cas de perte de connexion.
Orienté événements
Abonnez-vous à des événements spécifiques avec des filtres. Réagissez en temps réel aux messages, advertisements, ACKs et plus.
Développement actif
La bibliothèque est activement maintenue par la communauté MeshCore. Open source sur GitHub.
Possibilités d'intégration
S'intègre facilement avec d'autres bibliothèques async Python, bases de données et frameworks web.
Fiable
Les commandes retournent des objets Event avec une gestion d'erreur claire. Récupération automatique des messages pour une réception fiable.
Questions fréquentes
Quelle version de Python est nécessaire ?
Python 3.10 ou plus récent est requis. Vérifiez avec python --version ou python3 --version. Téléchargez Python via python.org si vous avez une version plus ancienne.
Comment se connecter via Bluetooth ?
Couplez d'abord votre appareil via bluetoothctl sous Linux. Utilisez ensuite MeshCore.create_ble("MAC:ADDRESS"). Pour les appareils avec PIN, utilisez le paramètre pin.
Pourquoi toutes les méthodes sont-elles async ?
La bibliothèque meshcore utilise asyncio pour une communication non bloquante. Vous pouvez ainsi exécuter plusieurs opérations simultanément et attendre les réponses efficacement sans bloquer.
Comment gérer les erreurs ?
Toutes les commandes retournent un objet Event. Vérifiez result.type == EventType.ERROR pour détecter les erreurs. Le result.payload contient alors le message d'erreur.
Peut-on piloter plusieurs nœuds en même temps ?
Bien sûr ! Créez plusieurs instances MeshCore, chacune connectée à un nœud différent. Grâce à async, vous pouvez les utiliser en parallèle.
Où trouver plus de documentation ?
Consultez le dépôt GitHub : github.com/meshcore-dev/meshcore_py. Le README contient des exemples détaillés. Le code source de meshcore-cli est également une excellente référence.
Lancez-vous dans le développement Python
Prêt à créer des applications MeshCore sur mesure ? Installez la bibliothèque meshcore et commencez à expérimenter.