Sistema de monitoreo IoT inteligente completamente automático que combina sensores Arduino, captura automática de multimedia desde IP Webcam (Android) vía ngrok, y análisis con Inteligencia Artificial para detectar incendios en tiempo real sin intervención manual.
- API REST para recepción de alertas desde sensores Arduino
- Captura multimedia automática desde IP Webcam (Android) vía ngrok
- Sistema completamente automático - no requiere intervención manual
- Procesamiento con IA mediante Google Vertex AI para detección de fuego/humo
- Captura simultánea de foto (JPG), video (MJPEG) y audio (WAV)
- Almacenamiento en la nube con Google Cloud Storage
- Análisis automático de multimedia con IA al recibir alertas
- Throttling inteligente (60s cooldown) para evitar spam de capturas
- Historial de alertas con análisis de IA incluido
- Interfaz web moderna para monitoreo en tiempo real
- Integración con n8n para envío automático de correos electrónicos
- Sistema de túnel seguro con ngrok para acceso remoto
- Python Flask - Framework web principal
- Google Cloud Platform:
- App Engine (despliegue)
- Cloud Storage (almacenamiento)
- Vertex AI (análisis de IA)
- Arduino - Sensores IoT
- ngrok - Túnel seguro para acceso remoto a IP Webcam
- IP Webcam (Android) - Servidor de cámara local
- Captura automática desde endpoints:
/photo.jpg,/video,/audio.wav
- n8n - Automatización de workflows y envío de emails
- Gmail API - Notificaciones por correo electrónico
- Google Cloud Storage - Almacenamiento de archivos multimedia
- Google Vertex AI - Modelo de detección de fuego/humo
- HTTPS - Comunicación segura
- Python 3.11+
- Cuenta de Google Cloud Platform
- Arduino con sensores de temperatura y luz
- Dispositivo Android con IP Webcam (app gratuita)
- ngrok (para túnel seguro)
- n8n (para automatización de emails)
-
Clonar el repositorio:
git clone <url-del-repositorio> cd proyecto-iot/api-iot
-
Crear entorno virtual:
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate
-
Instalar dependencias:
pip install -r requirements.txt
-
Configurar variables de entorno: Crear archivo
.env:BUCKET_NAME=tu-bucket-name VERTEX_AI_ENDPOINT=https://REGION-aiplatform.googleapis.com/v1/projects/tu-vertex-project-id/locations/REGION/endpoints/tu-endpoint-id:predict ALERT_EMAIL=tu-email@ejemplo.com APP_URL=https://tu-app.appspot.com PHONE_IP=https://tu-ngrok-url.ngrok-free.dev N8N_WEBHOOK_RESULT=https://tu-n8n-instance/webhook/send-result
-
Ejecutar servidor local:
python server.py
El servidor estará disponible en:
http://localhost:5000
- Descargar e instalar IP Webcam desde Google Play Store
- Abrir la app y configurar:
- Puerto:
8080(predeterminado) - Activar servidor web
- Puerto:
- Anotar la IP local (ej:
192.168.1.100:8080)
- Descargar ngrok desde https://ngrok.com
- Crear túnel:
ngrok http http://192.168.1.100:8080
- Copiar la URL HTTPS generada (ej:
https://abc123.ngrok-free.dev)
# Probar foto
curl -I https://tu-ngrok-url.ngrok-free.dev/photo.jpg
# Probar video
curl -I https://tu-ngrok-url.ngrok-free.dev/video
# Probar audio
curl -I https://tu-ngrok-url.ngrok-free.dev/audio.wav-
Autenticarse con Google Cloud:
gcloud auth login gcloud config set project tu-proyecto-id -
Configurar variables de entorno en
app.yaml:env_variables: BUCKET_NAME: "tu-bucket-name" VERTEX_AI_ENDPOINT: "https://REGION-aiplatform.googleapis.com/v1/projects/tu-vertex-project-id/locations/REGION/endpoints/tu-endpoint-id:predict" ALERT_EMAIL: "tu-email@ejemplo.com" APP_URL: "https://tu-app.appspot.com" PHONE_IP: "https://tu-ngrok-url.ngrok-free.dev" N8N_WEBHOOK_RESULT: "https://tu-n8n-instance/webhook/send-result"
-
Desplegar:
gcloud app deploy
-
Verificar despliegue:
gcloud app browse
El Arduino debe enviar datos JSON POST a:
https://tu-app.appspot.com/alert
Formato esperado:
{
"temp": 45.5,
"light": 850,
"status": "alert"
}Umbrales configurados:
- Temperatura: > 30.0°C
- Nivel de luz: > 400
- Throttling: 60 segundos entre capturas automáticas
- Cooldown de 60 segundos entre alertas automáticas
- Evita spam de emails y sobrecarga del sistema
- Solo permite una captura multimedia cada minuto
GET /- Panel de estado del servidorGET /dashboard- Dashboard con historial de alertas y análisisGET /camera- Sistema de captura multimedia inteligentePOST /alert- Recibir alertas del ArduinoGET /status- Estado del servidor (JSON)GET /alertas- Historial de alertas (JSON)
POST /upload/photo- Recibir foto desde dispositivo móvilPOST /upload/video- Recibir video desde dispositivo móvilPOST /upload/audio- Recibir audio desde dispositivo móvilPOST /analyze- Analizar multimedia con Vertex AI
POST /api/test-alert- Simular alerta para pruebasPOST /send-result- Enviar resultado de verificación manual
- Arduino detecta anomalía → Envía alerta con temperatura/luz (>30°C y >400 luz)
- Sistema recibe alerta → Verifica throttling (60s cooldown)
- Captura automática inicia → Foto (JPG), Video (5s MJPEG), Audio (5s WAV)
- Archivos subidos a Cloud Storage → Google Cloud Storage bucket
- Vertex AI analiza automáticamente → Detecta presencia de fuego/humo
- Email de resultado enviado → Confirmación o falsa alarma vía n8n
- Dashboard actualiza → Historial con análisis completo y enlaces a archivos
https://ngrok-url.ngrok-free.dev/photo.jpg- Captura de imagenhttps://ngrok-url.ngrok-free.dev/video- Stream de video MJPEGhttps://ngrok-url.ngrok-free.dev/audio.wav- Stream de audio WAV
- Throttling de 60 segundos entre capturas automáticas
- Evita múltiples emails y sobrecarga del sistema
- Bucket:
tu-bucket-name - Estructura:
gs://tu-bucket-name/ ├── photos/ # Fotos JPG ├── videos/ # Videos WebM └── audio/ # Audio WebM
Los archivos son accesibles públicamente:
https://storage.googleapis.com/tu-bucket-name/photos/
https://storage.googleapis.com/tu-bucket-name/videos/
https://storage.googleapis.com/tu-bucket-name/audio/
- Github: https://github.com/Berly01/Yolo-Fire-Smoke-Detector.git
- Proyecto:
tu-vertex-project-id - Endpoint: Detección de fuego/humo con YOLO v11
- Confianza: Análisis de imágenes y videos
- Características:
- Detección de fuego en tiempo real
- Análisis de audio para sonidos característicos
- Frame-by-frame analysis para videos
- Webhook
/send-alerta: Email cuando se detecta posible incendio - Webhook
/send-result: Email con resultado del análisis de IA
- Emails automáticos con templates HTML profesionales
- Notificaciones en tiempo real
- Links directos a dashboard y cámara
# Verificar que ngrok esté funcionando
curl -I https://tu-ngrok-url.ngrok-free.dev/photo.jpg
# Probar captura automática
curl -X POST https://tu-app.appspot.com/api/test-alert# Simular alerta desde Arduino
curl -X POST https://tu-app.appspot.com/alert \
-H "Content-Type: application/json" \
-d '{"temp": 45.5, "light": 850, "status": "alert"}'# Ver fotos capturadas
gcloud storage ls gs://tu-bucket-name/photos/
# Ver videos capturados
gcloud storage ls gs://tu-bucket-name/videos/
# Ver audio capturado
gcloud storage ls gs://tu-bucket-name/audio/- Dashboard en tiempo real:
https://tu-app.appspot.com/dashboard - Logs de App Engine:
gcloud app logs tail -s default - Monitoreo de bucket:
gsutil ls gs://tu-bucket-name/**
# Verificar si ngrok está corriendo
ps aux | grep ngrok
# Reiniciar túnel ngrok
./start-ngrok.sh
# Verificar conectividad
curl -I https://tu-ngrok-url.ngrok-free.dev/photo.jpg# Ver logs de captura
gcloud app logs tail -s default | grep "PHOTO\|VIDEO\|AUDIO"
# Probar endpoint manualmente
curl -X POST https://tu-app.appspot.com/api/test-alert- Reiniciar ngrok:
./start-ngrok.sh - Obtener nueva URL
- Actualizar
app.yamlcon nueva URL - Re-desplegar:
gcloud app deploy --quiet
La URL de ngrok cambia cada vez que se reinicia el túnel. Si ngrok se detiene o reinicia:
- Ejecutar:
./start-ngrok.sh - Copiar nueva URL (ej:
https://nueva-url.ngrok-free.dev) - Actualizar
app.yaml:PHONE_IP: "https://nueva-url.ngrok-free.dev"
- Re-desplegar:
gcloud app deploy --quiet
Sin esto, el sistema no podrá capturar multimedia automáticamente.
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE.md para más detalles.

