Sistema de monitorización de dispositivos Raspberry Pi en red que registra automáticamente las direcciones IP de cada RPi y las muestra en un dashboard web en tiempo real.
Copiar la carpeta ```RPI-CLIENT``en la raspberry
Este proyecto permite centralizar el seguimiento de múltiples Raspberry Pi distribuidas en una red, manteniendo un registro actualizado de sus direcciones IP y mostrándolas en un dashboard web interactivo.
📁 rpi-monitor/
│
├── 📁 backend/ # API FastAPI
│ ├── main.py # Puntos de entrada de la API
│ ├── database.py # Conexión a MySQL
│ ├── models.py # Modelos de datos
│ ├── schemas.py # Esquemas Pydantic
│ ├── requirements.txt # Dependencias Python
│ └── Dockerfile # Contenedor para API
│
├── 📁 frontend/ # Dashboard Streamlit
│ ├── app.py # Aplicación web principal
│ ├── requirements.txt # Dependencias Python
│ └── Dockerfile # Contenedor para frontend
│
├── 📁 docker/ # Configuración Docker
│ └── mysql-init/
│ └── init.sql # Inicialización de BD
│
├── 📁 rpi-client/ # Cliente para Raspberry Pi
│ ├── Dockerfile # Contenedor para RPi
│ ├── docker-compose.yml # Orquestación del cliente
│ ├── requirements.txt # Dependencias Python
│ └── rpi_client.py # Script de envío de datos
│
├── docker-compose.yml # Orquestación principal
└── README.md # Este archivo
Puerto: 8000
- API REST que recibe datos POST de las Raspberry Pi
- Base de datos MySQL almacena: ID, Usuario, IP, Timestamp
- Endpoints:
POST /rpi-data/- Recibir datos de RPiGET /rpi-data/- Obtener todos los registrosGET /rpi-data/{usuario}- Filtrar por usuarioGET /health- Estado del servicio
Puerto: 8501
Dashboard web que muestra:
- Tabla con todos los dispositivos
- Métricas: Total RPi, Usuarios únicos, IPs únicas
- Formulario para añadir manualmente
- Datos ordenados por fecha (más nuevos primero)
Script Python que se ejecuta en cada RPi:
- Detecta IP local con
hostname -I - Envía datos al servidor cada 5 minutos
- Reintentos automáticos en caso de error
- Identificación única por dispositivo
Raspberry Pi → API FastAPI → MySQL → Dashboard Streamlit
↓ ↓ ↓ ↓
Detecta IP Recibe POST Almacena Muestra en
cada datos en BD tiempo real
5 minutos
# 1. Clonar proyecto
git clone <repo>
cd rpi-monitor
# 2. Levantar todos los servicios
docker-compose up --build -d
# 3. Acceder a:
# Dashboard: http://localhost:8501
# API Docs: http://localhost:8000/docs
# MySQL: localhost:8080 (root/password)# 1. En RPi, configurar IP del servidor
cd ~/rpi-client
nano docker-compose.yml # Cambiar SERVER_IP
# 2. Ejecutar cliente
sudo docker-compose up --build -d
# 3. Ver logs
docker logs -f rpi_monitor_clientDB_HOST=mysql
DB_NAME=rpi_db
DB_USER=root
DB_PASSWORD=password
SERVER_IP=192.168.1.100 # IP del servidor
SERVER_PORT=8000 # Puerto de la API
RPI_NAME=rpi_oficina_1 # Nombre único del dispositivo
INTERVAL_SECONDS=300 # Intervalo de envío (5 min)CREATE TABLE rpi_data (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario VARCHAR(100) NOT NULL,
ip VARCHAR(15) NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unique_ip_per_user (usuario, ip)
);Campos:
id: Identificador único autoincrementalusuario: Nombre del dispositivo RPiip: Dirección IP actualtimestamp: Fecha y hora de actualización
- Ir a
http://localhost:8501 - En sidebar: Ingresar Usuario e IP
- Click en "Registrar RPi"
# Ver contenedores
docker-compose ps
# Ver logs del backend
docker-compose logs backend
# Probar API manualmente
curl http://localhost:8000/rpi-data/# En cada RPi, ver logs del cliente
docker logs rpi_monitor_client
# Forzar envío manual
docker exec rpi_monitor_client python rpi_client.py# Verificar que el backend esté corriendo
docker-compose ps | grep backend
# Revisar logs
docker-compose logs backend --tail=50
# Probar conexión a MySQL desde backend
docker exec rpi_backend curl http://localhost:8000/health# En RPi, verificar conexión al servidor
docker exec rpi_monitor_client ping <SERVER_IP>
# Probar envío manual
docker exec rpi_monitor_client python -c "import requests; r=requests.get('http://<SERVER_IP>:8000/'); print(r.status_code)"- Verificar console del navegador (F12)
- Revisar logs del frontend:
docker-compose logs frontend - Verificar CORS en backend
- Monitorización automática - Las RPi envían datos cada 5 min
- Dashboard en tiempo real - Actualización automática
- Base de datos persistente - Histórico de cambios de IP
- Identificación única - Cada RPi tiene nombre único
- Dockerizado - Fácil despliegue y escalabilidad
- API REST documentada - Swagger en
/docs - Interfaz web intuitiva - Streamlit responsive
- Autenticación - Login para dashboard
- Alertas - Notificaciones cuando IP cambia
- Histórico - Gráficos de cambios de IP
- Backup automático - De base de datos
docker exec rpi_mysql mysqldump -u root -ppassword rpi_db > backup_$(date +%Y%m%d).sql# Reconstruir imágenes
docker-compose build --no-cache
# Actualizar contenedores
docker-compose up -d --force-recreate-- Eliminar registros con más de 30 días
DELETE FROM rpi_data WHERE timestamp < NOW() - INTERVAL 30 DAY;# Reiniciar servicio específico
docker-compose restart backend
# Ver uso de recursos
docker stats
# Acceder a MySQL
docker exec -it rpi_mysql mysql -u root -p rpi_db
# Borrar todo y empezar fresco
docker-compose down -v
docker-compose up --build -d