Développement & Scripting

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.