IFT3225Livrable 1 · 12 %

Infrastructure de collecte

Phase 1

Construire un pipeline capable de recevoir, authentifier et persister des données d'ambiance en quasi temps réel, puis de les rendre interrogeables.

01 Contexte

L'ambiance d'un lieu (café, bibliothèque, parc) varie au fil des heures et des jours. Ce projet vise à construire une infrastructure qui capte cette ambiance en quasi temps réel via des capteurs et la rendinterrogeable par n'importe quel client (via HTTP).

Le système reçoit deux types de données :

📡 Données capteurs

Collectées automatiquement via Phyphox

  • Amplitude audio (niveau sonore ambiant)
🌤️ Données environnementales

Méthode à proposer par l'équipe

  • Heure et jour de la semaine
  • Proximité de la source de bruit humaine la plus proche
  • Humeur / vibe générale du lieu

02 Travail à réaliser

Le travail se décompose en six tâches. Elles suivent l'ordre de l'échéancier mais peuvent se chevaucher.

Tâche 1 — Choisir un lieu et planifier la collecte

Choisir un lieu réel (café, parc, bibliothèque, etc.) que l'équipe instrumentera avec un téléphone. Définir comment vous collecterez les données environnementales (méthode automatique, manuelle, ou mixte). Prévoyez au moins 3 sessions de 20 minutes, à des moments différents de la journée ou de la semaine.

Tâche 2 — Concevoir le protocole

Définir l'ensemble des règles qui régissent la communication avec votre système. Ce protocole sera documenté dans le rapport et comprend :

Le protocole doit inclure au minimum 3 endpoints sémantiques de consultation au-delà des endpoints de collecte.

Les exemples ci-dessous sont un point de départ.

Endpoints de collecte

MéthodeEndpointCorpsRéponse
POST/measurements{type, value, location, timestamp }201 + document créé
POST/observations{ location, proximity, vibe, notes }201 + document créé

Endpoints de gestion

MéthodeEndpointCorpsRéponse
POST/devices{ name, location }201 + { id, apiKey }
GET/devices200 + tableau

Endpoints sémantiques (minimum 3)

Ces endpoints ne se contentent pas de retourner des données brutes. Ils répondent à des questions concrètes sur l'ambiance d'un lieu. Exemples :

MéthodeEndpointCe qu'il retourne
GET/ambiance/:location/history?last=3hÉvolution par tranches de temps
GET/ambiance/:location/quiet-hoursCréneaux typiquement calmes

Gestion des lieux

La stratégie de gestion des lieux est à votre discrétion : création explicite via un endpoint dédié, création implicite à la première mesure, ou autre. Documentez votre choix.

Tâche 3 — Implémenter le serveur

Mettre en place un serveur Express connecté à MongoDB Atlas qui implémente tous les endpoints définis dans votre table. Le serveur doit :

Tâche 4 — Mettre en place la collecte

Acheminer les données du capteur (Phyphox) vers le serveur. Le bridge — un script qui interroge le capteur à intervalle régulier et POST les données vers l'API — est l'approche recommandée, mais votre équipe peut proposer une alternative si elle la justifie.

Téléphone(Phyphox)Collecte(bridge ou autre)Serveur(Express)Base(MongoDB)PostmanGETPOSTGET /ambianceWi-Fi localInternet

Tâche 5 — Ajouter l'authentification

Protéger les endpoints d'écriture (POST) par une clé API transmise dans l'en-tête x-api-key. Le serveur vérifie que la clé correspond à un device enregistré.

401 En-tête absent
403 Clé invalide
200 Requête autorisée

Les requêtes de lecture (GET) restent publiques.

Tâche 6 — Collecter les données

Réaliser au moins 3 sessions de collecte de 20 minutes dans votre lieu, à des moments différents. L'objectif est d'avoir suffisamment de données pour que les endpoints sémantiques retournent des résultats significatifs.

03 Livrables

Implémentation Dépôt Git

Le serveur doit satisfaire les exigences suivantes :

README.md dans le dépôt

Document technique destiné à un développeur qui veut relancer le projet :

Rapport (un par équipe)PDF sur Studium

Le rapport est la spécification de votre protocole : un document qui décrit les règles de communication avec votre système. Il suit la structure suivante :

  1. Ressources et endpoints — table complète des endpoints avec méthodes, chemins, corps attendus, réponses et codes de statut. Justifier le découpage en ressources : pourquoi ces regroupements, quelles alternatives ont été envisagées, quelles entités du domaine sont devenues des ressources et lesquelles ne l'ont pas été.
  2. Conventions — nommage des ressources, format des horodatages (ISO 8601? Unix?), structure d'erreur (quels champs dans une réponse d'erreur), enveloppe de réponse (tableau nu ou objet avec métadonnées?). Pour chaque convention, expliquer l'intention : quel problème elle résout, quel comportement elle rend prévisible pour le client.
  3. Authentification — mécanisme choisi, flux complet (comment un client s'enregistre, obtient une clé, l'utilise), comportement en cas de clé absente ou invalide. Identifier la vulnérabilité de POST /devices non protégé et proposer une solution.
  4. Collecte — comment les données vont du capteur au serveur, pourquoi cette approche, à quelle fréquence, quel format pour les batches. Description de la méthode de collecte des données environnementales et du fallback manuel.
  5. Agrégation — comment les endpoints sémantiques (/ambiance) calculent leurs réponses à partir des données brutes. Quels seuils, quelle logique de classification, quelle fenêtre temporelle.
  6. Limites et évolution — vulnérabilités identifiées, compromis assumés, ce qui changerait avec plus de temps ou d'expérience.

04 Évaluation

CritèrePoidsCe qu'on évalue
Conception du protocole25 %Cohérence des conventions, clarté de la spécification dans le rapport, endpoints bien structurés
Pipeline fonctionnel25 %Le pipeline fonctionne de bout en bout; les données sont vérifiables via les endpoints GET
Structure des données15 %Schéma pertinent, validations, choix justifiés dans le rapport
Données environnementales10 %Solution proposée, fallback fonctionnel
Authentification10 %Devices identifiables, clé vérifiée, codes de statut appropriés
README5 %Reproductible en moins de 10 minutes
Rapport10 %Analyse des choix, identification des limites

05 Échéancier

26 mai
Protocole conçu (première version), premier endpoint fonctionnel
29 mai
API capteur explorée, payload documenté
5 juin
Pipeline complet : capteur → collecte → serveur → base
12 juin
Authentification, endpoints sémantiques, premières sessions de collecte
15 juin
Remise — dépôt Git + rapport PDF sur Studium