Guide pas à pas du cours
Public : développeurs et opérateurs qui branchent des capteurs du monde physique sur GAIA / ATLAS avant de facturer des SKU Hub.
Langues :COURSE_LANG=en|ru|es|fr|zh· chaînes UI dansi18n/· ce guide en français. English · Русский · Español · 中文
Vérification dans l’écosystème actuel
Exécutez d’abord l’atelier reproductible, puis comparez ses contrôles de source et de fraîcheur au guide ATLAS. Le code actuel couvre trois puits pilotes USGS via gaia.groundwater.read@v1. La profondeur est exprimée en mètres sous la surface locale, positive vers le bas. Les mesures de plus de 24 heures sont écartées. USGS Real-Time Flood Impacts rapproche des seuils de site et des mesures récentes de stations. Un résultat vide se limite aux sites couverts et aux observations admissibles. Conservez la source, l’heure et la couverture dans l’export.
Pourquoi ce cours
GAIA expose des lectures IoT attestées comme capacités (gaia.weather.read@v1, gaia.fleet.status@v1, …). ATLAS transforme la même flotte en carte opérateur (atlas.nearest.read@v1). La difficulté n’est pas HTTP : c’est l’honnêteté (Open-Meteo ≠ station in-situ ; SIM ≠ LIVE) et la licence (seulement CC0 / CC BY / OGL / NLOD / U.S. PD / Copernicus CC BY sur le rail commercial). Ce cours enseigne les deux via des labs sur le sandbox live :
| Service | URL |
|---|---|
| GAIA | https://iot.modelmarket.dev |
| ATLAS | https://atlas.modelmarket.dev |
Les labs appellent les API live si le réseau est disponible ; hors ligne ils affichent [offline] et n’inventent jamais de lectures.
Docs canoniques : LIVE-RELAYS.md · add-gaia-atlas-sensor.md
Table des matières
- Choisir sa piste
- Installation (10 minutes)
- Module M1 — Qu’est-ce qu’un relais LIVE
- Module M2 — Licence et rail commercial
- Module M3 — Flotte et honnêteté des pins
- Module M4 — Carte opérateur ATLAS
- Module M5 — Capstone : ajouter un capteur
- Exercices et certificat
- Auto-contrôle
- Dépannage
Choisir sa piste
| Piste | Modules | Durée | Réseau |
|---|---|---|---|
| Basique | M1 → M2 → M3 → M4 | ~2 h | Optionnel |
| Avancée | Basique + M5 | +30 min | Comptage live optionnel |
| Pont ops | Après M5 | +30 min | GAIA + ATLAS + Recipe A |
Installation (10 minutes)
Étape 1 — Cloner et installer
git clone https://github.com/alexar76/aimarket-courses.git
cd aimarket-courses/gaia-atlas-sensors-course
pip install -e ".[dev]"
Depuis le monorepo aicom :
cd courses/gaia-atlas-sensors-course
pip install -e ".[dev]"
Étape 2 — Vérifier les tests
pytest -q
Attendu : parité i18n (5 langues), tests licence/honesty, solutions d’exercices, smoke d’imports. Les tests réseau sont ignorés si GAIA est injoignable ou COURSE_SKIP_NETWORK=1.
Étape 3 — Langue (optionnel)
export COURSE_LANG=fr
python labs/lab01_live_vs_sim.py
Étape 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
Les lectures payantes de GAIA (gaia.weather.read@v1, 0,001 $) passent par l’essai gratuit (sandbox) du hub COURSE_HUB_URL : 5 appels par visitor id et par heure, sans portefeuille ni compte. Avec son price gate actif, GAIA répond 402 à un appel direct d’une capacité payante et nomme le hub ; gaia.fleet.status@v1 est gratuit et se lit directement sur GAIA.
Module M1 — Qu’est-ce qu’un relais LIVE
Concept : allowlist HTTPS, offline en cas d’échec, ne jamais inventer de lectures.
Lab : labs/lab01_live_vs_sim.py · Durée : ~20 min
Étapes
- Lire la docstring — paire
om-wx-01(LIVE) vsws-01(SIM). - Lancer
python labs/lab01_live_vs_sim.py. - Confirmer que
classify_modepasse hors ligne. - En ligne : inspecter
/healthet l’invoke weather. - Parcourir
courselib/sensors.py.
Auto-contrôle
- [ ] LIVE seulement si
sourceest défini sur le device de flotte - [ ] Vous n’étiquetteriez pas
ws-01comme LIVE
Module M2 — Licence et rail commercial
Concept : CC0 / CC BY / OGL / PD uniquement.
Lab : labs/lab02_licence_gate.py · Durée : ~20 min
Étapes
- Lancer le lab et lire le tableau pass/fail.
- Pass : OpenAQ, USGS/NWS PD, Safecast CC0, FIRMS, UK OGL.
- Fail : AirNow (assent requis), OpenSky, ADSBx, PurpleAir, BY-NC.
Auto-contrôle
- [ ] Vous citez les familles de licence du pass-bar
- [ ] AirNow est Hold, pas « presque en prod »
Module M3 — Flotte et honnêteté des pins
Concept : Open-Meteo ≠ station ; AIS public ≠ edge propre.
Lab : labs/lab03_honesty_claims.py · Durée : ~20 min
Auto-contrôle
- [ ] Vous rejetez « Open-Meteo = station in-situ »
- [ ] Politique offline honnête = fail-loud, pas de débit
Module M4 — Carte opérateur ATLAS
Concept : nearest, distance, mode/source.
Lab : labs/lab04_atlas_map_read.py · Durée : ~20 min
Étapes
- Assert hors ligne sur la forme du payload.
- En ligne :
atlas.nearest.read@v1près de Berlin (52.52, 13.41). - Vérifier
stationssur/health.
Module M5 — Capstone : ajouter un capteur
Concept : Recipe A — licence → kind → YAML → redeploy GAIA→ATLAS → honesty.
Lab : labs/lab05_add_sensor_capstone.py · Durée : ~25 min
Auto-contrôle
- [ ] Ordre de redeploy : GAIA puis ATLAS
- [ ] LIVE exige
GAIA_ENABLE_LIVE=1et un vraisource
Exercices et certificat
Stubs : courselib/exercises.py (# YOUR CODE HERE).
Solutions : courselib/exercise_solutions.py.
python labs/run_exercises.py
python labs/run_exercises.py --certificate "Camille Dupont" --lang fr
Les cases du navigateur n’émettent pas de certificat.
Auto-contrôle
- [ ] M1 : LIVE vs SIM via
source - [ ] M2 : pass-bar ; AirNow Hold
- [ ] M3 : classificateur honesty
- [ ] M4 : forme nearest + lecture live
- [ ] M5 : ordre Recipe A + compte flotte
- [ ] Exercices remplis ; certificat CLI OK
Dépannage
| Symptôme | Action |
|---|---|
[offline] … unreachable |
Réseau ou continuez hors ligne — la partie unitaire enseigne quand même |
SensorsError: HTTP … |
Vérifier capability_id et device_id |
HTTP 429 … trial_quota_exhausted |
L’essai gratuit du hub (5 appels par heure) est épuisé ; il se renouvelle l’heure suivante, rien n’a été facturé |
| pytest network skip | Normal hors ligne ; retirer COURSE_SKIP_NETWORK pour le live |
| Tous les exercises échouent | Remplir les stubs — c’est voulu |
| Mauvaise langue | 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.