Commit 022cb767 by Lucía Elizo Gómez

readme

parent 3a1d1ad4
......@@ -6,42 +6,47 @@ automáticamente desde una Raspberry Pi y crearlos como Records en la plataforma
## Arquitectura
```
Raspberry Pi ──► POST /biaprint/upload ──► Plugin BiaPrint ──► Record en Kadi4Mat
Raspberry Pi ──► POST /api/biaprint/folder ──► Plugin BiaPrint ──► Record en Kadi4Mat
(multipart/form-data) + archivos adjuntos
api_token + metadata JSON + extras/metadatos
+ files[] (mp4, stl, …) + Collection
Authorization: Bearer <PAT> + extras/métricas
+ folder_name + etiquetas automáticas
+ files[] (mp4, json, ...) + Collection del año
```
## Instalación en el servidor Kadi4Mat
```bash
# Dentro del entorno virtual de Kadi4Mat
# Dentro del entorno virtual de Kadi4Mat (source /venv/bin/activate)
pip install -e /ruta/al/kadi_plugin_biaprint/
# Verificar que Kadi detecta el plugin
flask kadi list-plugins
pip show biaprint
```
## Configuración (kadi.cfg)
## Configuración en /opt/kadi/config/kadi.py
```python
# Token que la Pi debe enviar para autenticarse
BIAPRINT_API_TOKEN = "pat_286fd4dd7b415a0448c4d9be052a509adf1ac396494613fb"
PLUGINS = ["...", "biaprint"]
# Identifier de la Collection donde se añadirán los Records
# (debe existir previamente en Kadi4Mat)
BIAPRINT_COLLECTION = "biaprint-trabajos"
PLUGIN_CONFIG = {
"biaprint": {
"host": "https://tu-kadi.dominio.com",
"upload_dir": "/tmp/biaprint_uploads",
},
}
```
# Directorio temporal para los archivos durante el upload
BIAPRINT_UPLOAD_DIR = "/tmp/biaprint_uploads"
Reiniciar tras cualquier cambio:
```bash
sudo systemctl restart kadi-uwsgi
```
## Endpoints disponibles
| Método | Ruta | Descripción |
|--------|--------------------|----------------------------------------------|
| GET | /biaprint/health | Comprobación rápida (sin autenticación) |
| POST | /biaprint/upload | Recibe archivos y crea/actualiza un Record |
| Método | Ruta | Autenticación | Descripción |
|--------|------------------------|---------------------|------------------------------------------|
| GET | /biaprint/health | ninguna | Comprobación de que el plugin está activo|
| POST | /api/biaprint/folder | Bearer PAT (Token) | Recibe una sesión y crea el Record |
## Formato del JSON de metadatos
......@@ -59,12 +64,84 @@ BIAPRINT_UPLOAD_DIR = "/tmp/biaprint_uploads"
}
```
## Qué hace el endpoint /api/biaprint/folder
1. Lee el archivo `session_data.json` incluido en `files[]` y extrae métricas (diccionario)
2. Genera etiquetas según material, temperatura, duración y estado
3. Busca o crea la colección del año actual (ej: "2026")
4. Crea el Record con título, descripción, métricas como metadatos y etiquetas
5. Vincula el Record a la colección
6. Sube todos los archivos al Record, **excluyendo** las fotos de `cam1/` y `cam2/`
## Etiquetas automáticas generadas
|`impresion-3d`, `klipper`|
| Material detectado en nombre del gcode | `PLA`, `PETG`, `ABS`, etc. |
| Modelo de impresora en nombre del gcode | `prusa-mk3s`, `prusa-mk4`, etc. |
| Hotend ≥ 240 °C | `alta-temperatura` |
| Hotend ≤ 200 °C | `baja-temperatura` |
| Cama caliente activa | `cama-caliente` |
| Sin cama caliente | `sin-cama-caliente` |
| Duración < 10 min | `impresion-corta` |
| Duración 10–60 min | `impresion-media` |
| Duración > 60 min | `impresion-larga` |
| `state == "complete"` | `Impresion-completa` |
| `state == "cancelled"` o `"error"` | `Impresion-incompleta` |
## Estructura esperada de la carpeta
```
sesion_2026-05-28/
├── session_data.json ← telemetría de la sesión (lista de samples)
├── video.mp4 ← vídeo de la impresión
├── cam1/ ← fotos de cámara 1 (se excluyen del upload)
│ └── frame_000001.jpg
└── cam2/ ← fotos de cámara 2 (se excluyen del upload)
└── frame_000001.jpg
```
## Formato de session_data.json
Lista de samples, cada uno con esta estructura:
```json
[
{
"wall_time_utc": "2026-05-28T10:00:00+00:00",
"printer": {
"estado": {
"filename": "pieza_0.2mm_PLA_MK3S_1h.gcode",
"state": "complete",
"print_duration_s": 3600,
"filament_used_mm": 1500
},
"hotend": { "temp_c": 215.0, "target_c": 215 },
"cama": { "temp_c": 60.0, "target_c": 60 }
}
}
]
```
## Ejemplo de llamada desde curl
```bash
curl -X POST https://kadi.tudominio.com/biaprint/upload \
-H "Authorization: Bearer pat_ccc6bfdb17f9ff7c1bb271fe997eafee3b91561c67405ea9" \
-F "metadata={\"job_name\":\"pieza-test\",\"material\":\"PLA\"}" \
-F "files[]=@/ruta/al/video.mp4" \
-F "files[]=@/ruta/al/config.json"
curl -k -X POST https://kadi.tudominio.com/api/biaprint/folder \
-H "Authorization: Bearer pat_xxx..." \
-F "folder_name=sesion-2026-05-28" \
-F "files[]=@/ruta/session_data.json" \
-F "files[]=@/ruta/video.mp4"
```
## Respuesta exitosa (201)
```json
{
"record_identifier": "sesion-2026-05-28",
"record_id": 42,
"collection_title": "2026",
"collection_id": 3,
"collection_created": false,
"files_saved": ["session_data.json", "video.mp4"]
}
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment