Desarrollo y scripting

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.