Development & Scripting

MeshCore Python API verwenden

Erstellen Sie Custom Applications und Scripts mit der offiziellen meshcore Python Library für Automatisierung, Monitoring und Integrationen

Was ist die MeshCore Python API?

Die meshcore Python Library gibt Ihnen programmatischen Zugriff auf MeshCore Companion Radio Nodes. Sie können Nachrichten senden, Kontakte verwalten, Telemetrie lesen und Custom Applications bauen. Perfekt für Automatisierung, Monitoring und IoT-Integrationen.

Die Python API kommuniziert mit Ihrem Node über Seriell (USB), Bluetooth Low Energy (BLE) oder TCP/IP. Die Library ist vollständig async-basiert und verwendet eine ereignisgesteuerte Architektur. Open Source und aktiv gepflegt.

In dieser Anleitung lernen Sie, wie Sie die meshcore Library installieren, grundlegende Operationen durchführen und praktische Scripts erstellen. Die API macht es einfach, MeshCore in Ihre Python-Projekte zu integrieren.

Installation von meshcore

Installieren Sie die Library über pip (Python 3.10+ erforderlich):

# meshcore Library installieren
pip install meshcore

# Oder über pipx (empfohlen für CLI-Tools)
pipx install meshcore-cli

# Installation verifizieren
python -c "import meshcore; print('meshcore installiert!')"

Unter Linux benötigen Sie möglicherweise zusätzliche Rechte für Serial-Port-Zugriff. Fügen Sie sich zur dialout-Gruppe hinzu: sudo usermod -a -G dialout $USER (und melden Sie sich neu an). Für BLE müssen Sie Ihr Gerät zuerst über bluetoothctl koppeln.

Grundlegende Verwendung

Die meshcore Library ist async-basiert. Hier ein einfaches Beispiel zum Verbinden und Senden einer Nachricht:

import asyncio
from meshcore import MeshCore, EventType

async def main():
    # Verbinden über USB Serial
    meshcore = await MeshCore.create_serial("/dev/ttyUSB0")

    # Device Info abrufen
    result = await meshcore.commands.send_device_query()
    if result.type != EventType.ERROR:
        print(f"Verbunden mit: {result.payload}")

    # Kontakte abrufen
    contacts = await meshcore.commands.get_contacts()
    print(f"Anzahl Kontakte: {len(contacts.payload)}")

    # Nachricht an ersten Kontakt senden
    if contacts.payload:
        contact = contacts.payload[0]
        await meshcore.commands.send_msg(contact, "Hallo aus Python!")

    # Verbindung schließen
    await meshcore.disconnect()

asyncio.run(main())

Dieses Script verbindet über USB, ruft Device Info und Kontakte ab und sendet eine Nachricht. Alle Commands sind async und geben ein Event-Objekt mit Type und Payload zurück.

Praktische Anwendungen

🤖

Chatbots

Bauen Sie einen Bot, der automatisch auf Nachrichten antwortet. Zum Beispiel einen Weather Bot, Info Bot oder Admin Bot für Netzwerk-Management.

📊

Monitoring Dashboards

Sammeln Sie Telemetrie von allen Nodes und visualisieren Sie in Grafana, InfluxDB oder einem Custom Dashboard. Echtzeit-Netzwerk-Health-Monitoring.

🔔

Alert-Systeme

Senden Sie Benachrichtigungen per E-Mail, Telegram, Discord, wenn bestimmte Events auftreten. Zum Beispiel: niedriger Batteriestand, Node offline, Sensor-Alarm.

🏠

Home Automation

Integrieren Sie MeshCore mit Home Assistant, Node-RED oder Domoticz. Lösen Sie Automatisierungen basierend auf Mesh-Nachrichten aus.

📡

Gateway Scripts

Bridge zwischen MeshCore und anderen Systemen: MQTT Broker, REST API, Datenbank. Zentralisieren Sie Daten von mehreren Nodes.

🧪

Testing & Debugging

Automatische Tests für Netzwerk-Reichweite, Latenz, Paketverlust. Debug-Tools für Troubleshooting.

Code-Beispiele

1. Ereignisbasierte Nachrichten empfangen

Abonnieren Sie Events, um Nachrichten in Echtzeit zu empfangen:

