Regenmenge messen mit Zigbee – DIY

Dieses Projekt basiert auf dem DIY Zigbee rain gauge von parrel.

Ich habe das Projekt nachgebaut, eine Video-Anleitung erstellt und den Code überarbeitet sowie vereinfacht und deutsch kommentiert. Ich verwende ausserdem ausschließlich das metrische System in diesem Beispiel. Außerdem zeige ich euch, wie ihr die ApexCharts-Card über HACS integriert und konfiguriert und alle anderen benötigten Grundlagen, die das Projekt benötigt, und danach bin ich sicher,

JEDER KANN DAS!!!
Regenmessung Dashboard Ansicht
Regenmesser MS-WH-SP-RG
Aqara Door Sensor

Hier findet ihr das benötigte Material!

Zusätzlich braucht ihr einen Lötkolben samt Lötzinn, einen feinen Schlitzschraubendreher sowie ein Cuttermesser.


Regensensor – Vorbereitung

Der Regensensor funktioniert nach dem Prinzip einer Wippe. Jedes Mal, wenn die Wippe voll ist, kippt sie um und ein kleiner Magnet löst einen Impuls aus.

Innenleben des Regensensors

Um diese Impulse zählen zu können, schließen wir den Aqara Tür- und Fenstersensor an die Kontakte des Regensensors an. Dazu müssen wir das Gehäuse des Aqara Sensors vorsichtig öffnen und zwei Kabel an den Reed-Kontakt löten.


Kalibrierung: Wie viel ist ein Wippenschlag?

Damit Home Assistant weiß, wie viel Regen (in mm/m²) gefallen ist, müssen wir berechnen, wie viel Wasser ein einziger „Flip“ der Wippe darstellt.

Mathematische Berechnung
1. Auffangfläche messen: Länge x Breite des Trichters (z.B. 11 cm x 5 cm = 55 cm²).
2. Wassermenge pro Flip: Mit einer Spritze Wasser einfüllen, bis die Wippe kippt (z.B. 1,67 ml).
3. Berechnung:
(Milliliter / Fläche in cm²) * 10 = mm pro Flip
(1.67 / 55) * 10 = 0.3036 mm pro Flip

Code-Integration in Home Assistant

Zuerst öffnen wir den File Editor und erstellen im Hauptverzeichnis homeassistant/ einen neuen Ordner mit dem Namen packages.

Anschließend navigieren wir in diesen Ordner und legen eine neue Datei mit dem Namen regenmesser.yaml an.

In diese Datei könnt ihr nun den folgenden YAML-Code einfügen und anschließend speichern.

Solltet ihr andere Werte für 0,30303 mm Regen pro Impuls errechnet haben, dann könnt ihr euren Wert hier bei template: – sensor eintragen: {% set mm_per_flip = 0.30303 %}
YAML – regenmesser.yaml (zum Aufklappen)
# 1. Zählt die "Flips" des Regensensors seit Mitternacht
sensor:
  - platform: history_stats
    name: Rainsensor Flips Today
    entity_id: binary_sensor.regensensor_opening
    state: 'off'
    type: count
    start: "{{ as_timestamp(now().replace(hour=0, minute=0, second=0, microsecond=0)) }}"
    end: "{{ as_timestamp(now()) }}"
    unique_id: rainsensor_flips_today
# 2. Berechnet die tägliche Regenmenge und die Intensität
template:
  - sensor:
      # Sensor für täglichen Regen
      - name: Rainfall today
        unique_id: rainfall_today
        unit_of_measurement: 'mm'
        state_class: total_increasing
        state: >-
          {% set count = states('sensor.rainfall_today') | int(0) %}
          {% set mm_per_flip = 0.30303 %}
          {{ (count * mm_per_flip) | round(1, 'floor') }}
        availability: >-
          {{ states('sensor.rainfall_today') not in ['unknown', 'unavailable'] }}
      # 2b. Aktuelle Regenintensität in mm/h
      - name: "Rain intensity"
        unique_id: rainfall_per_hour
        unit_of_measurement: 'mm/h'
        state_class: measurement
        state: >-
          {% set gradient = state_attr('binary_sensor.rainfall_trend', 'gradient') | float(0) %}
          {% set rain_hour = (gradient * 3600) | round(1, 'floor') %}
          {% if rain_hour >= 0 %}
            {{ rain_hour }}
          {% else %}
            {{ 0 }}
          {% endif %}
        availability: >-
          {{ state_attr('binary_sensor.rainfall_trend', 'gradient') is not none }}
# 3. Trend-Sensor zur Berechnung der Änderungsrate der täglichen Regenmenge
binary_sensor:
  - platform: trend
    sensors:
      rainfall_trend:
        entity_id: sensor.rainfall_today
        max_samples: 4
