# Installation, configuration et tests ## Installation de l'environnement de base Après avoir cloné le dépôt : ```shell python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt python -c "import pandas, influxdb_client, sklearn; print('OK')" ``` - On installe l'environnement virtuel de python - On entre dans cet environnement - On met à jour le gestionnaire de paquets pip - On installe les dépendances définies dans `requirements.txt` - On vérifie que les dépendances sont correctement installées ## Configuration ```shell cp .env.example .env ``` On copie le fichier de configuration d'exemple, puis on l'ouvre pour l'adapter à notre cas. - `INFLUXDB_URL` : URL de l'api du serveur InfluxDB2 (cela inclue probablement le port 8086) - `INFLUXDB_TOKEN` : le jeton d'authentification à créer dans votre compte InfluxDB2 - `INFLUXDB_ORG` : l'organisation à laquelle le token est rattaché - `INFLUXDB_BUCKET` : le nom du bucket dans lequel les données sont stockées - `STATION_LATITUDE` : latitude GPS de la station météo - `STATION_LONGITUDE` : longitude GPS de la station météo - `STATION_ELEVATION` : altitude de la station météo ## Tests de l'environnement de travail ```shell python "docs/01 - Installation, configuration et tests/scripts/test_influx_connection.py" ``` ```output Configuration InfluxDB chargée : URL : http://10.0.3.2:8086 Org : Dern Bucket : weather → Ping du serveur InfluxDB… ✔ Ping OK → Requête de test sur le bucket… ✔ Requête de test réussie : 18 table(s), 58 enregistrement(s) trouvés. Exemple de point : time : 2025-11-16 22:30:50.263360+00:00 measurement : % field : device_class_str value : humidity ``` Ensuite, on peut demander à InfluxDB de nous détailler ce qu'il stocke : ```shell python "docs/01 - Installation, configuration et tests/scripts/test_influx_schema.py" ``` ```output Bucket InfluxDB : weather Measurements disponibles : - % - hPa - km/h - lx - mm/h - ° - °C Champs pour measurement « % » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - state_class_str (type: unknown) - value (type: unknown) Champs pour measurement « hPa » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - state_class_str (type: unknown) - value (type: unknown) Champs pour measurement « km/h » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - state_class_str (type: unknown) - value (type: unknown) Champs pour measurement « lx » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - value (type: unknown) Champs pour measurement « mm/h » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - state_class_str (type: unknown) - value (type: unknown) Champs pour measurement « ° » : - friendly_name_str (type: unknown) - value (type: unknown) Champs pour measurement « °C » : - device_class_str (type: unknown) - friendly_name_str (type: unknown) - state_class_str (type: unknown) - value (type: unknown) ``` Mais pour obtenir les données dont on a besoin, il faut aussi connaitre les entités manipulées par Influx : ```shell python "docs/01 - Installation, configuration et tests/scripts/test_influx_entities.py" ``` ```output Bucket InfluxDB : weather Measurement « % » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_humidite_relative Measurement « hPa » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_pression_atmospherique Measurement « km/h » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_vitesse_du_vent Measurement « lx » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_luminance Measurement « mm/h » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_precipitations Measurement « ° » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_direction_du_vent Measurement « °C » Tag keys : - _field - _measurement - _start - _stop - domain - entity_id entity_id possibles : - station_meteo_bresser_exterieur_temperature ``` Ces informations combinées se retrouvent dans le fichier `meteo/station_config.py` et dans `meteo/variables.py`. On aurait pu se passer de ces scripts pour déterminer la structure des données stockées dans Influx, mais ils évitent de se reposer sur des intuitions : ici, on demande à Influx de nous donner les informations dont on va avoir besoin au lieu de les deviner.