Station Météo DIY : Créez votre Système 100% Local avec ESP32 et Home Assistant

Vous souhaitez mesurer précisément la météo chez vous sans dépendre d'un cloud propriétaire ou d'une console en plastique énergivore ? La domotique moderne permet aujourd'hui de concevoir sa propre station météo connectée. En combinant un ESP32 dans votre garage, un capteur de température Zigbee et l'intelligence de Home Assistant, vous obtiendrez des mesures locales d'une précision chirurgicale pour un budget extrêmement serré.

Station Météo DIY : Créez votre Système 100% Local avec ESP32 et Home Assistant

En résumé : Créer sa propre station météo domotique consiste à séparer l'acquisition physique de l'affichage. En plaçant un pluviomètre à augets sur votre toit relié à un ESP32 dans votre garage, et en y ajoutant des thermomètres Zigbee extérieurs, vous pouvez centraliser toutes vos données météo sur un magnifique tableau de bord Home Assistant 100 % local. Fini les piles qui lâchent en plein hiver et les données perdues dans le cloud.


Pourquoi créer sa propre station météo avec Home Assistant ?

Les stations météo grand public du commerce souffrent de trois limites majeures qui agacent les passionnés de domotique :

  • La dépendance au Cloud : Vos données font trois fois le tour de la terre avant de s'afficher sur votre smartphone, avec des pannes régulières de serveurs.
  • Le coût des consoles de salon : Les consoles de salon en plastique vieillissent mal et consomment de l'énergie inutilement.
  • L'obsolescence des piles en extérieur : Les capteurs extérieurs soumis au gel vident leurs petites piles en quelques mois, faussant les données au moment où vous en avez le plus besoin.

