Hilfe bei einer Automatisation - Pool-Pumpe mit Bedingung und Zeitvorgaben

easyacid

New member
Moin liebe Community.

Schön, dass es solche Foren gibt. Und ich hoffe, Ihr könnt mir helfen.

Folgendes Problem:

Pool mit einer Poolpumpe - die Pumpe wird über KNX ein und ausgeschaltet.
Vorhanden sind:
Temperaturmessgerät T1
Uhrzeit
Schalter S1 für die Pumpe

Der geplante Ablaufplan

Wenn Temperatur < 26°C
dann schalte Pumpe alle 4h für 30 min ein.

Wenn Temperatur > 26°C
und Uhrzeit zwischen 6 Uhr und 21 Uhr
dann schalte Pumpe alle 1h für 20 min ein.
Wenn Uhrzeit zwischen 21 und 6 Uhr
dann schalte Pumpe alle 3h für 20min ein.

Ich würde mich freuen, wenn Ihr zu diesem Problem eine einfache Lösung habt.

Danke im Voraus.
 
Da hat es doch erst vor wenigen Tagen einen Beitrag gegeben, der ähnliches vorhat, halt nur mit einem Kühlschrank.
Schau hier
Ich denke, da kannst Du dir aber schon so ziemlich alles abschauen, was Du vor hast.
 
Hi,

danke für Deinen Hinweis.
Leider wird der Kühlschrank über die Schwellwerte der PV Erzeugung ein bzw. ausgeschaltet. Bei mir ist der Temperaturschwellenwert die Bedingung, dass anschließend ein Zeitablauf erfolgen soll.
Die Temperatur gibt bei mir vor, in welchen Intervallen die Pumpe gesteuert werden soll.
 
Ähm, den Sensor zum messen, was die PV liefert gegen den Sensor tauschen, der bei Dir die Temperatur misst, das solltest Du schon hin bekommen.
Geh doch mal auf Einstellungen -> Automatisierung & Szene und rechts unten auf "Automatisierung erstellen.
Dann "Neue Automatisierung erstellen" auswählen. Dann siehst Du eigentlich schon alles, was Du brauchst.
Auslöser ist bei Dir der Temperatursensor.
Bedingung ist die Zeit.
Aktion ist dein Pumpenschalter.
Wie die einzelnen Entitäten heißen, das mußt Du selber schauen, das sehen wir nicht.
 
Ich glaube, ich habe zu kompliziert gedacht und wollte alles in eine Automatisierung. Es sind nun drei geworden.
Wollt Ihr mal reinschauen? Ein Timer wäre mir übrigens lieber gewesen.

YAML:
alias: Poolpumpe <26°
description: 30min alle 4h wenn unter 26°C
trigger:
  - platform: numeric_state
    entity_id: sensor.aussentemperatur01_temperature
    for:
      hours: 0
      minutes: 10
      seconds: 0
    attribute: temperature
    below: 26
condition:
  - condition: state
    entity_id: input_boolean.pool_vorhanden
    state: "on"
    for:
      hours: 0
      minutes: 10
      seconds: 0
action:
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 0
      minutes: 30
      seconds: 0
      milliseconds: 0
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 4
      minutes: 0
      seconds: 0
      milliseconds: 0
mode: single


alias: Poolpumpe > 26° Nachts
description: 20min alle 3h wenn über 26°C Nachts
trigger:
  - platform: numeric_state
    entity_id: sensor.aussentemperatur01_temperature
    for:
      hours: 0
      minutes: 10
      seconds: 0
    attribute: temperature
    above: 26
condition:
  - condition: state
    entity_id: input_boolean.pool_vorhanden
    state: "on"
    for:
      hours: 0
      minutes: 10
      seconds: 0
  - condition: time
    after: "21:00:00"
    before: "06:00:00"
action:
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 0
      minutes: 20
      seconds: 0
      milliseconds: 0
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 3
      minutes: 0
      seconds: 0
      milliseconds: 0
mode: single


alias: Poolpumpe >26°  und Tags
description: 20min alle 1h wenn über 26°C Tags
trigger:
  - platform: numeric_state
    entity_id: sensor.aussentemperatur01_temperature
    for:
      hours: 0
      minutes: 10
      seconds: 0
    attribute: temperature
    above: 26
condition:
  - condition: state
    entity_id: input_boolean.pool_vorhanden
    state: "on"
    for:
      hours: 0
      minutes: 10
      seconds: 0
  - condition: time
    after: "06:00:00"
    before: "21:00:00"
action:
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 0
      minutes: 20
      seconds: 0
      milliseconds: 0
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - delay:
      hours: 1
      minutes: 0
      seconds: 0
      milliseconds: 0
