04-oct: [conocimiento] sistema tareas hijas (Drive) + helpers + bot Ines VPS documentado
This commit is contained in:
109
docs/tareas-hijas-google-drive.md
Normal file
109
docs/tareas-hijas-google-drive.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# Sistema de tareas de las hijas (Inés y Carolina) — Google Drive + IA
|
||||
|
||||
Documentación para **reproducir** el sistema en cualquier equipo. Última revisión: 04-oct-2026 (portátil).
|
||||
|
||||
---
|
||||
|
||||
## 1. Qué es
|
||||
|
||||
Ecosistema para gestionar las tareas escolares de las hijas:
|
||||
- Los **correos de Classroom de Inés** se vigilan y avisan por Telegram.
|
||||
- Las **tareas entregadas** (fotos/escaneos) se suben a **Google Drive** por asignatura.
|
||||
- El asistente (opencode/IA) **lee** los documentos, **corrige** y **genera hojas nuevas** de repaso.
|
||||
|
||||
## 2. Cuentas y credenciales
|
||||
|
||||
| Elemento | Valor |
|
||||
|----------|-------|
|
||||
| Google Drive (personal) | `juan.minguez.sanz@gmail.com` |
|
||||
| Proyecto Google Cloud | `tareasnenas` |
|
||||
| Client secret | `biblioteca_negocio_prolongo/google/client_secret_personal.json` |
|
||||
| Token OAuth | `biblioteca_negocio_prolongo/google/token_personal.json` |
|
||||
| Scopes | `drive`, `gmail.readonly`, `documents` |
|
||||
| Correo escolar de Inés | `ines.minguezlarhziale@alumnos.fundacionvictoria.edu.es` |
|
||||
|
||||
> El `token_personal.json` **se refresca solo** al usarlo (guardar el fichero tras refrescar). Acceso válido desde portátil y sobremesa sin depender del otro equipo.
|
||||
|
||||
## 3. Estructura en Google Drive
|
||||
|
||||
```
|
||||
TAREAS/
|
||||
├── CAROLINA/
|
||||
│ ├── LENGUA/
|
||||
│ │ ├── Por hacer/ ← hojas en blanco (SIN soluciones) para que las haga
|
||||
│ │ └── Respondido/ ← lo ya entregado (escaneos/PDF) y el modelo hecho
|
||||
│ └── MATEMATICAS/
|
||||
└── INES/
|
||||
├── FISICA Y QUÍMICA/<Tema>/ → Doc "FEEDBACK ..." + fotos
|
||||
├── HISTORIA Y GEOGRAFÍA/ → Doc "Tareas - HISTORIA Y GEOGRAFÍA"
|
||||
├── LENGUA/ → Doc "Tareas - LENGUA"
|
||||
├── MATEMÁTICAS/ · INGLÉS/ · E.F/ · MÚSICA/ · PLÁSTICA/ · RELIGIÓN/ · TECNOLOGÍA/ · VALORES/
|
||||
```
|
||||
|
||||
### Convención de organización (IMPORTANTE)
|
||||
- Cada asignatura tiene subcarpetas **`Por hacer`** (pendiente) y **`Respondido`** (hecho).
|
||||
- Cuando algo se responde, se mueve de `Por hacer` a `Respondido` (no se deja mezclado).
|
||||
- Las hojas para las niñas van **sin soluciones**; el asistente guarda las respuestas correctas para corregir.
|
||||
|
||||
### Formato de los docs "Tareas - <asignatura>"
|
||||
```
|
||||
TAREAS INES - <ASIGNATURA>
|
||||
Profesor/a: <nombre>
|
||||
Actualizado: DD/MM/AAAA
|
||||
|
||||
TAREAS Y ACTIVIDADES
|
||||
========================================
|
||||
[Pendiente|Pasada|Revisar] <titulo>
|
||||
Tipo: Anuncio|Tarea|Material | Fecha: DD mes AAAA
|
||||
```
|
||||
|
||||
## 4. Bot del VPS (Inés) — `classroom-watcher`
|
||||
|
||||
Servicio systemd en el VPS Contabo que vigila el correo de Inés.
|
||||
|
||||
| Dato | Valor |
|
||||
|------|-------|
|
||||
| Ruta | `/opt/classroom_watcher/` |
|
||||
| Script | `classroom_watcher.py` |
|
||||
| Servicio | `classroom-watcher.service` (activo, enabled) |
|
||||
| Ficheros | `token_personal.json`, `client_secret_personal.json`, `.env` (`TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID`), `seen_messages.json`, `pending_alerts.json`, `watcher.log` |
|
||||
| Filtro Gmail | `from:ines.minguezlarhziale classroom (tarea OR "Nueva tarea" OR "fecha de entrega" OR "Nuevo anuncio")` |
|
||||
| Horario avisos | 15:00–22:00 |
|
||||
| Revisión Gmail | cada 5 min |
|
||||
| Reaviso | cada 30 min hasta que el usuario responde **S** |
|
||||
| Asignatura | `detectar_asignatura()` mapea profesor→asignatura y si no, por asunto |
|
||||
|
||||
**Estado actual:** solo **avisa por Telegram**. **Pendiente:** volcar los correos/tareas a Google Drive (es lo que faltaba).
|
||||
|
||||
### Gestión del servicio (en el VPS)
|
||||
```bash
|
||||
systemctl status classroom-watcher
|
||||
systemctl restart classroom-watcher
|
||||
journalctl -u classroom-watcher -n 50 --no-pager
|
||||
tail -n 50 /opt/classroom_watcher/watcher.log
|
||||
```
|
||||
|
||||
### Otros servicios relacionados en el VPS
|
||||
- `/opt/email-watcher/` (`email-watcher.service`, **disabled**) — incidencia EmailService FaccsaMissa de `jminguez@prolongo.es` → grupo IDD Telegram (ámbito empresa, NO hijas).
|
||||
|
||||
## 5. Spec 004 (diseño completo, en pausa)
|
||||
|
||||
`biblioteca_negocio_prolongo/specs/004-monitor-correo-ines/` (spec + plan + tasks):
|
||||
- Flujo A: resumen IA de correos escolares → Discord DM de Inés + aviso Telegram al padre.
|
||||
- Flujo B: entrega de foto en Drive → evaluación IA → mueve a "hechas" o avisa corrección.
|
||||
- Prerequisitos manuales listados en `plan.md` (Azure AD Graph, Service Account, bot Discord...).
|
||||
|
||||
## 6. Cómo reproducirlo en otro equipo
|
||||
|
||||
1. Clonar `biblioteca_conocimiento_laboratorio` y `biblioteca_negocio_prolongo`.
|
||||
2. Asegurar `google/client_secret_personal.json` y `google/token_personal.json` (o regenerar con `python google/google_auth.py`).
|
||||
3. Instalar deps: `pip install google-api-python-client google-auth-oauthlib pymupdf`.
|
||||
4. Usar `scripts/tareas_hijas/drive.py` (helpers) para listar/leer/crear/mover en Drive.
|
||||
5. Para el bot: desplegar `/opt/classroom_watcher` en el VPS + `classroom-watcher.service` (ver §4).
|
||||
6. Para corregir: descargar los PDF/imágenes, convertirlos a PNG (`pymupdf`) y analizarlos con el MCP **image-vision**; corregir contra la hoja.
|
||||
|
||||
## 7. Notas / gotchas
|
||||
- La consola Windows falla con acentos (`charmap`): usar `python -X utf8` o exportar a fichero.
|
||||
- Para crear Google Docs desde HTML: `files().create(mimeType='application/vnd.google-apps.document', media=text/html)`.
|
||||
- Quitar soluciones de un Doc existente: `documents().batchUpdate` con `deleteContentRange` desde la cabecera "SOLUCIONES".
|
||||
- Mover ficheros: `files().update(fileId, addParents, removeParents)`.
|
||||
Reference in New Issue
Block a user