Development & scripting

MeshCore Python API gebruiken

Bouw eigen tools met de officiële MeshCore Python library voor automatisatie, monitoring en koppelingen.

Wat kan je met de MeshCore Python API?

Met de meshcore library stuur je nodes programmatisch aan: berichten versturen, contacten uitlezen, events verwerken en telemetrie ophalen. Handig voor eigen dashboards, bots en integraties.

De API ondersteunt USB serial, BLE en TCP. Alles is async opgezet, zodat je meerdere taken tegelijk kan afhandelen zonder blokkering.

In deze gids krijg je een praktische basis om snel scripts te bouwen die bruikbaar zijn in een Belgische MeshCore-opstelling.

Installatie van meshcore

Gebruik Python 3.10+ en installeer via pip:

# Library installeren
pip install meshcore

# CLI tool via pipx
pipx install meshcore-cli

# Snelle controle
python -c "import meshcore; print('meshcore OK')"

Op Linux heb je vaak serial rechten nodig (dialout). Voor BLE-koppelingen controleer je eerst de bluetooth pairing.

Basisgebruik

Eenvoudig voorbeeld: verbinden, info opvragen en bericht sturen.

import asyncio
from meshcore import MeshCore, EventType

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

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

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

    if contacts.payload:
        contact = contacts.payload[0]
        await meshcore.commands.send_msg(contact, "Test vanuit Python")

    await meshcore.disconnect()

asyncio.run(main())

Alle commando's geven een Event terug. Controleer altijd het event type voor foutafhandeling.

Waarvoor wordt dit gebruikt?

1

Automatische berichtbots

Reageer automatisch op inkomende berichten of commando's.

2

Netwerkmonitoring

Verzamel telemetrie en stuur die door naar dashboards of logging.

3

Alarm- en notificatieflows

Koppel events aan Telegram, mail of interne waarschuwingen.

4

Domotica-integratie

Gebruik MeshCore-events als triggers in Home Assistant of Node-RED.

5

Gateway scripts

Brug tussen MeshCore en externe systemen zoals MQTT of REST APIs.

6

Test & troubleshooting

Automatiseer bereiktests, latencychecks en functionele regressietests.

Codevoorbeelden

1. Event-gebaseerd berichten ontvangen

Luister op nieuwe berichten en verwerk in real-time:

import asyncio
from meshcore import MeshCore, EventType

async def handle_message(event):
    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")
    meshcore.subscribe(EventType.CONTACT_MSG_RECV, handle_message)
    await meshcore.start_auto_message_fetching()

    try:
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        await meshcore.disconnect()

asyncio.run(main())

2. Verbinden via meerdere transporten

Serial, BLE of TCP naargelang je setup:

from meshcore import MeshCore

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

# BLE
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB")
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB", pin="123456")

# TCP
meshcore = await MeshCore.create_tcp("192.168.1.100", 4000)

3. Contacten ophalen en gebruiken

Lees de contactenlijst en stuur gericht berichten:

import asyncio
from meshcore import MeshCore, EventType

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

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

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

    contact = meshcore.get_contact_by_name("MijnNode")
    if contact:
        await meshcore.commands.send_msg(contact, "Hallo vanaf script")

    await meshcore.disconnect()

asyncio.run(main())

Sterke punten van de library

A

Async-first architectuur

Efficiënt werken met meerdere nodes en events tegelijk.

B

Meerdere verbindingstypes

USB, BLE en TCP in dezelfde API-structuur.

C

Event-driven model

Reageer direct op nieuwe berichten en statuswijzigingen.

D

Actieve community

Open source en bruikbaar in praktijkprojecten.

E

Makkelijke integratie

Koppelbaar aan bestaande Python stacks en services.

F

Duidelijke foutafhandeling

Event objecten maken diagnose en retries voorspelbaar.

Veelgestelde vragen

Welke Python-versie is nodig?

Gebruik Python 3.10 of nieuwer voor volledige compatibiliteit.

Hoe start ik met BLE?

Pair je toestel eerst correct en gebruik daarna create_ble() met het juiste adres.

Waarom async?

Omdat communicatie event-driven is en je zo niet blokkeert tijdens I/O.

Hoe detecteer ik errors?

Controleer result.type == EventType.ERROR en log de payload.

Kan ik meerdere nodes parallel aansturen?

Ja. Gebruik meerdere MeshCore-instances binnen dezelfde event loop.

Waar vind ik extra voorbeelden?

Bekijk de officiële repository en CLI broncode voor actuele patronen.

Start met je eerste script

Gebruik de voorbeelden als basis en bouw stap voor stap je eigen integratie.