Sensor für Regenmesser in configuration.jaml bleibt immer min. 1

Hallo zusammen,

ich habe ein Problem mit meinem Sensor für den Regenmesser. Ich habe folgendes nachgebaut: SS4H-ZRG Zigbee Rain Gauge – DIY project based Zigbee Door Sensor – Smart Solutions for Home
Die Hardware mit dem Aqara Sensor funktioniert super.

Die Konfiguration habe ich auch übernommen:

sensor:
  - platform: history_stats
    name: "Aqara Rainsensor flips/on"
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "on"
    type: count
    start: "{{ now() - timedelta(hours=24)}}"
    end: "{{ now() }}"
  - platform: history_stats
    name: "Aqara Rainsensor flips/off"
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "off"
    type: count
    start: "{{ now() - timedelta(hours=24)}}"
    end: "{{ now() }}"
template:
  - sensor:
      - name: Rainfall [day]
        state_class: measurement
        unique_id: rainfall_day
        unit_of_measurement: mm
        icon: mdi:weather-pouring
        state: >-
          {% set count = (states('sensor.aqara_rainsensor_flips_on') | int(0)) + (states('sensor.aqara_rainsensor_flips_off') | int(0)) %}
          {% set mm = count * 0.52615 %}
          {% if count >= 0 %}
            {{ mm|round(1, 'floor') }}
          {% endif %}

Und nun kommt mein Problem. Ich finde die Art wie hier gemessen wird irgendwie nicht einleuchtend. Mir wäre es lieber, wenn der Sensor einfach kontinuierlich hochzählt, wie mein Wasserverbrauchszähler.
Deshalb habe ich die state_class beim template sensor auf total_increasing geändert. Und bei den Sensoren start: "{{ now().replace(hour=0, minute=0, second=0) }}"

Aber das funktioniert nicht so wie ich mir das vorstelle. Außerdem bleibt der Sensor “Aqara Rainsensor flips/on” immer auf min. 1 und wird nie 0.

grafik

Grundsätzlich verstehe ich die platform: history_stats nicht wirklich. Gibt es eine einfachere Lösung? Ich will ja nur bei jedem Statuswechsel (on / off) eins hochzählen.

Grüße
Fabian

Guten Morgen,

mittlerweile ist der andere Sensor dauerhaft auf 1.

grafik

Ich verstehe das nicht. Es hat nämlich nicht geregnet.

Gibt es eine Möglichkeit den Sensor aktiv auf 0 zu setzen?

Grüße
Fabian

Wenn es innerhalb der letzten 24 Stunden nicht geregnet hat, ist doch der Wert nahezu ok? Hat es denn am 19.4. über den Tag geregnet?

Moin,

ich lese seitdem Du den Thread erstellt hast hier mit und ich finde das Projekt sehr spannend.
Leider muss ich zugeben, dass ich nicht ganz verstehe, wo Dein Verständnisproblem ist.

Ich habe das Projekt so verstanden, dass die Impulse Offen und Geschlossen jeweils in einem Counter gezählt werden, anschließend werden sie einmal für die letzten 24 Stunden summiert und mit einer Menge an Regenwasser multipliziert, das Ergebnis dann so umgerechnet, dass es der Menge Liter/pro Quadratmeter entspricht.

Die Hardware funktioniert doch so, dass Regenwasser in eine der beiden Auffangflächen läuft, ist sie mit der nötigen Menge gefüllt, dann kippt sie und entweder öffnet, oder schließt sich der Aquara Sensor, wenn dann kein weiterer Regen fällt, verbleibt er in der letzten Stellung.
Der erste Teil Deines Codes, den Du nutzt

Home Assistant Sensoren zur Überwachung des Aqara Rainsensors

Diese Konfiguration definiert zwei Sensoren in Home Assistant, die den Aqara Rainsensor (binary_sensor.lumi_lumi_sensor_magnet_aq2_opening) überwachen und die Anzahl der Schalterwechsel in den letzten 24 Stunden in den Zustand “ein” oder “aus” verfolgen.

Sensorkonfiguration:

sensor:
  - platform: history_stats
    name: "Aqara Rainsensor Flips/Ein"
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "on"
    type: count
    start: "{{ now() - timedelta(hours=24)}}"
    end: "{{ now() }}"
  - platform: history_stats
    name: "Aqara Rainsensor Flips/Aus"
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "off"
    type: count
    start: "{{ now() - timedelta(hours=24)}}"
    end: "{{ now() }}"

