Zwei Automatisationen ohne unerwünschte Wechselwirkungen verknüpfen

Hallo miteinander,

ich bin recht neu im Thema HA, ESPHome und erst recht in YAML und konnte bisher alles was ich machen wollte, irgendwie aus den Beispielen zusammen basteln, aber jetzt bin ich an einem Punkt angekommen, an dem ich nicht weiter komme:
Ich habe eine Wetterstation mit einem BME280 für Temperatur, Luftdurck und Luftfeuchtigkeit, einem BH1750 als Sensor für die Beleuchtungsstärke und einem beheizten, kapazitiven Regensensor.

Und die Heizung des Regensensors ist gerade irgendwie mein Problem.
Und zwar soll die Heizung einschalten
a) wenn es regnet, um den Sensor schneller zu trocknen,
b) wenn es kälter als 4°C sind (3° ein, 5° aus) um auch Schnee erkennen zu können.

a) habe ich so gelöstt:

  - platform : gpio
    name: "Regen"
    device_class: moisture
    icon: mdi:moisture
    pin:
      number: 14
      inverted: True
      mode: 
        input: True
        pullup: True
    id: ws_raining
    filters:
      - delayed_on: 1000ms
      - delayed_off: 1000ms
    on_press: 
      then:
        - switch.turn_on: ws_heater
    on_release: 
      then:
        - switch.turn_off: ws_heater

und b) so:

  - platform: bme280_i2c
    address:  0x76    
    temperature:
      name: "Aussentemperatur"
      id: ws_temp
      on_value_range:
        - below: 3.0
          then:
            - switch.turn_on: ws_heater
        - above: 5.0
          then:
            - switch.turn_off: ws_heater

Beide Automatisierungen funktionieren für sich gesehen, allerdings habe ich das Problem, daß die Heizung auch dann ausschaltet, wenn es regnet, aber die Temperatur über 5°C steigt und wenn es kälter als 3°C ist, aber aufhört, zu regnen.

Leider kenne ich mich mit YAML noch nicht genug aus, um diese Verknüpfungen irgendwie hin zu bekommen. Ich könnte es in C, Pascal oder S7 schreiben, aber leider führt das ja zu nichts.

Könnte mir vielleicht jemand erklären, wie ich es anstellen kann daß die Heizung eingeschaltet bleibt, wenn eine der beiden Bedingungen (Regen und kälter als 4°C) erfüllt ist?

Danke fürs Lesen,

Frank

Habe deinen Beitrag mal in die KI 1:1 eingegeben.
Hier die Antwort:

Ich verstehe Ihr Anliegen. Sie möchten die Heizung des Regensensors so steuern, dass sie eingeschaltet bleibt, wenn entweder Regen erkannt wird ODER die Temperatur unter 4°C fällt. Hier ist ein Vorschlag, wie Sie das in ESPHome umsetzen können:

  1. Zunächst definieren wir einen Template-Switch für die Heizung:
switch:
  - platform: template
    name: "Regensensor Heizung"
    id: ws_heater
    turn_on_action:
      - output.turn_on: heater_output
    turn_off_action:
      - output.turn_off: heater_output

output:
  - platform: gpio
    pin: GPIO_NUMMER_DER_HEIZUNG
    id: heater_output
  1. Dann erstellen wir einen Template-Binary-Sensor, der den kombinierten Zustand von Regen und Temperatur repräsentiert:
binary_sensor:
  - platform: template
    name: "Heizung Aktivierungsbedingung"
    id: heater_condition
    lambda: |-
      return id(ws_raining).state || id(ws_temp).state < 4.0;
  1. Nun passen wir Ihre bestehenden Sensoren an:
binary_sensor:
  - platform: gpio
    name: "Regen"
    device_class: moisture
    icon: mdi:moisture
    pin:
      number: 14
      inverted: True
      mode: 
        input: True
        pullup: True
    id: ws_raining
    filters:
      - delayed_on: 1000ms
      - delayed_off: 1000ms
    on_state:
      then:
        - binary_sensor.template.publish:
            id: heater_condition
            state: !lambda 'return id(ws_raining).state || id(ws_temp).state < 4.0;'

sensor:
  - platform: bme280_i2c
    address: 0x76    
    temperature:
      name: "Aussentemperatur"
      id: ws_temp
      on_value:
        then:
          - binary_sensor.template.publish:
              id: heater_condition
              state: !lambda 'return id(ws_raining).state || id(ws_temp).state < 4.0;'
  1. Schließlich fügen wir eine Automatisierung hinzu, die auf Änderungen des Template-Binary-Sensors reagiert:
automation:
  - trigger:
      platform: state
      entity_id: binary_sensor.heater_condition
    then:
      - if:
          condition:
            binary_sensor.is_on: heater_condition
          then:
            - switch.turn_on: ws_heater
          else:
            - switch.turn_off: ws_heater

Diese Konfiguration funktioniert folgendermaßen:

  1. Der Template-Binary-Sensor heater_condition kombiniert die Bedingungen für Regen und Temperatur.
  2. Wenn sich der Zustand des Regensensors oder die Temperatur ändert, wird der Zustand von heater_condition neu berechnet.
  3. Die Automatisierung reagiert auf Änderungen von heater_condition und schaltet die Heizung entsprechend ein oder aus.

Dadurch bleibt die Heizung eingeschaltet, solange es entweder regnet ODER die Temperatur unter 4°C liegt. Sie schaltet sich erst aus, wenn beide Bedingungen nicht mehr erfüllt sind[1][2][5].

Beachten Sie, dass Sie die GPIO_NUMMER_DER_HEIZUNG durch die tatsächliche GPIO-Nummer ersetzen müssen, an die Ihre Heizung angeschlossen ist.

Diese Lösung nutzt die Flexibilität von ESPHome, um komplexere Logik zu implementieren, ohne direkt C++ Code schreiben zu müssen[3][4]. Sie können diese Konfiguration nach Bedarf anpassen und erweitern.

Quellen
[1] ESPHome conditonal config parts (yaml templating engine) ESPHome conditonal config parts (yaml templating engine) - ESPHome - Home Assistant Community
[2] Add conditional processing to the YAML file · Issue #2473 - GitHub Add conditional processing to the YAML file · Issue #2473 · esphome/feature-requests · GitHub
[3] Configuration Types — ESPHome Configuration Types — ESPHome
[4] Condition in yaml file - ESPHome - Home Assistant Community Condition in yaml file - ESPHome - Home Assistant Community
[5] Actions, Triggers, Conditions - ESPHome Actions, Triggers, Conditions — ESPHome
[6] Adding some programmability capabilities to yaml configs · Issue #805 Adding some programmability capabilities to yaml configs · Issue #805 · esphome/feature-requests · GitHub
[7] ESPHome Core Configuration ESPHome Core Configuration — ESPHome
[8] Frequently Asked Questions — ESPHome Frequently Asked Questions — ESPHome