Dev & scripting

Utiliser l API Python MeshCore

Construisez des scripts et applications autour de MeshCore: automatisation, monitoring, integration (USB/serial, BLE, TCP selon support). En France, reseau en structuration: utile pour tester un noyau local.

Qu est-ce que l API Python MeshCore ?

La librairie meshcore (Python) donne un acces programmatique a des noeuds MeshCore (surtout companion). Vous pouvez envoyer des messages, lire des infos, recuperer contacts, et construire des integrations.

La connexion passe typiquement par USB/serial, BLE ou TCP/IP (selon firmware). La plupart des usages sont async (base sur evenements) pour gerer des evenements sans bloquer.

Contexte France: le reseau MeshCore est en construction. L API est surtout utile pour instrumenter un noyau local (2-5 noeuds) et mesurer portee/fiabilite avant d etendre avec un repeater.

Installer la librairie meshcore

Installez via pip (Python 3.10+ conseille):

# Installer la librairie
pip install meshcore

# (Optionnel) installer la CLI via pipx
pipx install meshcore-cli

# Verifier
python -c "import meshcore; print(\"meshcore OK\")"

Sous Linux, vous aurez peut-etre besoin des droits pour le port serie: ajoutez-vous au groupe dialout puis reconnectez-vous. Pour BLE, un pairing peut etre requis (ex: bluetoothctl).

Exemple minimal

Exemple (indicatif) de connexion en USB/serial et envoi d un message. Adaptez selon la version de l API.

import asyncio

async def main():
    # Exemple: se connecter a un port serie
    # (API exacte selon version)
    mesh = await MeshCore.create_serial("/dev/ttyUSB0")

    info = await mesh.commands.send_device_query()
    print(info)

    contacts = await mesh.commands.get_contacts()
    if contacts.payload:
        await mesh.commands.send_msg(contacts.payload[0], "Test depuis Python")

    await mesh.disconnect()

asyncio.run(main())

Ce script illustre l idee: connecter, lire info, recuperer contacts, envoyer un message, puis fermer. Les details (classes/noms) peuvent changer: verifiez la doc officielle GitHub de la librairie.

Usages pratiques

๐Ÿค–

Bots

Repondre automatiquement a des messages (ex: info, meteo, statut repeater).

๐Ÿ“Š

Monitoring

Collecter telemetrie et etat de noeuds, puis afficher dans un dashboard.

๐Ÿ””

Alertes

Declencher une alerte si batterie basse, noeud offline, perte de liaison, etc.

๐Ÿ 

Home automation

Bridge vers Home Assistant/Node-RED (souvent via MQTT ou webhook).

๐Ÿ“ก

Gateway scripts

Faire le pont entre MeshCore et d autres services (base, API, MQTT).

๐Ÿงช

Tests

Mesurer portee, latence, perte packets, et documenter des essais reproductibles.

Exemples de code

1. Recevoir des messages via events

S abonner aux events pour recevoir en temps reel:

import asyncio

async def on_message(event):
    payload = getattr(event, "payload", {})
    text = payload.get("text", "")
    sender = payload.get("sender", "?")
    print(f"[{sender}] {text}")

async def main():
    mesh = await MeshCore.create_serial("/dev/ttyUSB0")

    mesh.subscribe(EventType.CONTACT_MSG_RECV, on_message)
    await mesh.start_auto_message_fetching()

    try:
        while True:
            await asyncio.sleep(1)
    finally:
        await mesh.disconnect()

asyncio.run(main())

2. Connexions possibles

Selon version, l API propose plusieurs methodes:

from meshcore import MeshCore

# USB/serial
mesh = await MeshCore.create_serial("/dev/ttyUSB0", 115200)

# BLE (adresse MAC, selon OS)
mesh = await MeshCore.create_ble("12:34:56:78:90:AB")

# TCP/IP (si node expose un serveur)
mesh = await MeshCore.create_tcp("192.168.1.50", 4000)

3. Gerer les contacts

Lister et trouver un contact par nom:

import asyncio

async def main():
    mesh = await MeshCore.create_serial("/dev/ttyUSB0")

    result = await mesh.commands.get_contacts()
    contacts = result.payload or []
    print(f"Contacts: {len(contacts)}")

    for c in contacts:
        print(f"- {c.name} ({c.pubkey_prefix})")

    target = mesh.get_contact_by_name("MonNode")
    if target:
        await mesh.commands.send_msg(target, "Hello")

    await mesh.disconnect()

asyncio.run(main())

Pourquoi passer par Python

๐Ÿ

Python moderne

Async/await, structure event-driven, integration facile avec vos outils.

๐Ÿ”Œ

Plusieurs liens

USB, BLE, TCP: utile pour un labo de test ou une gateway fixe.

๐Ÿ“š

Events

Reception temps reel, filtrage, reactions automatiques (bots/tests).

๐Ÿ”„

Open source

La reference la plus fiable reste le code et les examples dans le repo GitHub.

๐ŸŒ

Integrations

Logs, dashboards, alerting: Python est pratique pour coller tout ensemble.

โšก

Automatisation

Scripts repetables: utile pour tester, comparer des presets, documenter.

FAQ

Quelle version de Python ?

En general, Python 3.10+ est une bonne base. Verifiez la doc du package pour la contrainte exacte.

Connexion Bluetooth: comment faire ?

Selon OS, vous devez pairer l appareil. Ensuite, utilisez la methode BLE de la librairie avec l adresse appropriee.

Pourquoi tout est async ?

Pour eviter de bloquer pendant les IO (serial/BLE/TCP) et traiter des events en parallele. C est utile pour monitoring et bots.

Comment gerer les erreurs ?

Les commandes renvoient souvent un objet resultat/event. Testez le type et inspectez la payload pour diagnostiquer.

Puis-je piloter plusieurs noeuds ?

Oui: creez plusieurs instances connectees a des noeuds differents, puis orchestrez via asyncio.

Ou est la doc ?

Consultez le repo GitHub de la librairie meshcore (README + examples). C est la source la plus a jour.

Demarrer en Python

Pour la France (reseau en structuration), utilisez Python pour mesurer et automatiser des tests utiles sur un petit noyau local.

Articles connexes