Development & Scripting

MeshCore Python API gebruiken

Bouw custom applicaties en scripts met de officiële meshcore Python library voor automation, monitoring en integraties

Wat is de MeshCore Python API?

De meshcore Python library geeft je programmatische toegang tot MeshCore companion radio nodes. Je kunt berichten versturen, contacten beheren, telemetrie lezen, en custom applicaties bouwen. Perfect voor automation, monitoring, en IoT integraties.

De Python API communiceert met je node via serieel (USB), Bluetooth Low Energy (BLE) of TCP/IP. De library is volledig async-gebaseerd en gebruikt een event-driven architectuur. Open source en actief onderhouden.

In deze gids leer je hoe je de meshcore library installeert, basis operaties uitvoert, en praktische scripts bouwt. De API maakt het makkelijk om MeshCore te integreren in je Python projecten.

Installatie van meshcore

Installeer de library via pip (Python 3.10+ vereist):

# Installeer meshcore library
pip install meshcore

# Of via pipx (aanbevolen voor CLI tools)
pipx install meshcore-cli

# Verifieer installatie
python -c "import meshcore; print('meshcore geinstalleerd!')"

Op Linux heb je mogelijk extra rechten nodig voor serial port toegang. Voeg jezelf toe aan de dialout groep: sudo usermod -a -G dialout $USER (en log opnieuw in). Voor BLE moet je je apparaat eerst pairen via bluetoothctl.

Basis gebruik

De meshcore library is async-gebaseerd. Hier een simpel voorbeeld om te connecten en een bericht te sturen:

import asyncio
from meshcore import MeshCore, EventType

async def main():
    # Connect via USB serial
    meshcore = await MeshCore.create_serial("/dev/ttyUSB0")

    # Haal device info op
    result = await meshcore.commands.send_device_query()
    if result.type != EventType.ERROR:
        print(f"Verbonden met: {result.payload}")

    # Haal contacten op
    contacts = await meshcore.commands.get_contacts()
    print(f"Aantal contacten: {len(contacts.payload)}")

    # Verstuur bericht naar eerste contact
    if contacts.payload:
        contact = contacts.payload[0]
        await meshcore.commands.send_msg(contact, "Hallo vanuit Python!")

    # Sluit connectie
    await meshcore.disconnect()

asyncio.run(main())

Dit script verbindt via USB, haalt device info en contacten op, en stuurt een bericht. Alle commands zijn async en retourneren een Event object met type en payload.

Praktische toepassingen

🤖

Chatbots

Bouw een bot die automatisch reageert op berichten. Bijvoorbeeld een weather bot, info bot, of admin bot voor netwerk management.

📊

Monitoring dashboards

Verzamel telemetrie van alle nodes en visualiseer in Grafana, InfluxDB, of custom dashboard. Real-time netwerk health monitoring.

🔔

Alert systemen

Stuur notificaties naar email, Telegram, Discord als bepaalde events gebeuren. Bijvoorbeeld: lage batterij, node offline, sensor alarm.

🏠

Home automation

Integreer MeshCore met Home Assistant, Node-RED, of Domoticz. Trigger automations op basis van mesh berichten.

📡

Gateway scripts

Bridge tussen MeshCore en andere systemen: MQTT broker, REST API, database. Centraliseer data van meerdere nodes.

🧪

Testing & debugging

Automatische tests voor netwerk bereik, latency, packet loss. Debug tools voor troubleshooting.

Code voorbeelden

1. Event-based berichten ontvangen

Subscribe op events om real-time berichten te ontvangen:

import asyncio
from meshcore import MeshCore, EventType

async def handle_message(event):
    """Callback voor inkomende berichten"""
    msg = event.payload.get("text", "")
    sender = event.payload.get("pubkey_prefix", "onbekend")
    print(f"[{sender}]: {msg}")

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

    # Subscribe op berichten
    meshcore.subscribe(EventType.CONTACT_MSG_RECV, handle_message)

    # Start auto message fetching
    await meshcore.start_auto_message_fetching()

    print("Listening voor berichten... (Ctrl+C om te stoppen)")
    try:
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        await meshcore.disconnect()

asyncio.run(main())

2. Verbinden via verschillende methodes

De library ondersteunt Serial, BLE en TCP verbindingen:

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")
# Met PIN pairing
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB", pin="123456")

# Via TCP/IP (als node TCP server draait)
meshcore = await MeshCore.create_tcp("192.168.1.100", 4000)

3. Contacten beheren

Haal contacten op en zoek op naam of key:

import asyncio
from meshcore import MeshCore, EventType

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

    # Haal alle contacten op
    result = await meshcore.commands.get_contacts()
    if result.type == EventType.ERROR:
        print(f"Error: {result.payload}")
        return

    contacts = result.payload
    print(f"=== {len(contacts)} Contacten ===")

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

    # Zoek contact op naam
    contact = meshcore.get_contact_by_name("MijnNode")
    if contact:
        await meshcore.commands.send_msg(contact, "Hallo!")

    await meshcore.disconnect()

asyncio.run(main())

Voordelen van de meshcore library

🐍

Modern Python

Volledig async/await gebaseerd met Python 3.10+. Clean API design met type hints en goede IDE support.

🔌

Meerdere verbindingen

Verbind via Serial, BLE of TCP. Automatische reconnect met exponential backoff bij connectie verlies.

📚

Event-driven

Subscribe op specifieke events met filters. Reageer real-time op berichten, advertisements, ACKs en meer.

🔄

Actieve ontwikkeling

Library wordt actief onderhouden door de MeshCore community. Open source op GitHub.

🌐

Integratie mogelijkheden

Makkelijk te integreren met andere async Python libraries, databases, en web frameworks.

Betrouwbaar

Commands retourneren Event objects met duidelijke error handling. Auto message fetching voor betrouwbare ontvangst.

Veelgestelde vragen

Welke Python versie heb ik nodig?

Python 3.10 of hoger is vereist. Controleer met python --version of python3 --version. Download Python van python.org als je een oudere versie hebt.

Hoe verbind ik via Bluetooth?

Pair eerst je apparaat via bluetoothctl op Linux. Dan gebruik je MeshCore.create_ble("MAC:ADDRESS"). Voor apparaten met PIN gebruik je de pin parameter.

Waarom zijn alle methods async?

De meshcore library gebruikt asyncio voor non-blocking communicatie. Dit maakt het mogelijk om meerdere operaties tegelijk uit te voeren en efficiënt te wachten op responses zonder te blokkeren.

Hoe handel ik errors af?

Alle commands retourneren een Event object. Check result.type == EventType.ERROR om errors te detecteren. De result.payload bevat dan de error message.

Kan ik meerdere nodes tegelijk aansturen?

Ja! Maak meerdere MeshCore instances aan, elk verbonden met een andere node. Dankzij async kun je ze parallel gebruiken.

Waar vind ik meer documentatie?

Check de GitHub repo: github.com/meshcore-dev/meshcore_py. De README heeft uitgebreide voorbeelden. Ook de meshcore-cli source code is een goede referentie.

Start met Python development

Klaar om custom MeshCore applicaties te bouwen? Installeer de meshcore library en begin met experimenteren.