Printly es un sistema de automatización end-to-end que conecta una tienda online con una impresora 3D física: un cliente compra un modelo, y la impresión se lanza automáticamente sin intervención manual.
Nació como Trabajo de Fin de Grado (Grado Medio SMR, IES Fidiana), con la intención de convertirlo en un negocio real.
El sistema conecta cuatro piezas que normalmente no hablan entre sí: una tienda WooCommerce en hosting compartido, un túnel a internet, una API local en Python, y el protocolo propietario de una impresora Elegoo — todo reverse-engineered desde cero.
- El cliente compra en la tienda (WordPress + WooCommerce, hosteado en AlwaysData)
- Un plugin PHP personalizado detecta el cambio de estado del pedido a "processing"
- El plugin llama, vía un túnel ngrok, a una API Flask corriendo en casa
- La API sube el gcode correspondiente a la impresora
- La API lanza la impresión mediante WebSocket
La Elegoo Centauri Carbon no expone una API pública documentada. Usando las DevTools del navegador mientras se interactuaba con su interfaz web, se reconstruyó el protocolo:
- Subida de archivo:
POST /uploadFile/upload— multipart con camposTotalSize,Uuid,Offset,CheckyS-File-MD5para verificar la integridad del gcode subido - Lanzar impresión: WebSocket en el puerto
3030, comandoCmd 128con elFilenamedel gcode ya subido, confirmado por una respuestaAck:0
Este proceso sustituyó un enfoque inicial basado en Docker + OctoEverywhere, descartado por limitaciones para exponer la API Moonraker de forma fiable.
| Componente | Descripción |
|---|---|
printly_api.py |
API Flask local que recibe la orden de impresión y habla con la impresora |
elegoo-woocommerce-autoprint.php |
Plugin de WordPress que engancha el flujo de pedidos de WooCommerce con la API |
- Tienda: WordPress + WooCommerce (AlwaysData)
- Backend local: Python (Flask)
- Comunicación: ngrok (túnel), WebSocket, HTTP multipart
- Impresora: Elegoo Centauri Carbon
Automatización end-to-end funcionando: desde la compra hasta la impresión lanzada, sin intervención manual.
Este proyecto usa variables de entorno para las credenciales. Copia .env.example a .env y rellena tus propios valores antes de ejecutar la API.
pip install -r requirements.txt
cp .env.example .env
python printly_api.pyPara uso comercial de modelos de terceros, son válidas las licencias CC0, BY y BY-SA. BY-ND permite su uso pero no modificar ni escalar el modelo. BY-NC queda excluida por ser explícitamente no comercial.
