Usar la API Python de MeshCore
Crea apps y scripts con la libreria oficial de MeshCore para automatizacion, monitoreo e integraciones
Que es la API Python de MeshCore?
La libreria de Python de MeshCore da acceso programatico a nodos MeshCore. Puedes enviar mensajes, administrar contactos, leer telemetria y construir apps custom. Ideal para automatizacion, monitoreo e integraciones IoT.
La API se comunica con tu nodo via serial (USB), Bluetooth Low Energy (BLE) o TCP/IP. La libreria es async y usa arquitectura orientada a eventos. Es open source y se mantiene activa.
Esta guia explica como instalar la libreria, hacer operaciones basicas y crear scripts practicos. Facil integrar MeshCore en proyectos Python.
Instalacion de MeshCore
Instala via pip (requiere Python 3.10+):
# Install MeshCore library
pip install MeshCore
# Or via pipx (recommended for CLI tools)
pipx install MeshCore-cli
# Verify installation
python -c "import MeshCore; print('MeshCore installed!')"
En Linux puedes necesitar permisos adicionales para acceso al puerto serial. Agregate al grupo dialout: sudo usermod -a -G dialout $USER (y vuelve a iniciar sesion). Para BLE, primero empareja el dispositivo con bluetoothctl.
Uso basico
La libreria es async. Ejemplo simple para conectar y enviar un mensaje:
import asyncio
from MeshCore import MeshCore, EventType
async def main():
# Connect via USB serial
MeshCore = await MeshCore.create_serial("/dev/ttyUSB0")
# Get device info
result = await MeshCore.commands.send_device_query()
if result.type != EventType.ERROR:
print(f"Connected to: {result.payload}")
# Get contacts
contacts = await MeshCore.commands.get_contacts()
print(f"Number of contacts: {len(contacts.payload)}")
# Send message to first contact
if contacts.payload:
contact = contacts.payload[0]
await MeshCore.commands.send_msg(contact, "Hello from Python!")
# Close connection
await MeshCore.disconnect()
asyncio.run(main())
Este script conecta por USB, obtiene info y contactos, y manda un mensaje. Todo es async y regresa un Event con type y payload.
Aplicaciones practicas
Chatbots
Crea un bot que responda automaticamente: clima, info o admin bot para gestion.
Dashboards de monitoreo
Recolecta telemetria y visualiza en Grafana/InfluxDB o un dashboard propio. Salud de red en tiempo real.
Sistemas de alertas
Enviar notificaciones a email, Slack o Discord cuando pasa algo: bateria baja, nodo offline, alarma de sensor.
Automatizacion del hogar
Integrar con Home Assistant, Node-RED o Domoticz. Disparar automatizaciones basadas en mensajes mesh.
Scripts gateway
Puente entre MeshCore y otros sistemas: MQTT, REST API o base de datos. Centraliza datos de varios nodos.
Testing y debugging
Pruebas automatizadas de alcance, latencia y perdida de paquetes. Herramientas de diagnostico.
Ejemplos de codigo
1. Recepcion de mensajes basada en eventos
Suscribete a eventos para recibir mensajes en tiempo real:
import asyncio
from MeshCore import MeshCore, EventType
async def handle_message(event):
"""Callback for incoming messages"""
msg = event.payload.get("text", "")
sender = event.payload.get("pubkey_prefix", "unknown")
print(f"[{sender}]: {msg}")
async def main():
MeshCore = await MeshCore.create_serial("/dev/ttyUSB0")
# Subscribe to messages
MeshCore.subscribe(EventType.CONTACT_MSG_RECV, handle_message)
# Start auto message fetching
await MeshCore.start_auto_message_fetching()
print("Listening for messages... (Ctrl+C to stop)")
try:
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
await MeshCore.disconnect()
asyncio.run(main())
2. Conectar por distintos metodos
La libreria soporta Serial, BLE y TCP:
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")
# With PIN pairing
MeshCore = await MeshCore.create_ble("12:34:56:78:90:AB", pin="123456")
# Via TCP/IP (if node runs TCP server)
MeshCore = await MeshCore.create_tcp("192.168.1.100", 4000)
3. Administrar contactos
Obtener contactos y buscar por nombre o clave:
import asyncio
from MeshCore import MeshCore, EventType
async def main():
MeshCore = await MeshCore.create_serial("/dev/ttyUSB0")
# Get all contacts
result = await MeshCore.commands.get_contacts()
if result.type == EventType.ERROR:
print(f"Error: {result.payload}")
return
contacts = result.payload
print(f"=== {len(contacts)} Contacts ===")
for contact in contacts:
print(f" - {contact.name} ({contact.pubkey_prefix})")
# Find contact by name
contact = MeshCore.get_contact_by_name("MyNode")
if contact:
await MeshCore.commands.send_msg(contact, "Hello!")
await MeshCore.disconnect()
asyncio.run(main())
Beneficios de la libreria MeshCore
Python moderno
Basada en async/await (Python 3.10+). API limpia con type hints y buen soporte en IDE.
Multiples conexiones
Conecta via Serial, BLE o TCP. Reconnect automatico con backoff si se cae la conexion.
Orientada a eventos
Suscribete a eventos con filtros. Reacciona en tiempo real a mensajes, anuncios, ACKs y mas.
Desarrollo activo
La comunidad mantiene la libreria. Open source en GitHub.
Integraciones
Facil integrar con otras librerias async, bases de datos y frameworks web.
Confiable
Comandos regresan Events con errores claros. Auto message fetching mejora recepcion.
Preguntas frecuentes
Que version de Python necesito?
Se requiere Python 3.10 o mas. Verifica con python --version o python3 --version. Descarga Python de python.org si tienes una version vieja.
Como conecto por Bluetooth?
Primero empareja en Linux via bluetoothctl. Luego usa MeshCore.create_ble("MAC:ADDRESS"). Para dispositivos con PIN, usa el parametro pin.
Por que todo es async?
La libreria usa asyncio para comunicacion no bloqueante. Permite ejecutar operaciones en paralelo y esperar respuestas sin bloquear.
Como manejo errores?
Todos los comandos regresan un Event. Revisa result.type == EventType.ERROR. El mensaje de error viene en result.payload.
Puedo controlar varios nodos a la vez?
Si. Crea varias instancias de MeshCore, cada una conectada a un nodo. Con async puedes operarlas en paralelo.
Donde veo mas documentacion?
Revisa el repo GitHub: github.com/MeshCore-dev/MeshCore_py. El README tiene ejemplos. El codigo de MeshCore-cli tambien sirve de referencia.
Empezar desarrollo en Python
Listo para crear apps MeshCore? Instala la libreria y empieza a experimentar.