Guía paso a paso del curso
Audiencia: desarrolladores y operadores que conectan sensores del mundo físico a GAIA / ATLAS antes de cobrar SKUs del Hub.
Idiomas:COURSE_LANG=en|ru|es|fr|zh· cadenas UI eni18n/· esta guía en español. English · Русский · Français · 中文
Comprobación con el ecosistema actual
Ejecuta primero el laboratorio reproducible y compara sus comprobaciones de fuente y vigencia con la guía de ATLAS. El código actual incluye tres pozos piloto del USGS mediante gaia.groundwater.read@v1: la profundidad se mide en metros por debajo de la superficie local y aumenta hacia abajo. Se descartan lecturas de más de 24 horas. USGS Real-Time Flood Impacts coteja umbrales de sitios con lecturas recientes de estaciones. Una respuesta vacía se limita a los sitios cubiertos y a las observaciones válidas. Conserva la fuente, la fecha y la cobertura en la exportación.
Por qué este curso
GAIA expone lecturas IoT atestadas como capacidades (gaia.weather.read@v1, gaia.fleet.status@v1, …). ATLAS convierte la misma flota en un mapa de operador (atlas.nearest.read@v1). Lo difícil no es HTTP: es la honestidad (Open-Meteo ≠ estación in-situ; SIM ≠ LIVE) y la licencia (solo CC0 / CC BY / OGL / NLOD / U.S. PD / Copernicus CC BY en el riel comercial). Este curso enseña ambas con labs contra el sandbox en vivo:
| Servicio | URL |
|---|---|
| GAIA | https://iot.modelmarket.dev |
| ATLAS | https://atlas.modelmarket.dev |
Los labs llaman APIs live si hay red; offline imprimen [offline] y nunca inventan lecturas.
Docs canónicos: LIVE-RELAYS.md · add-gaia-atlas-sensor.md
Índice
- Elige tu pista
- Setup (10 minutos)
- Módulo M1 — Qué es un relé LIVE
- Módulo M2 — Licencia y riel comercial
- Módulo M3 — Flota y honestidad de pines
- Módulo M4 — Mapa de operador ATLAS
- Módulo M5 — Capstone: añadir un sensor
- Ejercicios y certificado
- Autocomprobación
- Solución de problemas
Elige tu pista
| Pista | Módulos | Tiempo | Red |
|---|---|---|---|
| Básica | M1 → M2 → M3 → M4 | ~2 h | Opcional |
| Avanzada | Básica + M5 | +30 min | Conteo live opcional |
| Puente ops | Tras M5 | +30 min | GAIA + ATLAS + Recipe A |
Setup (10 minutos)
Paso 1 — Clonar e instalar
git clone https://github.com/alexar76/aimarket-courses.git
cd aimarket-courses/gaia-atlas-sensors-course
pip install -e ".[dev]"
Desde el monorepo aicom:
cd courses/gaia-atlas-sensors-course
pip install -e ".[dev]"
Paso 2 — Verificar tests
pytest -q
Esperado: paridad i18n (5 idiomas), tests de licence/honesty, solutions de ejercicios, smoke de imports. Los tests de red se omiten si GAIA no responde o COURSE_SKIP_NETWORK=1.
Paso 3 — Idioma (opcional)
export COURSE_LANG=es
python labs/lab01_live_vs_sim.py
Paso 4 — Endpoints live
export COURSE_GAIA_URL=https://iot.modelmarket.dev
export COURSE_ATLAS_URL=https://atlas.modelmarket.dev
export COURSE_HUB_URL=https://modelmarket.dev
Las lecturas de pago de GAIA (gaia.weather.read@v1, $0.001) pasan por la prueba gratuita (sandbox) del hub en COURSE_HUB_URL: 5 llamadas por visitor id por hora, sin cartera ni cuenta. con su price gate activo, GAIA responde 402 a una llamada directa a una capacidad de pago y nombra el hub; gaia.fleet.status@v1 es gratis y se lee de GAIA directamente.
Módulo M1 — Qué es un relé LIVE
Concepto: allowlist HTTPS, offline ante fallo, nunca inventar lecturas.
Lab: labs/lab01_live_vs_sim.py · Tiempo: ~20 min
Pasos
- Lee el docstring — par
om-wx-01(LIVE) vsws-01(SIM). - Ejecuta
python labs/lab01_live_vs_sim.py. - Confirma que
classify_modepasa offline. - Online: revisa
/healthe invoke de weather. - Revisa
courselib/sensors.py.
Autocomprobación
- [ ] LIVE solo si
sourceestá definido en el dispositivo de flota - [ ] No etiquetarías
ws-01como LIVE
Módulo M2 — Licencia y riel comercial
Concepto: solo CC0 / CC BY / OGL / PD.
Lab: labs/lab02_licence_gate.py · Tiempo: ~20 min
Pasos
- Ejecuta el lab y lee la tabla pass/fail.
- Pass: OpenAQ, USGS/NWS PD, Safecast CC0, FIRMS, UK OGL.
- Fail: AirNow (requiere assent), OpenSky, ADSBx, PurpleAir, BY-NC.
Autocomprobación
- [ ] Recuerdas las familias de licencia del pass-bar
- [ ] AirNow es Hold, no «casi en prod»
Módulo M3 — Flota y honestidad de pines
Concepto: Open-Meteo ≠ estación; AIS público ≠ edge propio.
Lab: labs/lab03_honesty_claims.py · Tiempo: ~20 min
Autocomprobación
- [ ] Rechazas «Open-Meteo es estación in-situ»
- [ ] Offline honesto = fail-loud, sin debit
Módulo M4 — Mapa de operador ATLAS
Concepto: nearest, distance, mode/source.
Lab: labs/lab04_atlas_map_read.py · Tiempo: ~20 min
Pasos
- Assert offline de forma del payload.
- Online:
atlas.nearest.read@v1cerca de Berlín (52.52, 13.41). - Revisa
stationsen/health.
Módulo M5 — Capstone: añadir un sensor
Concepto: Recipe A — licence → kind → YAML → redeploy GAIA→ATLAS → honesty.
Lab: labs/lab05_add_sensor_capstone.py · Tiempo: ~25 min
Autocomprobación
- [ ] Orden de redeploy: GAIA luego ATLAS
- [ ] LIVE exige
GAIA_ENABLE_LIVE=1y unsourcereal
Ejercicios y certificado
Stubs: courselib/exercises.py (# YOUR CODE HERE).
Soluciones: courselib/exercise_solutions.py.
python labs/run_exercises.py
python labs/run_exercises.py --certificate "Ana García" --lang es
Las casillas del navegador no emiten certificado.
Autocomprobación
- [ ] M1: LIVE vs SIM por
source - [ ] M2: pass-bar; AirNow Hold
- [ ] M3: clasificador de honesty
- [ ] M4: forma nearest + lectura live
- [ ] M5: orden Recipe A + conteo de flota
- [ ] Ejercicios rellenados; certificado CLI OK
Solución de problemas
| Síntoma | Qué hacer |
|---|---|
[offline] … unreachable |
Red o sigue offline — la parte unitaria sigue enseñando |
SensorsError: HTTP … |
Revisa capability_id y device_id |
HTTP 429 … trial_quota_exhausted |
La prueba gratuita del hub (5 llamadas por hora) se agotó; se renueva la hora siguiente y no se cobró nada |
| pytest network skip | Normal offline; quita COURSE_SKIP_NETWORK para live |
| Todos los exercises fallan | Rellena stubs — es intencional |
| Idioma incorrecto | COURSE_LANG ∈ en,ru,es,fr,zh |
Variables: COURSE_GAIA_URL, COURSE_ATLAS_URL, COURSE_HUB_URL, COURSE_SANDBOX_VISITOR, COURSE_LANG, COURSE_SKIP_NETWORK=1.