mode: single
 
Zuletzt bearbeitet von einem Moderator:
Beim einfügen von CODE bitte immer hier drüber auf </> klicken und dort den Code einfügen, sonst wird der schwer lesbar und mögliche Fehler kann man nicht erkennen.
Ich denke auch, das der Auslöser doch nicht die Temperatur, sondern ein Timer sein muß. Du willst die Pumpe ja nur alle 4:30 für eine gewisse Zeit einschalten.
Also wenn 4:30 um sind, dann BEDINGUNG Temperatur prüfen.
Ist die über 26 Grad, dann......
Ist die unter 26 Grad, dann....
Selbst bei Aktionen kannst Du ja eine "wenn...dann..." Bedingung aufbauen.
Bedenke immer, wie schon an anderer stelle gesagt wurde, der AUSLÖSER bestimmt, wann die Routine ausgeführt wird. Also in deinem Beispiel immer nur dann, wenn die Temperatur sich ändert, aber nicht, wenn sie gleich geblieben ist und die 4:30 vorbei sind.
 
Die Temperatur als Auslöser ist der verkehrte Ansatz.

Ich würde folgendes vorschlagen:

Ausführung jede Stunde zu Minute 1

Aktionen:
Auswahl 1
Bedingungen:
Temp<26
Letzte Ausführung > 3h59min
Aktionen:
Schalte Pumpe ein
Starte Timer Pumpe mit 30min

Auswahl 2
Bedingungen:
Temp>26
Uhrzeit zwischen 6 und 21 Uhr
Letzte Ausführung > 59min
Aktionen:
Schalte Pumpe ein
Starte Timer Pumpe mit 20min

Auswahl 3
Bedingungen:
Temp>26
Uhrzeit zwischen 21 und 6 Uhr
Letzte Ausführung > 2h 59min
Aktionen:
Schalte Pumpe ein
Starte Timer Pumpe mit 20min

Dann eine zweite Automatisierung
Wenn Timer Pumpe inaktiv
Dann Pumpe ausschalten.

Jede Stunde wird die Temperatur geprüft, liegt diese unter 26. wird geprüft ob die letze Ausführung der Automatisierung länger als 3h 59min her ist. Ergebnis, die Pumpe wird alle 4 h eingeschaltet.

Liegt die Temperatur über 26 und es ist zwischen 6 und 21 Uhr wird geprüft ob die letze Ausführung länger al 59min her ist. Ergebnis, Pumpe wird jede Stunde eingeschaltet

Liegt die temp über 26 und es ist zwichen 21 und 6 Uhr wird geprüft ob die letzte Ausführung länger als 2 h 59min her ist. Ergebnis, Pumpe wird alle 3 h eingeschaltet.

Wenn, das Deine Anforderungen erfüllt, kann ich heute Abend gerne die Automatisierung als yaml bereitstellen, oder es kommt mir ein anderer zuvor. 😀
 
Falls nicht schon bereits festgestellt.
Die Bedingung-> Letze Ausführung der Automatisierung länger als x Stunden her,
dafür musst Du eine Template Bedingung verwenden.
 
Mh, das mit dem Bedingungstemplate, ich bin ehrlich - templates im allgemeinen- ist mir zu hoch.
Passt der Rest für Auswahl 1? Ich bin mir bei dem Auslöser echt unsicher.


Code:
alias: Poolpumpe < 26C
description: 30min alle 4h
trigger:
  - platform: time_pattern
    hours: "1"
    minutes: "1"
condition:
  - condition: numeric_state
    entity_id: sensor.aussentemperatur01_temperature
    attribute: temperature
    below: 26
  - condition: state
    entity_id: input_boolean.pool_vorhanden
    state: "on"
action:
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
  - service: timer.start
    data:
      duration: "30"
    target:
      entity_id: timer.pooltimer
mode: single
 
Das war einfach:


Code:
description: ""
mode: single
trigger:
  - platform: state
    entity_id:
      - timer.pooltimer
    to: idle
condition: []
action:
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.steckdose_garten_kanal_1_pool
alias: Poolpumpe deaktivieren nach Pooltimer
 
Jede Stunde zu Minute 1

YAML:
trigger:
  - platform: time_pattern
    minutes: 1

Template Bedingung (jetzt - letze Ausführung der Automatisierung > 3h 59min) Diese Bedingung trifft nur jede 4te Stunde zu.
YAML:
{{ now() - (this.attributes.last_triggered | default((now() - timedelta(hours = 4 )), true)) > timedelta(hours=3, minutes = 59) }}
Mit this.attributes.last_triggered verweist das template auf die Automatisierung, wessen Teil es ist. Also im Prinzip auf sich selbst.

