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.