# IoT Riego — Sistema de Monitoreo en la Web
## Raspberry Pi → Cloudflare Tunnel → Worker → Dashboard público

---

## Arquitectura

```
Pi Flask :5011  ──→  cloudflared tunnel  ──→  Cloudflare Worker  ──→  Dashboard index.html
  (privado)              (público HTTPS)        (API gateway auth)     (tu sitio web)
```

---

## Archivos del proyecto

| Archivo | Descripción |
|---|---|
| `index.html` | Dashboard IoT (sube al servidor) |
| `worker.js` | Cloudflare Worker — proxy seguro |
| `wrangler.toml` | Config para `wrangler deploy` |
| `setup-cloudflared.sh` | Script de instalación del tunnel en la Pi |

---

## Paso 1 — Configurar el Cloudflare Tunnel en la Pi

Desde tu equipo, conecta a la Pi:

```bash
ssh admin@192.168.0.52
```

Sube y ejecuta el script:

```bash
# Desde tu equipo
scp setup-cloudflared.sh admin@192.168.0.52:~/
ssh admin@192.168.0.52 "chmod +x ~/setup-cloudflared.sh && ~/setup-cloudflared.sh"
```

Al terminar, el script te dará una URL como:
```
https://abc123xyz.cfargotunnel.com
```
Guárdala — es tu `PI_BASE_URL`.

---

## Paso 2 — Desplegar el Cloudflare Worker

Desde tu equipo de desarrollo:

```bash
# Instalar Wrangler si no lo tienes
npm install -g wrangler

# Autenticar con Cloudflare
wrangler login

# Desde la carpeta iot-riego/
cd iot-riego
wrangler deploy
```

Luego ve a **Cloudflare Dashboard → Workers → iot-riego-gateway → Settings → Variables** y agrega:

| Variable | Valor |
|---|---|
| `PI_BASE_URL` | `https://abc123xyz.cfargotunnel.com` |
| `API_SECRET` | Una clave segura (ej: `RiegoSecure2026#Xk7`) |

---

## Paso 3 — Configurar el Dashboard

Edita las primeras líneas del `<script>` en `index.html`:

```js
const WORKER_URL = 'https://iot-riego-gateway.TU_CUENTA.workers.dev';
const API_KEY    = 'RiegoSecure2026#Xk7';  // igual que API_SECRET
```

Sube el archivo al servidor:
```
https://gerardoesquivia.com/iot-riego/
```

---

## Paso 4 — Verificar

```bash
# Probar el Worker directo:
curl -H "X-Api-Key: TU_API_SECRET" \
  https://iot-riego-gateway.TU_CUENTA.workers.dev/ultima
```

Debería devolver el último registro de la base de datos SQLite.

---

## Endpoints disponibles por el Worker

| Path | Método | Descripción |
|---|---|---|
| `/ultima` | GET | Última lectura de sensores |
| `/leer` | GET | Leer datos actuales |
| `/dispositivos` | GET | Lista de dispositivos |
| `/equipos` | GET | Lista de equipos |
| `/analisis` | GET | Análisis estadístico |
| `/analisis/datos` | GET | Datos del análisis |
| `/cmd` | POST | Enviar comando (riego_on, riego_off) |
| `/escribir` | POST | Escribir valor |
| `/descubrir` | POST | Descubrir dispositivos |

---

## Servicio en la Pi

```bash
# Ver estado del Flask
ssh admin@192.168.0.52 "systemctl status riego-5011.service"

# Ver estado del tunnel
ssh admin@192.168.0.52 "systemctl status cloudflared"

# Ver logs de la app
ssh admin@192.168.0.52 "journalctl -u riego-5011.service -n 50"
```
