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.