# 4. Zähler für wöchentliche, monatliche und jährliche Regenmengen
utility_meter:
  rain_week:
    source: sensor.rainfall_today
    cycle: weekly
  rain_month:
    source: sensor.rainfall_today
    cycle: monthly
  rain_year:
    source: sensor.rainfall_today
    cycle: yearly

Damit unsere neu erstellte YAML-Datei auch eingebunden wird, öffnen wir nun die configuration.yaml und ergänzen unter dem Abschnitt homeassistant: den Verweis auf den packages-Ordner.

YAML – configuration.yaml (Auszug)
homeassistant:
  packages: !include_dir_named packages

Wenn wir keine Fehlermeldung bekommen haben, dann können wir jetzt Home Assistant neu starten.


Dashboard einrichten

Als Nächstes möchten wir die Daten in unserem Dashboard anzeigen.
Wählt dazu die Stelle aus, an der ihr die Karte einfügen möchtet, und fügt eine neue Karte hinzu.

Der Kartentyp ist dabei zunächst egal, da wir den Inhalt im Anschluss direkt im Code bearbeiten.
Sobald die Karte erstellt ist, klickt unten links auf „Code-Editor anzeigen“ und fügt folgenden Code ein:

YAML – Dashboard Karte: Niederschlag Übersicht (zum Aufklappen)
type: entities
title: Niederschlag Übersicht
entities:
  - entity: binary_sensor.regensensor_opening
    name: Regensensor Status
  - entity: sensor.rainsensor_flips_today
    name: Flips Heute
  - entity: sensor.rainfall_today
    name: Regen Heute
    icon: mdi:water
  - entity: sensor.rain_intensity
    name: Regenintensität
    icon: mdi:water
  - entity: sensor.rain_week
    name: Wöchentlicher Regenfall
    icon: mdi:weather-rainy
  - entity: sensor.rain_month
    icon: mdi:weather-rainy
    name: Monatlicher Regenfall
  - entity: sensor.rain_year
    name: Jährlicher Regenfall
    icon: mdi:weather-rainy
state_color: true
Dashboard Niederschlag Card

ApexChart im Dashboard – für Fortgeschrittene

Für die Chart-Karte verwenden wir die ApexCharts-card, die sich im HACS (Home Assistant Community Store) befindet. Wie ihr HACS in Home Assistant installiert, erfahrt ihr hier.

Im HACS installieren wir die ApexCharts-card von RomRider und fügen sie in unserem Dashboard hinzu und dort könnt ihr folgenden Code einfügen.

ApexCharts Card in HACS
YAML – ApexCharts Card: Regenfall (zum Aufklappen)
type: custom:apexcharts-card
graph_span: 30d
header:
  show: true
  title: Regenfall
  show_states: true
span:
  start: day
  offset: "-29d"
series:
  - entity: sensor.rainfall_today
    color: aqua
    type: column
    group_by:
      func: max
      duration: 1d
Dashboard Regenfall Chart Card

GRATULATION! Das Projekt ist nun fertiggestellt, und ich hoffe, es hat euch gefallen. Lasst mir gerne einen Kommentar da und teilt mir mit, wie es euch mit dem Regenmengen-Sensor-Projekt ergangen ist oder ob ihr auf irgendwelche Probleme gestoßen seid.


Bonus: Zähler zurücksetzen

Um den Zähler wieder auf 0 zu setzen, können wir einen Taster in Lovelace Dashboard erstellen, der alles wieder zurück setzt.

YAML – Dashboard Karte: Zähler zurücksetzen (zum Aufklappen)
type: button
name: Regenzähler zurücksetzen
icon: mdi:restart
tap_action:
  action: call-service
  service: utility_meter.reset
  data:
    entity_id:
      - sensor.rain_week
      - sensor.rain_month
      - sensor.rain_year
Regensensor zurücksetzen Dashboard Taster

Zeitraum der ApexCharts-Karte anpassen

Ihr könnt den Startzeitraum der Karte festlegen oder ihr wartet einfach das Monat ab, bis die „Testdaten“ verschwinden. Es ist nicht empfohlen die Datenbank zurückzusetzen, zumindest nicht auf einem „Live-System“.

YAML – ApexCharts: Zeitraum festlegen
span:
  start: minute
  offset: +0d  # beginnt heute

Fotos vom Projekt aus der Community

Regensensor bei Walter im Einsatz

Hier seht ihr den Regensensor bei Walter im Einsatz.

Vielen Dank für das Foto.

Regensensor von Wolfgang W.

Hier ist der Regensensor bei Wolfgang im Betrieb zu sehen.

Vielen Dank für das Foto.

Unterstütze meine Projekte

Wenn dir dieser Beitrag geholfen hat, freue ich mich über einen kleinen Beitrag für die Kaffeekasse.