Wird eine Automatisierung neu angelegt, gibt es noch keinen Wert für die letze Ausführung. in diesem Fall würde das Template einen Fehler aufwerfen.
Es muss also ein Standard Wert definiert werden. Dieser muss so gewählt werden, dass die Bedingung erfüllt wird. Der Standart Wert lautet in diesem Fall 4h

YAML:
default((now() - timedelta(hours = 4 ))

Template Bedingung (jetzt - letze Ausführung der Automatisierung > 59min) Diese Bedingung trifft zur jeder Stunde zu.

Template Bedingung (jetzt - letze Ausführung der Automatisierung > 2h 59min) Diese Bedingung trifft nur jede 3te Stunde zu.

Die komplette Automatisierungen sieht dann so aus:

YAML:
alias: Poolpumpe
description: ""
trigger:
  - platform: time_pattern
    minutes: 1
condition: []
action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.aussentemperatur01_temperature
            below: 26
          - condition: template
            value_template: >-
              {{ now() - (this.attributes.last_triggered | default((now() -
              timedelta(hours = 4 )), true)) > timedelta(hours=3, minutes = 59)
              }}
        sequence:
          - service: light.turn_on
            data: {}
            target:
              entity_id: light.steckdose_garten_kanal_1_pool
          - service: timer.start
            data:
              duration: "00:30:00"
            target:
              entity_id: timer.pooltimer
      - conditions:
          - condition: numeric_state
            entity_id: sensor.aussentemperatur01_temperature
            above: 26
          - condition: time
            after: "06:00:00"
            before: "21:00:00"
          - condition: template
            value_template: >-
              {{ now() - (this.attributes.last_triggered | default((now() -
              timedelta(hours = 1 )), true)) > timedelta(hours=59) }}
        sequence:
          - service: light.turn_on
            data: {}
            target:
              entity_id: light.steckdose_garten_kanal_1_pool
          - service: timer.start
            data:
              duration: "00:20:00"
            target:
              entity_id: timer.pooltimer
      - conditions:
          - condition: time
            after: "21:00:00"
            before: "06:00:00"
          - condition: numeric_state
            entity_id: sensor.aussentemperatur01_temperature
            above: 26
          - condition: template
            value_template: >-
              {{ now() - (this.attributes.last_triggered | default((now() -
              timedelta(hours = 2 )), true)) > timedelta(hours=2, minutes = 59)
              }}
        sequence:
          - service: light.turn_on
            data: {}
            target:
              entity_id: light.steckdose_garten_kanal_1_pool
          - service: timer.start
            data:
              duration: "00:20:00"
            target:
              entity_id: timer.pooltimer
mode: single

BTW: Warum sprichst Du Deine Steckdose mit der Light Domain an?
 
Hi Osorkon,

Vielen Dank für Deine Unterstützung.
Deine Automatisierung ist so schön schlank und kompakt. Der Wahnsinn wie klar alles wird, wenn man erstmal die Möglichkeiten kennt.
Ich muss zugeben, dass mir Programmierung nicht so liegt. Ich mache es gern aber mir fehlt die Kreativität und das Um die Ecke Denken.

Ich füge jetzt noch die Bedienung Pool ist vorhanden Schalter ein. Wo sollte ich den einfügen? Im Hauptablauf oder in den drei Aktionen?

Die Templateerstellung ist meines Erachtens nicht intuitiv. Das muss man wissen und kann sich auch nicht Laienmässig erlesen werden.

Die Lichtentitäten bei den Steckdosen sind Altlasten aus meinen HA Anfängen vor drei Jahren. Ich habe dort alle Lampen und Steckdosen als Licht importiert.

Ich danke dir schon mal und teste jetzt erstmal.

Ps ich mache das alles hier gerade aus dem Urlaub heraus. Immer wieder faszinierend wie das alles so funktioniert.
 
Ich füge jetzt noch die Bedienung Pool ist vorhanden Schalter ein. Wo sollte ich den einfügen? Im Hauptablauf oder in den drei Aktionen?

Als Globale Bedingung zwischen dem trigger und action Teil.

Die Templateerstellung ist meines Erachtens nicht intuitiv. Das muss man wissen und kann sich auch nicht Laienmässig erlesen werden.

Dokumentation gibt es mehr als genug, ich finde insgesamt die Dokumentation von Home Assistant mehr als vorbildlich.
Aber ja, man muss sich schon in das Thema ein wenig einarbeiten.
Die Kunst liegt aber nicht darin alles zu Wissen, sondern zu Wissen wo man es findet.
Auch ich muss hin und wieder nachschlagen, weil ich nicht alles im Kopf habe. Ausprobieren, Testen, Fehler machen kann auch zielführend sein.
 
Zuletzt bearbeitet:
Hi.
Irgendwas muss falsch laufen. Der hat heut um 9:01 Uhr für 30 min ausgelöst. Dann wurde zwar stündlich die Temp geprüft aber die zweite condition war immer false. Kein Glück seitdem.

Code:
  - condition: template
    value_template: >-
      {{ now() - (this.attributes.last_triggered | default((now() -
      timedelta(hours = 4 )), true)) > timedelta(hours=3, minutes = 59) }}
 
Zeige mal bitte Deine vollständige Automatisierung. Oder hast Du meine Vorlage 1:1 übernommen. In dem Fall muss die Automatisierung funktionieren.

Dann wurde zwar stündlich die Temp geprüft aber die zweite condition war immer false. Kein Glück seitdem.

Code:
- condition: template
  value_template: >-
    {{ now() - (this.attributes.last_triggered | default((now() -
    timedelta(hours = 4 )), true)) > timedelta(hours=3, minutes = 59) }}

Die Bedingung ist ja nur für den 4 Stunden Rhythmus gültig.

Stündlicher Rhytmus
YAML:
- condition: template
  value_template: >-
    {{ now() - (this.attributes.last_triggered | default((now() -
    timedelta(hours = 1 )), true)) > timedelta(hours=59) }}

Und der 3 stündliche Rhytmus
YAML:
- condition: template
  value_template: >-
    {{ now() - (this.attributes.last_triggered | default((now() -
    timedelta(hours = 2 )), true)) > timedelta(hours=2, minutes = 59)
 
Zuletzt bearbeitet:
Ich habe sie übernommen. Selbst kann ich das nicht erstellen. die Bedingung ist aber immer false. Und schau bitte mal in der zweiten Auswahl die Bedingungen. Dort steht hours=59.
Und könnte ich die Bedingungen evtl. mit einer Anpassung der default Zeit optimieren?
Und welcher Wert steht unter now()? Wenn da anstatt 13 Uhr 1 Uhr steht wird das Ergebnis negativ. Ich versteh es nicht so ganz. Erlöst auf jeden Fall nicht aus.
 
@easyacid Nehme alles zurück um behaupte das Gegenteil! 😉😀

Du hast absolut recht! Mir ist da ein fataler Logikfehler unterlaufen!
Neben der Tatsache das es minutes und nicht hours heißen muss! Das war ein Tippfehler.

Kann die Automatisierung wie ich sie oben geteilt habe nicht funktionieren! Bin davon ausgegangen, dass wenn keine der definierten Optionen ausgeführt wird, auch die Automatisierung nicht ausgeführt wird. Was aber nicht der Fall ist, weil im diesen Fall die Standard Auswahl ausgeführt wird, selbst wenn keine Aktionen definiert wurden. Anfängerfehler! 😀

Die Lösung liegt darin, die Bedingungen aus den 3 Optionen im Aktionteil, ebenfalls als globale Bedingungen aufzuführen.

Eine funktionierende Lösung kann ich Dir gerne heute Abend bereitstellen.
Damit wird die Automatisierung, ein wenig komplexer als ich es mir vorgestellt habe.

Eine zweite Möglichkeit wäre, abzufragen wann zuletzt die Pumpe eingeschaltet wurde, anstatt das Ausführen der Automatisierung als Bedingungen zur verwenden.

Gerne kann ich Dir auch diese zur Verfügung stellen.
 
Hi.
Ich habe mir zumindest schon gedacht, dass mich die Ablaufanalyse nicht veräppelt.
Leider weiss ich nicht, wie ich diese Analysen noch detalierter durchführen kann um zum Beispiel zu prüfen, welchen Wert die Variablen haben. Egal.
Ich glaube, eine Abfrage wann die Pumpe das letzte mal aktiv war ist am zielführensten. Damit wird gleichzeitig eine manuelle Bedienung der Pumpe berücksichtigt. Das wäre genial.
Leider alles scripting Themen und für mich nicht so einfach umsetzbar. Oder kannst du mit zeigen, wie ich das auch z.B. im Grafikeditor gelöst bekomme?

Gruß

Ps. Ich habe mich auch mal mit Node Red befasst, soll ja so easy sein. Fand ich nicht, habe aber auch nicht die Geduld mich Wochenlang reinzulesen.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
6.115
Beiträge
59.425
Mitglieder
6.160
Neuestes Mitglied
gonzo12345
Zurück
Oben