En créant votre propre système hybride (filaire pour l'alimentation sur secteur + protocoles radio locaux), vous reprenez le contrôle total de vos données. L'intégration dans vos automatisations de chauffage, de store banne ou d'arrosage de jardin devient instantanée.


La Liste du Matériel Indispensable (Le Choix de la Fiabilité)

Pour fabriquer ce système de mesure de niveau professionnel, nous recommandons une architecture hybride éprouvée :

1. La partie Pluviométrie mécanique

Nous utilisons un pluviomètre à augets basculants standard vendu comme pièce détachée. Ce mécanisme purement physique n'embarque aucune électronique fragile (découvrez son fonctionnement détaillé dans notre guide explicatif sur le pluviomètre à augets), ce qui lui assure une durée de vie exceptionnelle sur votre toiture.

2. Le Cerveau : L'ESP32 alimenté sur secteur

Le hack classique qui consiste à souder un capteur d'ouverture Zigbee à pile (type Aqara ou Sonoff) directement sur le pluviomètre présente un inconvénient majeur : la pile CR2032 ne résiste pas aux hivers rigoureux et les réveils fréquents liés aux basculements vident la batterie en quelques mois.

  • La solution de rupture : Placer un microcontrôleur ESP32 à l'abri dans votre garage, relié par un câble blindé au pluviomètre situé sur le toit. L'ESP32 est alimenté en continu via USB/secteur.

3. La partie Thermométrie

Pour la température et la mesure d'humidité de l'air (consultez notre définition de l'hygrométrie dans le glossaire), un capteur sans fil Zigbee 3.0 placé sous abri ventilé fait des merveilles de réactivité et de portée.


Étape 1 : Le Câblage et le Hack Physique

Le principe de fonctionnement d'un pluviomètre à augets est très simple : chaque fois que l'auget se remplit d'une certaine quantité d'eau (environ 0,28 mm), il bascule sous le poids (un phénomène physique et mécanique détaillé dans notre article comment fonctionne un pluviomètre). Ce basculement fait passer un aimant devant un petit interrupteur magnétique (interrupteur Reed ou Reed Switch), fermant brièvement le circuit électrique.

Le processus est mécanique, cyclique et extrêmement fiable :

  • 🌧️ Accumulation : La pluie tombe et remplit l'un des deux augets du pluviomètre.
  • ⚖️ Bascule : Une fois le poids limite atteint, l'auget bascule sous l'effet de la gravité et commence à vider son eau, tandis que le second auget commence à se remplir.
  • 🧲 Contact magnétique : Lors du basculement, un petit aimant fixé sur l'axe des augets passe devant un interrupteur magnétique (appelé Reed Switch).
  • Impulsion : L'interrupteur se ferme brièvement sous l'effet magnétique et envoie une impulsion électrique de type "circuit fermé" vers l'ESP32.

Le montage dans le garage

  1. Tirez un câble bifilaire (un câble réseau Ethernet blindé ou un câble téléphonique fait parfaitement l'affaire) depuis le pluviomètre sur le toit jusqu'à l'ESP32 dans votre garage.
  2. Connectez l'un des fils sur le pin GND de votre ESP32.
  3. Connectez l'autre fil sur un pin de lecture (le pin GPIO16 configuré sur notre ESPRain) configuré en résistance de tirage vers le haut (INPUT_PULLUP).

⚠️ L'astuce du Maker : Le condensateur anti-parasites

!IMPORTANT Un interrupteur magnétique mécanique crée des micro-étincelles et des rebonds (bouncing) lors de la bascule. De plus, la longueur du câble agissant comme une antenne peut capter des parasites électriques (parasites de secteur, foudre lointaine). Sans filtrage, Home Assistant comptera des dizaines de fausses impulsions.

La solution : Soudez un petit condensateur de 100 nF (nanofarads) en parallèle entre le pin GPIO et le GND, au plus proche de votre ESP32. Ce condensateur va absorber les variations rapides et lisser le signal, réduisant fortement les fausses mesures.


Étape 2 : Configuration sous ESPHome

Pour intégrer l'ESP32 dans Home Assistant, nous utilisons ESPHome. C'est de loin la méthode la plus rapide et la plus stable.

Dans votre fichier de configuration ESPHome (par exemple esphome-web-f64264.yaml), nous déclarons le pluviomètre comme un simple capteur binaire (binary_sensor) avec un filtre logiciel anti-rebond pour doubler la sécurité du condensateur physique :

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO16 # Le pin physique connecté à votre câble de pluviomètre
      mode: INPUT_PULLUP # Utilise la résistance de pull-up interne de l'ESP32 pour stabiliser le signal
    name: "Rain Sensor"
    device_class: door
    filters:
      - delayed_on: 10ms # Filtre anti-rebond logiciel de 10 millisecondes
      - delayed_off: 10ms

Une fois cette configuration flashée, votre ESPHome remontera automatiquement une entité binary_sensor.esphome_web_f64264_rain_sensor (ou un nom similaire basé sur votre identifiant d'appareil) dans votre intégration Home Assistant.

💡 Fichier de configuration complet (ESPRain)

Voici le code YAML complet, propre et ordonné pour notre module ESPRain, débarrassé de toute fonction annexe pour se concentrer uniquement sur la télémétrie réseau, le système et votre pluviomètre à augets basculants :

substitutions:
  name: esphome-web-f64264
  friendly_name: ESPRain

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: "1.1"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Activer les logs de débogage
logger:

# Activer l'API pour l'intégration automatique dans Home Assistant
api:

# Autoriser les mises à jour sans fil (Over-The-Air)
ota:
  - platform: esphome

# Permettre la configuration Wi-Fi initiale via liaison série
improv_serial:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  ap: {}

# Portail captif de secours (si perte Wi-Fi)
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Improv BLE pour la configuration Wi-Fi initiale sans fil
esp32_improv:
  authorizer: none

# Serveur Web local pour interface et diagnostic direct
web_server:
  port: 80
  auth:
    username: !secret web_username
    password: !secret web_password

# Diagnostics réseau et Wi-Fi de l'ESP32
text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP Address"
    ssid:
      name: "${friendly_name} WiFi SSID"
  - platform: template
    name: "${friendly_name} WiFi Channel"
    lambda: |-
      return to_string(WiFi.channel());
    update_interval: 86400s

sensor:
  - platform: uptime
    name: "${friendly_name} Uptime"
  - platform: wifi_signal
    name: "WiFi Signal Strength"
    update_interval: 600s

# Capteur Pluviomètre physique à impulsions
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO16
      mode: INPUT_PULLUP # Résistance de pull-up interne pour stabiliser le signal électrique
    name: "Rain Sensor"
    device_class: door # Défini comme un capteur de contact sec
    filters:
      - delayed_on: 10ms # Filtre anti-parasite et anti-rebonds logiciels de 10ms
      - delayed_off: 10ms

!NOTE Le bloc web_server utilise !secret web_username et !secret web_password. Ces deux valeurs doivent être définies dans votre fichier secrets.yaml ESPHome (situé dans le répertoire /config/esphome/secrets.yaml de Home Assistant), comme ceci :

web_username: mon_identifiant
web_password: mon_mot_de_passe_fort

Si vous ne souhaitez pas protéger le serveur web, supprimez simplement le bloc auth: — le serveur restera accessible mais sans authentification.


Étape 3 : Conversion des Impulsions en Millimètres

Sur le modèle de pluviomètre recommandé, chaque basculement d'auget équivaut à précisément 0,2794 mm de pluie.

Pour transformer nos impulsions binaires en volume d'eau dans Home Assistant, nous allons passer par un compteur virtuel et un capteur de modèle (template sensor).

1. Créer le compteur d'impulsions (Counter Helper)

Dans Home Assistant, allez dans Paramètres -> Appareils & Services -> Entrées -> Créer une entrée -> Compteur.

  • Nommez-le rainsensor_flips. Cela va générer l'entité counter.rainsensor_flips.

2. Créer l'automatisation d'incrémentation

Chaque fois que le capteur passe à on (l'auget a basculé), nous incrémentons notre compteur :

alias: "Pluie - Incrémentation Compteur Pluviomètre"
description: "Incrémente le compteur d'augets à chaque impulsion du capteur ESP32"
trigger:
  - platform: state
    entity_id: binary_sensor.esphome_web_f64264_rain_sensor
    to: "on"
condition: []
action:
  - action: counter.increment
    target:
      entity_id: counter.rainsensor_flips
mode: single

3. Créer le Template Sensor de conversion en mm

Dans votre fichier configuration.yaml de Home Assistant, ajoutez le code suivant pour effectuer la multiplication mathématique en temps réel et exposer la pluie totale accumulée :

template:
  - sensor:
      - name: "Pluie Cumulée Brute"
        unique_id: "pluie_cumulee_brute"
        unit_of_measurement: "mm"
        device_class: precipitation
        state_class: total_increasing
        state: "{{ states('counter.rainsensor_flips') | float * 0.2794 }}"

Étape 4 : Les Compteurs Temporels (Utility Meter)

Maintenant que vous disposez d'un capteur global cumulé (sensor.pluie_cumulee_brute), nous devons configurer des compteurs glissants pour obtenir la pluie du jour, du mois, et de l'année.

La méthode moderne et sans code consiste à utiliser les Helpers (Entrées) graphiques de Home Assistant :

  1. Allez dans Paramètres -> Appareils et services -> Entrées -> Créer une entrée.
  2. Sélectionnez Compteur de services publics (Utility Meter).
  3. Remplissez les paramètres pour le Jour :
    • Nom : sensor.rainfall_today (ou Rainfall today)
    • Capteur d'entrée : sensor.pluie_cumulee_brute
    • Cycle de remise à zéro : Quotidien
  4. Recommencez la même opération pour créer le compteur du Mois (cycle Mensuel) pour obtenir sensor.rain_month.
  5. Recommencez une dernière fois pour le compteur de l'Année (cycle Annuel) pour obtenir sensor.rain_year.

Home Assistant se charge d'archiver vos données et de réinitialiser automatiquement les compteurs à minuit, en fin de mois et en fin d'année !


Étape 5 : Le Dashboard Lovelace (Le rendu Visuel)

Voici le rendu visuel et concret de ce tableau de bord de suivi de la pluie obtenu directement dans Home Assistant :

Pour obtenir ce magnifique rendu avec les indicateurs instantanés et le graphique historique des 30 derniers jours, copiez-collez ce code YAML dans l'éditeur de votre carte de tableau de bord :

type: vertical-stack
cards:
  - type: heading
    heading: Pluie
  - type: grid
    columns: 3
    square: false
    cards:
      - type: tile
        entity: sensor.rainfall_today
        name: Jour
      - type: tile
        entity: sensor.rain_month
        name: Mois
      - type: tile
        entity: sensor.rain_year
        name: Année
        vertical: false
        features_position: bottom
  - type: custom:apexcharts-card
    graph_span: 30d
    header:
      show: true
      title: Historique 30 jours
    series:
      - entity: sensor.rainfall_today
        type: column
        color: "#00d2ff"
        group_by:
          func: max
          duration: 1d

!TIP Ce code utilise la carte personnalisée apexcharts-card (disponible gratuitement via HACS). Elle permet d'afficher des barres d'historique quotidiennes en récupérant la valeur maximale atteinte par sensor.rainfall_today chaque jour juste avant sa réinitialisation de minuit. Une méthode ultra-légère pour votre base de données !


Conclusion et automatisations possibles

Votre station météo domotique locale est maintenant opérationnelle. Grâce à ces données fiables et à l'absence totale de piles dans votre pluviomètre, vous pouvez créer des automatisations intelligentes d'une grande valeur d'usage :

  • Fermeture automatique des stores dès les premières gouttes détectées par l'ESP32.
  • Désactivation de l'arrosage automatique si la pluie accumulée sur le jour glissant dépasse un certain seuil.
  • Notification SMS/téléphone en cas de précipitations extrêmes pour protéger vos plantes ou vérifier les gouttières.

Pour aller plus loin dans la protection de vos capteurs de température Zigbee contre le rayonnement solaire direct, n'hésitez pas à consulter notre guide complet sur les abris météo et leur installation. Si vous préférez une solution domotique clé en main utilisant le protocole Matter sans passer par le DIY, découvrez également notre avis complet sur la SwitchBot Weather Station.

Besoin d'aide pour choisir ?

Laissez-nous vous guider. Notre assistant intelligent analyse vos besoins et vous recommande les 3 meilleures stations correspondantes.

Ou découvrez votre profil météo en 5 questions

D'autres guides qui pourraient vous plaire