Erläuterung:

  • platform: history_stats: Diese Zeile kennzeichnet diese Sensoren als Verlaufsstatistik-Sensoren. Sie verfolgen Änderungen in anderen Sensoren über die Zeit.
  • name: Dies definiert den Anzeigenamen für den Sensor, den Sie in der Home Assistant-Benutzeroberfläche sehen.
    • “Aqara Rainsensor Flips/Ein” verfolgt, wie oft der Sensor in den letzten 24 Stunden auf “ein” geschaltet wurde.
    • “Aqara Rainsensor Flips/Aus” verfolgt, wie oft der Sensor in den letzten 24 Stunden auf “aus” geschaltet wurde.
  • entity_id: Dies weist auf den zu überwachenden Sensor hin. In diesem Fall handelt es sich um binary_sensor.lumi_lumi_sensor_magnet_aq2_opening, der wahrscheinlich auf Ihren Aqara Rainsensor verweist.
  • state: Dies definiert den zu zählenden Statuswechsel. Hier ist es auf “ein” und “aus” für die jeweiligen Sensoren eingestellt.
  • type: count: Dies gibt an, dass der Sensor die Anzahl der Male zählen soll, um den angegebenen Wert (“ein” oder “aus”) zu ändern.
  • start: {{ now() - timedelta(hours=24) }} und end: {{ now() }}: Dies definiert das Zeitfenster, in dem der Sensor nach Statusänderungen sucht. Es beginnt vor 24 Stunden ({{ now() - timedelta(hours=24) }}) und reicht bis zur aktuellen Zeit ({{ now() }}).

Funktionalität:

Diese Sensoren zeigen Ihnen an, wie oft es in den letzten 24 Stunden geregnet hat (Sensor auf “ein” geschaltet) und wie oft es aufgehört hat zu regnen (Sensor auf “aus” geschaltet). So können Sie Regenereignisse überwachen und in Home Assistant möglicherweise Automatisierungen basierend darauf auslösen.

Also, so wie Du es versteht, dass der Sensor auf Null zurückgehen muss, ist nicht korrekt, also ist das, sagen wir mal, digital, nur 0 und 1, welche gezählt werden und mit den letzten 24 Stunden verglichen werden.

VG
Bernd

P.S.: Hier ist auch noch die Erklärung für den zweiten Code

Home Assistant Sensor für kumulative Niederschlagsmenge (Tag)

Dieser Code definiert einen Sensor in Home Assistant, der die kumulative Niederschlagsmenge des aktuellen Tages in Millimeter (mm) misst.

Sensorkonfiguration:

template:
  - sensor:
    - name: Rainfall [day]
      state_class: measurement
      unique_id: rainfall_day
      unit_of_measurement: mm
      icon: mdi:weather-pouring
      state: >-
        {% set count = (states('sensor.aqara_rainsensor_flips_on') | int(0)) + (states('sensor.aqara_rainsensor_flips_off') | int(0)) %}
        {% set mm = count * 0.52615 %}
        {% if count >= 0 %}
          {{ mm|round(1, 'floor') }}
        {% endif %}

Erläuterung:

  • template: Dieser Abschnitt kennzeichnet die Verwendung eines Templates zur Definition des Sensors.
  • sensor: Definiert einen neuen Sensor innerhalb des Templates.
    • name: Rainfall [day] Legt den Anzeigenamen des Sensors fest (z.B. “Niederschlag [Heute]”).
    • state_class: measurement Markiert den Sensor als Messwert (z.B. Temperatur, Niederschlag).
    • unique_id: rainfall_day Vergibt eine eindeutige ID für den Sensor.
    • unit_of_measurement: mm Definiert die Maßeinheit (Millimeter).
    • icon: mdi:weather-pouring Legt das Symbol für den Sensor fest (z.B. Regenschauer-Symbol).
    • state: Dieser Abschnitt bestimmt den Wert, den der Sensor anzeigen soll.
      • {% set count = … %}: Speichert die Summe der gezählten “Ein”- und “Aus”-Schalter des Aqara Rainsensors in der Variable “count”.
        • states('sensor.aqara_rainsensor_flips_on') ruft den aktuellen Wert des Sensors “Aqara Rainsensor Flips/Ein” ab.
        • int(0) wandelt den Wert in eine Ganzzahl um und setzt den Standardwert auf 0, falls kein Wert verfügbar ist.
        • Die Addition zählt die “Ein”- und “Aus”-Schalter zusammen.
      • {% set mm = … %}: Berechnet die Niederschlagsmenge in Millimeter basierend auf der Anzahl der Schalter (“count”) und einem angenommenen Umrechnungsfaktor (0.52615, muss ggf. an Ihren Sensor angepasst werden).
      • {% if count >= 0 %}: Überprüft, ob die Anzahl der Schalter mindestens 0 ist (vermeidet negative Niederschlagsmengen).
        • {{ mm|round(1, ‘floor’) }}: Falls die Bedingung erfüllt ist, zeigt der Sensor die Niederschlagsmenge in mm an, gerundet auf eine Nachkommastelle (abgerundet).
      • {% endif %}: Schließt die If-Abfrage ab.