import asyncio
from meshcore import MeshCore, EventType

async def handle_message(event):
    """Callback für eingehende Nachrichten"""
    msg = event.payload.get("text", "")
    sender = event.payload.get("pubkey_prefix", "unbekannt")
    print(f"[{sender}]: {msg}")

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

    # Nachrichten abonnieren
    meshcore.subscribe(EventType.CONTACT_MSG_RECV, handle_message)

    # Auto Message Fetching starten
    await meshcore.start_auto_message_fetching()

    print("Warte auf Nachrichten... (Strg+C zum Beenden)")
    try:
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        await meshcore.disconnect()

asyncio.run(main())

2. Verbinden über verschiedene Methoden

Die Library unterstützt Serial, BLE und TCP-Verbindungen:

from meshcore import MeshCore

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

# Über Bluetooth Low Energy
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB")
# Mit PIN-Pairing
meshcore = await MeshCore.create_ble("12:34:56:78:90:AB", pin="123456")

# Über TCP/IP (wenn Node TCP-Server läuft)
meshcore = await MeshCore.create_tcp("192.168.1.100", 4000)

3. Kontakte verwalten

Rufen Sie Kontakte ab und suchen Sie nach Name oder Key:

import asyncio
from meshcore import MeshCore, EventType

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

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

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

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

    # Kontakt nach Name suchen
    contact = meshcore.get_contact_by_name("MeinNode")
    if contact:
        await meshcore.commands.send_msg(contact, "Hallo!")

    await meshcore.disconnect()

asyncio.run(main())

Vorteile der meshcore Library

🐍

Modernes Python

Vollständig async/await-basiert mit Python 3.10+. Sauberes API-Design mit Type Hints und guter IDE-Unterstützung.

🔌

Mehrere Verbindungen

Verbinden Sie über Serial, BLE oder TCP. Automatische Wiederverbindung mit Exponential Backoff bei Verbindungsverlust.

📚

Ereignisgesteuert

Abonnieren Sie spezifische Events mit Filtern. Reagieren Sie in Echtzeit auf Nachrichten, Advertisements, ACKs und mehr.

🔄

Aktive Entwicklung

Library wird aktiv von der MeshCore Community gepflegt. Open Source auf GitHub.

🌐

Integrationsmöglichkeiten

Einfach zu integrieren mit anderen async Python Libraries, Datenbanken und Web-Frameworks.

Zuverlässig

Commands geben Event-Objekte mit klarem Error Handling zurück. Auto Message Fetching für zuverlässigen Empfang.

Häufig gestellte Fragen

Welche Python-Version brauche ich?

Python 3.10 oder höher ist erforderlich. Prüfen Sie mit python --version oder python3 --version. Laden Sie Python von python.org herunter, wenn Sie eine ältere Version haben.

Wie verbinde ich über Bluetooth?

Koppeln Sie zuerst Ihr Gerät über bluetoothctl unter Linux. Dann verwenden Sie MeshCore.create_ble("MAC:ADDRESS"). Für Geräte mit PIN verwenden Sie den pin-Parameter.

Warum sind alle Methoden async?

Die meshcore Library verwendet asyncio für nicht-blockierende Kommunikation. Dies ermöglicht es, mehrere Operationen gleichzeitig auszuführen und effizient auf Antworten zu warten, ohne zu blockieren.

Wie behandle ich Fehler?

Alle Commands geben ein Event-Objekt zurück. Prüfen Sie result.type == EventType.ERROR, um Fehler zu erkennen. result.payload enthält dann die Fehlermeldung.

Kann ich mehrere Nodes gleichzeitig steuern?

Ja! Erstellen Sie mehrere MeshCore-Instanzen, jeweils verbunden mit einem anderen Node. Dank async können Sie sie parallel nutzen.

Wo finde ich mehr Dokumentation?

Schauen Sie sich das GitHub Repo an: github.com/meshcore-dev/meshcore_py. Die README enthält ausführliche Beispiele. Auch der meshcore-cli Quellcode ist eine gute Referenz.

Starten Sie mit Python-Entwicklung

Bereit, Custom MeshCore Applications zu bauen? Installieren Sie die meshcore Library und beginnen Sie zu experimentieren.