HA- Station météo connectée

Intro

Sur mon blog, je partage mes aventures dans la domotique et les projets qui rendent ma maison plus intelligente. Aujourd’hui, je vous présente ma station météorologique personnelle : une Davis Vantage Pro2 connectée à un Raspberry Pi 3B, avec le logiciel WeeWX comme chef d’orchestre. Ce système alimente Home Assistant via MQTT et génère même un site web accessible à l’adresse https://meteo.rem81.com. Voici comment tout cela fonctionne !

Le matériel

Au cœur de mon setup, il y a la Davis Vantage Pro2, une station météo professionnelle réputée pour sa fiabilité et sa précision. Elle mesure la température, l’humidité, la pression atmosphérique, la vitesse et la direction du vent, ainsi que les précipitations. Pour la connecter à mon réseau domestique, j’utilise un Raspberry Pi 3B, un petit ordinateur puissant et économique qui sert de pont entre la station et mes systèmes connectés.

La connexion physique se fait via un câble convertisseur USB-série Hailege PL2303TA (disponible en pack de 3, compatible avec Windows XP/Vista/8/10, Mac OS X et Linux).

Ce câble relie le port d’extension de la console Vantage Pro2 à un port USB du Raspberry Pi, où il est détecté comme /dev/ttyUSB0. Ce modèle est fiable et abordable, parfait pour ce projet.

Le logiciel

Pour exploiter les données de la Vantage Pro2, j’ai installé WeeWX, un logiciel open-source écrit en Python, sur le Raspberry Pi. WeeWX est léger, flexible et parfaitement adapté pour dialoguer avec des stations météo comme la mienne. Voici ce qu’il fait pour moi :

  • Collecte des données : Il interroge la Vantage Pro2 en continu via le port USB-série et- Publication web : WeeWX génère des pages HTML avec des graphiques et des tableaux, que j’utilise pour alimenter un site web hébergé localement et accessible à l’adresse https://meteo.rem81.com. stocke les mesures dans une base de données locale.
  • Interface avec Home Assistant : Grâce au plugin MQTT de WeeWX, les données météo sont envoyées en temps réel à mon instance Home Assistant pour une intégration domotique.

Intégration avec Home Assistant via MQTT

Pour connecter WeeWX à Home Assistant, j’utilise le protocole MQTT, un standard léger et fiable pour la domotique. Voici les étapes principales :

  1. J’ai installé un broker MQTT (Mosquitto) sur le Raspberry Pi.
  2. Le plugin MQTT de WeeWX publie les données (température, vent, pluie, etc.) sur le topic home/Vp2/loop sous forme de messages JSON.
  3. Dans Home Assistant, je récupère ces données avec un fichier de configuration dédié, vp2.yaml.

Configuration MQTT dans Home Assistant

Pour exploiter pleinement les données de la Vantage Pro2, j’ai créé un fichier vp2.yaml dans Home Assistant. Ce fichier définit une série de capteurs MQTT qui extraient les valeurs du JSON publié par WeeWX. Voici un aperçu de cette configuration :

Fichier: VP2.yaml


mqtt:
  sensor:
