Files
Dashboard-CAS/docs/plans/2026-02-15-tv-dashboard-design.md
I. Alcaraz Salazar b9da8aadac Add TV dashboard design document
Define architecture, views, and stack for office TV dashboard
with network topology, Odoo tasks/calendar, and service credentials.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 01:49:48 +00:00

190 lines
5.8 KiB
Markdown

# TV Dashboard para Oficina - Documento de Diseno
**Fecha**: 2026-02-15
**Dispositivo objetivo**: TCL 55" 4K (3840x2160)
**Modo de uso**: Kiosko 24/7, rotacion automatica de vistas
## Resumen
Dashboard web para Smart TV de oficina que muestra topologia de red con credenciales, tareas de proyectos desde Odoo 19 y calendario de actividades desde Odoo Calendar. Tres vistas a pantalla completa rotan automaticamente.
## Arquitectura
### Stack
- **Frontend**: React 18 + TypeScript + Vite + Tailwind CSS + D3.js + Framer Motion
- **Backend**: Python 3.11+ + FastAPI + python-nmap + PyYAML + websockets
- **Odoo**: Version 19 Community, servidor local, conexion via JSON-RPC
- **Despliegue**: Docker Compose (backend + frontend/Nginx)
### Diagrama
```
Smart TV (Chromium 4K)
│ HTTP / WebSocket
FastAPI Backend
├── Odoo Module (JSON-RPC) ──► Odoo 19 Server
├── Network Scanner (nmap) ──► Red Local
└── Config Manager (YAML) ──► config/services.yaml
```
### Comunicacion
- REST API para carga inicial de datos
- WebSocket para actualizaciones en tiempo real
- Intervalos de refresh: Odoo 5 min, red 10 min, ping servicios 1 min
## Vistas rotativas
Tres vistas a pantalla completa, cada una visible durante 30 segundos (configurable). Transicion con fade suave.
### Vista 1: Topologia de Red
Grafo interactivo (D3.js force-directed) con nodos representando dispositivos de red.
**Cada nodo muestra:**
- Nombre del dispositivo
- Direccion IP
- Usuario
- Contrasena (oculta por defecto `****`, se revela con click)
- URL publica (configurada manualmente)
- Indicador de estado (online/offline via ping)
**Fuentes de datos:**
- Auto-descubrimiento via nmap (detecta dispositivos nuevos)
- Configuracion manual en `config/services.yaml` (define nombres, credenciales, URLs, conexiones)
- Modo hibrido: dispositivos descubiertos automaticamente pueden editarse manualmente
**Barra de estado inferior:** Total nodos online, nodos offline, ultimo refresh.
### Vista 2: Tareas por Proyecto (Odoo)
Vista Kanban a pantalla completa con datos del modulo Project de Odoo 19.
**Estructura:**
- Filas: un proyecto por fila
- Columnas: etapas del proyecto (Nuevo, En Progreso, Hecho, etc.)
- Cada tarjeta muestra: titulo, responsable asignado, prioridad (color), fecha limite
**Datos desde Odoo:**
- `project.project` para proyectos activos
- `project.task` para tareas con etapa, asignado, prioridad, deadline
### Vista 3: Calendario (Odoo)
Agenda vertical con los eventos del dia actual, manana, y resumen de la semana.
**Estructura:**
- Seccion "Hoy": lista cronologica de eventos con hora, titulo, ubicacion
- Seccion "Manana": misma estructura
- Seccion "Esta semana": lista resumida de eventos restantes
**Datos desde Odoo:**
- `calendar.event` filtrado por rango de fechas
## Configuracion
### services.yaml (topologia y credenciales)
```yaml
nodes:
- name: "Router Principal"
ip: "192.168.1.1"
username: "admin"
password: "router-password"
icon: "router"
connections: []
- name: "Servidor Odoo"
ip: "192.168.1.10"
username: "root"
password: "server-password"
public_url: "https://odoo.miempresa.com"
icon: "server"
connections: ["Router Principal"]
network_scan:
enabled: true
subnet: "192.168.1.0/24"
interval_minutes: 10
```
### settings.yaml (configuracion general)
```yaml
display:
resolution: "3840x2160"
rotation_interval_seconds: 30
transition: "fade"
theme: "dark"
odoo:
url: "http://192.168.1.10:8069"
database: "mi_base"
username: "admin"
password: "odoo-password"
refresh:
odoo_minutes: 5
network_minutes: 10
ping_seconds: 60
```
## Estructura del proyecto
```
Dashboard/
├── backend/
│ ├── main.py
│ ├── requirements.txt
│ ├── config/
│ │ ├── services.yaml
│ │ └── settings.yaml
│ ├── modules/
│ │ ├── odoo_client.py
│ │ ├── network_scanner.py
│ │ └── config_manager.py
│ └── routers/
│ ├── calendar.py
│ ├── tasks.py
│ ├── network.py
│ └── services.py
├── frontend/
│ ├── package.json
│ ├── vite.config.ts
│ ├── tailwind.config.js
│ ├── src/
│ │ ├── App.tsx
│ │ ├── main.tsx
│ │ ├── components/
│ │ │ ├── Layout/
│ │ │ │ ├── Header.tsx
│ │ │ │ └── ViewRotator.tsx
│ │ │ ├── Topology/
│ │ │ │ ├── NetworkGraph.tsx
│ │ │ │ └── NodeCard.tsx
│ │ │ ├── Tasks/
│ │ │ │ ├── KanbanBoard.tsx
│ │ │ │ └── TaskCard.tsx
│ │ │ └── Calendar/
│ │ │ ├── CalendarView.tsx
│ │ │ └── EventCard.tsx
│ │ ├── hooks/
│ │ │ ├── useOdooData.ts
│ │ │ ├── useWebSocket.ts
│ │ │ └── useRotation.ts
│ │ └── types/
│ │ └── index.ts
│ └── index.html
└── docker-compose.yaml
```
## Decisiones de diseno
1. **4K nativo**: Tipografia base 24px, elementos grandes legibles desde distancia. Sin escalado, usa toda la resolucion.
2. **Tema oscuro**: Reduce fatiga visual en pantalla 24/7 y ahorra energia en pantallas OLED/QLED.
3. **Contrasenas ocultas**: Seguridad basica para ambiente de oficina. Click para revelar.
4. **Hibrido red**: Nmap descubre dispositivos nuevos automaticamente, pero el usuario define nombres, credenciales y conexiones en YAML.
5. **WebSocket**: Actualizaciones push evitan polling excesivo y permiten notificaciones inmediatas de nodos offline.
6. **Docker Compose**: Despliegue reproducible en cualquier servidor de la red local.