Funktionalität:

Dieser Sensor nutzt die gezählten Schalterwechsel des Aqara Rainsensors, um die kumulative Niederschlagsmenge des Tages abzuschätzen. Bedenken Sie, dass die Umrechnung mit dem Faktor 0.52615 möglicherweise an Ihren spezifischen Sensor angepasst werden muss.

@four2six Ja, es hat am 19. geregnet. Nahezu ok ist halt nicht ganz ok. :wink:

@dp20eic Wow, was für eine Antwort. Danke für die Mühe!

Ja, genau.

Und genau da macht es für mich keinen Sinn. Angenommen gestern Abend hat es geregnet. Dann wird mir morgens angezeigt, dass es heute geregnet hat, obwohl es seit 0 Uhr nicht geregnet hat.

Das stimmt nicht. Denn jeder “flip” (von on zu off, und von off zu on) bedeutet, dass es 0,52615 mm geregnet hat.

Der Aqara-Sensor hat natürlich immer einen Zustand (entweder on oder off). Aber die abgeleiteten Sensoren (counter) müssen auf Null zurückgehen. Denn wenn er 1 bleibt, wird mir jeden Tag 0,5 mm regen angezeigt obwohl es nicht regnet.
Und was genau wird mit was verglichen. :hushed: Das verstehe ich auch nicht.

Grüße
Fabian

Der Sensor hat sich aus welchem Grund einmal geschaltet, genau das steht in der Zusammenfassung. Steht auch so in deiner Übersicht, er ist einmal umgesprungen, so dass “flip off” ausgelöst wurde. Irgendwann am 23.4. um 17 Uhr müssten beide Sensoren 0 angezeigt haben, wenn es wirklich nicht mehr geregnet hat.

Ich glaube ich verstehe gerade erst was dein eigentliches Problem ist:
Dein Sensor zählt die Umschaltungen innerhalb der letzten 24 Stunden, nicht die des aktuellen Tages.

start: "{{ now() - timedelta(hours=24)}}"

Wenn du den aktuellen Tag angezeigt haben willst, musst du die beiden history stats Zähler anders berechnen.

start: "{{ today_at() }}"

Genau das ist eben nicht passiert. Der Aqara-Sensor war durchgehend (> 24h) auf “geschlossen”, und trotzdem ist der “Aqara Rainsensor flips/off” auf 1 geblieben.

Den Gedanken hatte ich auch schon.
Aber da müssen dann ab 0 Uhr beide Sensoren Null sein, richtig?

Nochmal das Prinzip, wie von @dp20eic richtig erklärt: Jedesmal wenn das Teil in die eine Richtung klappt, wird der Aqara-Sensor geschlossen, und wenn es in die andere Richtung klappt, wird er wieder geöffnet.

Nein, da hast du einen grundsätzlichen Denkfehler. Die “Sensoren” werden berechnet. HA rechnet einfach aus (“zählt”), wie oft innerhalb des angegebenen Zeitraums der Aqara Schalter auf On für den einen Sensor und auf Off für den anderen Sensor geschaltet wurde. Die Summe mal dem angenommenen Multiplikator ergibt die Regenmenge pro qm.

1 „Gefällt mir“

Moin,

ließ doch noch mal meine Erklärung der einzelnen Codezeilen, dann siehst Du doch, dass immer nur die Änderungen gezählt werden.
Wenn um 10 Uhr der “Aqara Rainsensor Flips/Ein” auf 1 Stand

Wow, danke, Du warst schneller, ich war gerade dabei ein Bild zu malen und das kann ich gar nicht :slight_smile:

VG
Bernd

P.S.: was man noch machen könnte, wäre wirklich den vergangenen Tag abzufragen, aber das sollte auch über einen Helfer gehen, muss ich mir mal durch den Kopf gehen lassen

Ich glaube wir reden aneinander vorbei. Ich versuche mal die ganze Kette zu beschreiben:

Angenommen es regnet und die Wippe kippt dadurch 5 Mal. Sagen wir der Aqara-Sensor war geschlossen, dann wurde er 3 Mal geöffnet und 2 Mal geschlossen.

Das bewirkt bei den beiden history_stats:
Aqara Rainsensor flips/off = 3
Aqara Rainsensor flips/on = 2

Dadurch wird der template sensor rainfall_day:
(3 + 2) x 0,52615 = 2,63075 → 2,6

Soweit richtig?

Wenn es dann 24 Stunden nicht regnet werden die beiden history_stats auf Null gesetzt, da die Wippe kein öffen oder schliesen bewirkt hat:
Aqara Rainsensor flips/off = 0
Aqara Rainsensor flips/on = 0

Dadurch wird der template sensor rainfall_day:
(0 + 0) x 0,52615 = 0

Ist das soweit auch richtig?

Neuer Sensor analog dem anderen mit:

start: "{{ today_at() - timedelta(hours=24)}}"
end: "{{ today_at() }}"

Moin,

nein, soweit ich das verstanden habe, ist nicht der aktuelle Status das auslösende Element, sondern der Wechsel von z. B. on zu off, wie hinterher auch immer die Wippe steht, ist das irrelevant.

VG
Bernd

Ja. wenn das innerhalb des angegebenen Zeitraums passiert ist.

Es wird nichts “auf Null gesetzt”. Der Sensor enthält “automatisch” die Anzahl der Kippvorgänge innerhalb des im Sensor angegebenen Zeitraums. Kann es sein, dass du erwartest, dass du was neues berechnen musst? Der Wert des Sensors “ist” einfach die gesuchte Zahl, die sich mit fortschreitender Zeit “einfach so” verändert.

edit:
aber ja:

das ist insofern richtig, wenn das in dem Zeitraum so ist.

Aber genau das meine ich doch.
Wenn der Zähler mit start: "{{ today_at() }}" definiert ist, beginnt er um 0 Uhr von vorne, also mit Null.
Wenn der Zähler mit start: "{{ now() - timedelta(hours=24)}}" definiert ist, ist er 24 Stunden nach dem letzten Kippvorgang auf Null.

Aktuell sind die Zähler mit start: "{{ today_at() }}" definiert:

  #Regensensor
  - platform: history_stats
    name: "Aqara Rainsensor flips/on"
    entity_id: binary_sensor.regensesnsor_contact #binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "on"
    type: count
    start: "{{ today_at() }}"
    end: "{{ now() }}"
  - platform: history_stats
    name: "Aqara Rainsensor flips/off"
    entity_id: binary_sensor.regensesnsor_contact #binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    state: "off"
    type: count
    start: "{{ today_at() }}"
    end: "{{ now() }}"

Das Hochzählen funktioniert richtig. Immer wenn ein Kippvorgang stattgefunden hat wird der entsprechende Zähler eins hoch gezählt. (siehe 22. und 24. jeweils so um 18 Uhr)

Der “Aqara Rainsensor flips/on” ist wie erwartet anschließend um 0 Uhr auf Null gesprungen. Nur eben der “Aqara Rainsensor flips/off” nicht. Der ist von 2 auf 1 gesprungen und für 48 h so geblieben! Erst um 0 Uhr am 25. ist er auf Null gesprungen. Warum? Dafür ist aber der “Aqara Rainsensor flips/on” diesmal auf 1 geblieben.

weil der

geschaltet hat, nehme ich an. Guckst du. :wink:

edit:
stimmt nicht, siehe unten.

@four2six Das brauchst du nicht annehmen. Man sieht doch in dem Bild dass er nicht geschaltet hat.

ich nehme es an, denn da steht “Regensesnsor Tür” . Ist das der binary sensor?

Ach so, ja.
Regensesnsor Tür = binary_sensor.lumi_lumi_sensor_magnet_aq2_opening

und wann hast du das

so eingestellt? Ich nehme an gestern gegen 18 Uhr?

edit:
nochmal zur Klarstellung:

  1. es zählt die Anzahl der “on” und “off” in dem Zeitraum und multipliziert. Da der Sensor immer einmal entweder “on” oder “off” pro Tag ist, kommt also immer mindestens einmal “on” oder “off” raus. Wenn du das nicht willst, musst du es um 1 reduzieren.
  2. Der Sensor hat den Wert zu einem Zeitpunkt für immer. Da ändert sich nachträglich nix, wenn du die Logik umstellst.

Nein, das war vor zwei oder drei Tagen.