# Vantage Pro2 -> WEEXWX
    - name: "VP2_DateTime"
      unique_id: VP2_DateTime" 
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'ms'
      value_template: "{{ value_json.dateTime | round(1) }}"

    - name: "VP2_Temp_Out"
      unique_id: "VP2_Temp_Out"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '°C'
      value_template: "{{ value_json.outTemp_C | round(1) }}"
      state_class: measurement
      device_class: "temperature"

    - name: "VP2_Humidity_Out"
      unique_id: "VP2_Humidity_Out"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '%'
      value_template: "{{ value_json.outHumidity | round(1) }}"
      state_class: measurement      
      device_class: humidity
          
    - name: "VP2_Barometer"
      unique_id: "VP2_Barometer"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mbar'
      value_template: "{{ value_json.barometer_mbar | round(1) }}"
      state_class: measurement
      device_class: "pressure"
      
  #DAILY RAIN (PRECIPITATION QUOTIDIENNE).
  #Appuyez sur RAINDAY pour afficher la pluviométrie cumulée depuis minuit.
  #Toutes les précipitations cumulées depuis les 24 dernières heures sont affichées dans le bandeau déroulant au bas de l'écran.
    - name: "VP2_Rain"
      unique_id: "VP2_Rain"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mm'
      force_update: true
      value_template: >-
        {% set a=value_json.rain_cm|float(default=0)%}
        {{ (a*10)|round(3) }}     
      state_class: measurement
      device_class: precipitation

    - name: "VP2_Rain24"
      unique_id: "VP2_Rain24"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mm'
      force_update: true
      value_template: >-
        {% set a=value_json.rain24_cm|float(default=0)%}
        {{ (a*10)|round(3) }}
      state_class: total_increasing
      device_class: precipitation

    - name: "VP2_RainJour"
      unique_id: "VP2_RainJour"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mm'
      force_update: true
      value_template: >-
        {% set a=value_json.dayRain_cm|float(default=0)%}
        {{ (a*10)|round(3) }}
      state_class: total_increasing
      device_class: precipitation

  # La Rain Rate (pluviométrie) sera nulle et l'icône parapluie ne sera pas affichée tant que
  # deux basculements du pluviomètre ne sont pas survenus dans une période de 15 minutes.
    - name: "VP2_Rain_Rate"
      unique_id: "VP2_Rain_Rate"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mm/h'
      force_update: true
      value_template: >-
        {% set a=value_json.rainRate_cm_per_hour|float(default=0)%}
        {{ (a*10)|round(3) }}
      state_class: measurement
      device_class: PRECIPITATION_INTENSITY

  #RAIN STORM (AVERSE D'ORAGE).
  #Rain Storm (L'averse d'orage) affiche le cumul de pluie de la dernière averse.
  #Il faut deux basculements du pluviomètre pour démarrer un événement d'orage et 24 heures sans pluie pour le stopper.
  #Appuyez sur RAINDAY pour basculer entre les précipitations quotidiennes et le total d'Averse d'orage.
  #Le cumul de pluie peut être affiché en pouces (in) ou millimètres (mm).    
    - name: "VP2_Rain_Storm"
      unique_id: "VP2_Rain_Storm"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'mm'
      force_update: true
      value_template: >-
        {% set a=value_json.stormRain_cm|float(default=0)%}
        {{ (a*10)|round(3) }}
      state_class: measurement
      device_class: precipitation            

    - name: "VP2_Rafale"
      unique_id: "VP2_Rafale"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'km/h'
      value_template: "{{ value_json.windGust_kph | round(2) }}"
      state_class: measurement
      device_class: WIND_SPEED

    - name: "VP2_Win_Speed"
      unique_id: "VP2_Win_Speed"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'km/h'
      value_template: "{{ value_json.windSpeed_kph | round(2) }}"
      state_class: measurement
      device_class: WIND_SPEED
      
    - name: "VP2_Win_Dir"
      unique_id: "VP2_Win_Dir"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '°'
      value_template: "{{ value_json.windDir | round(1) }}"
      state_class: measurement
            

    - name: "VP2_Temp_In"
      unique_id: "VP2_Temp_In"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '°C'
      value_template: "{{ value_json.inTemp_C | round(1) }}"
      device_class: "temperature"
      state_class: measurement

    - name: "VP2_Humidté_In"
      unique_id: "VP2_Humidté_In"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '%'
      value_template: "{{ value_json.inHumidity | round(1) }}"
      device_class: "humidity"
      state_class: measurement

    - name: "VP2_Ressenti"
      unique_id: "VP2_Ressenti"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '°C'
      value_template: "{{ value_json.windchill_C | round(1) }}"
      device_class: "temperature"
      state_class: measurement

    - name: "VP2_HeatIndex"
      unique_id: "VP2_HeatIndex"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: '°C'
      value_template: "{{ value_json.heatindex_C | round(1) }}"
      device_class: "temperature"
      state_class: measurement

    - name: "VP2_Radiation"
      unique_id: "VP2_Radiation"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'W/m²'
      value_template: "{{ value_json.radiation_Wpm2 | round(0) }}"
      device_class: irradiance
      state_class: measurement

    - name: "VP2_UV"
      unique_id: "VP2_UV"
      state_topic: "home/Vp2/loop"
      unit_of_measurement: 'UV'
      value_template: "{{ value_json.UV | round(1) }}"
      state_class: measurement
Ce que ça fait :
  • Topic unique : Toutes les données arrivent via home/Vp2/loop, un topic MQTT où WeeWX publie un JSON contenant toutes les mesures.
  • Templates : Les value_template extraient les champs spécifiques (ex. outTemp_C pour la température extérieure) et appliquent des conversions si nécessaire (ex. passage de cm à mm pour la pluie en multipliant par 10).
  • Capteurs variés : Je récupère tout, de la température extérieure (VP2_Temp_Out) au taux de précipitation horaire (VP2_Rain_Rate), en passant par les rafales de vent (VP2_Rafale) et l’indice UV (VP2_UV).
  • Précision : Les arrondis (round) assurent des valeurs lisibles, et force_update garantit que même des valeurs identiques (comme 0 mm de pluie) sont mises à jour.

Ces capteurs apparaissent dans Home Assistant et me permettent de suivre les conditions météo en temps réel ou de déclencher des automatisations (ex. fermer les volets si VP2_Rafale dépasse 50 km/h).

Le site web : meteo.rem81.com

En plus de l’intégration avec Home Assistant, WeeWX me permet de générer un site web avec des graphiques et des données météo, accessible à l’adresse https://meteo.rem81.com. C’est une manière pratique de visualiser les conditions actuelles, les tendances et les historiques, directement à partir des données collectées par ma station.

Pourquoi ce système ?

Ce setup est un mélange parfait de précision, autonomie et personnalisation :

  • Fiabilité : La Vantage Pro2 est robuste, et le Raspberry Pi tourne 24/7 sans broncher.
  • Local et indépendant : Tout est géré en local, sans dépendance à des services cloud comme WeatherLink.
  • Flexibilité : Avec WeeWX et MQTT, je peux étendre le système à d’autres usages au sein de mon réseau.

Installation et configuration

Pour ceux qui veulent reproduire ce projet :

  1. Matériel :
  2. Système : Installez Raspberry Pi OS sur le Pi, puis suivez la doc WeeWX (weewx.com) pour l’installation. Configurez WeeWX pour utiliser /dev/ttyUSB0 comme port de la station.
  3. MQTT : Ajoutez Mosquitto , Addon HA et configurez le plugin WeeWX MQTT pour publier sur home/Vp2/loop.
  4. Home Assistant : Ajoutez le fichier vp2.yaml dans votre configuration (par exemple: via configuration.yaml avec mqtt: !include vp2.yaml).

Conclusion

Ma station météo connectée avec la Vantage Pro2, un Raspberry, WeeWX et Home Assistant est un projet fiable et bon marché par rapport au interface de communication Davis Instrument. Elle me donne des données précises pour mes automatisations domotiques et me permet de suivre les conditions météo via un site web dédié. Si vous avez une station Davis ou un Raspberry Pi qui traîne, lancez-vous ! Des questions ou des idées pour l’améliorer ? Laissez un commentaire sur domo.rem81.com !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *