1
donnees_meteo/meteo/station_config.py
2025-11-17 02:00:28 +01:00

85 lines
2.5 KiB
Python

# meteo/station_config.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Tuple
@dataclass(frozen=True)
class SensorDefinition:
"""
Décrit un capteur individuel de la station météo, tel qu'il est stocké dans InfluxDB.
"""
name: str # nom logique dans nos fichiers (ex: "temperature")
measurement: str # nom du measurement InfluxDB (ex: "°C")
entity_id: str # valeur du tag `entity_id` (ex: "station_meteo_bresser_exterieur_temperature")
unit: str # unité humaine (ex: "°C", "%", "hPa")
@dataclass(frozen=True)
class StationConfig:
"""
Configuration complète de la station météo.
Pour l'instant, c'est simplement une liste immuable de capteurs.
"""
sensors: Tuple[SensorDefinition, ...]
def default_station_config() -> StationConfig:
"""
Retourne la configuration par défaut de la station météo Bresser extérieure.
Cette config est basée sur :
- les measurements (°, °C, %, hPa, km/h, lx, mm/h)
- les entity_id trouvés dans le bucket "weather".
"""
sensors = (
SensorDefinition(
name="temperature",
measurement="°C",
entity_id="station_meteo_bresser_exterieur_temperature",
unit="°C",
),
SensorDefinition(
name="humidity",
measurement="%",
entity_id="station_meteo_bresser_exterieur_humidite_relative",
unit="%",
),
SensorDefinition(
name="pressure",
measurement="hPa",
entity_id="station_meteo_bresser_exterieur_pression_atmospherique",
unit="hPa",
),
SensorDefinition(
name="illuminance",
measurement="lx",
entity_id="station_meteo_bresser_exterieur_luminance",
unit="lx",
),
SensorDefinition(
name="wind_speed",
measurement="km/h",
entity_id="station_meteo_bresser_exterieur_vitesse_du_vent",
unit="km/h",
),
SensorDefinition(
name="wind_direction",
measurement="°",
entity_id="station_meteo_bresser_exterieur_direction_du_vent",
unit="°",
),
SensorDefinition(
name="rain_rate",
measurement="mm/h",
entity_id="station_meteo_bresser_exterieur_precipitations",
unit="mm/h",
),
)
return StationConfig(sensors=sensors)