Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Hier könnt Ihr gerne Eure Automatisierungen reinstellen, die Ihr gerne mit allen Teilen wollt. Einen kurze Beschreibung sowie ein Aussagekräftiger Titel sind erwünscht.


Antworten
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Osorkon »

Bei kritischen Anwendungen oder einfach wenn man sicherstellen will, dass ein gewünschter Zustand erreicht wird, bietet sich eine wiederholte Aktion an.
Funksignale können mal verschluckt werden, sollte nicht passieren kann aber. Da kann es nicht schaden, wenn man sich wiederholt aber auch nur dann,
wenn der gewünschte Zustand nicht erreicht ist. 😉

Hier mal ein Wasserventil, das sich nach 30 min ausschalten soll.

Die Aktionen switch.turn_off und eine Verzögerung von 10s, werden solange wiederholt bis der Zustand des Switches = off ist

Code: Alles auswählen

alias: Wasser Garten abschalten - Auf Nummer Sicher gehen
description: ''
mode: single
trigger:
  - platform: state
    entity_id:
      - switch.wasser_garten
    from: 'off'
    to: 'on'
    for:
      hours: 0
      minutes: 30
      seconds: 0
condition: []
action:
  - repeat:
      while:
        - condition: state
          entity_id: switch.wasser_garten
          state: 'on'
      sequence:
        - service: switch.turn_off
          data: {}
          target:
            entity_id: switch.wasser_garten
        - delay:
            hours: 0
            minutes: 0
            seconds: 10
            milliseconds: 0
Der Nachteil könnte sein, dass aus welchem Grund auch immer die Schleife endlos läuft. Weil der doofe Switch einfach nicht ausgehen will! 😂

Mann kann die Anzahl der Wiederholungen auch begrenzen, z.b. auf 10

Dabei wird zuerst die Bedingung geprüft ob der Switch = on ist, wenn erfüllt wird der Switch ausgeschaltet und es folgt eine 10s Verzögerung.
Wird der Switch bereits beim ersten Versuch erfolgreich ausgeschaltet, ist ab der 2ten Wiederholung die Bedingungen nicht mehr erfüllt und die Folge Aktionen werden nicht mehr ausgeführt.
Die Schleife wird zwar immer noch 10 mal wiederholt, aber eben nur die Prüfung der Bedingung was nach ein paar ms erledigt ist.

Code: Alles auswählen

alias: Wasser Garten abschalten - Auf Nummer Sicher gehen mit Bedacht
description: ''
trigger:
  - platform: state
    entity_id:
      - switch.wasser_garten
    from: 'off'
    to: 'on'
    for:
      hours: 0
      minutes: 30
      seconds: 0
condition: []
action:
  - repeat:
      count: '10'
      sequence:
        - condition: state
          entity_id: switch.wasser_garten
          state: 'on'
        - service: switch.turn_off
          data: {}
          target:
            entity_id: switch.wasser_garten
        - delay:
            hours: 0
            minutes: 0
            seconds: 10
            milliseconds: 0
mode: single
Gruß
Osorkon
Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Undertaker
Beiträge: 211
Registriert: Di 26. Apr 2022, 09:21
1
Wohnort: Karlsruhe
Has thanked: 55 times
Been thanked: 32 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Undertaker »

Sehr gut,
ich lass damit meine Lichter prüfen, ob alles ausgeschaltet wurde. Insbesondere die uralt Osram Surface, haben manchmal einen Hänger.
"Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig."
Albert Einstein
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Andreas »

@Osorkon
Ich steuere zum Beispiel meine Magnetventile mit einer Relaiskarte, die mit einem D1 mini, der mit Tasmote geflashte ist, an. Diesen kann ich doch auch mit MQTT betreiben (ich weiß nicht, wie ich es anders ausdrücken soll). Nun habe ich in Erinnerung, dass es bei MQTT das QOS (0,1 und 2 oder so). Eines davon ist doch mit 'Rückmeldung', wo er der Befehl so lange an das Gerät gesendet wird, bis es ein o.K. gibt. Könnte man dies dann nicht nutzen um bestätigt zu bekommen, dass der Schalter oder das Relais wirklich aus sind? Oder gehe ich da einem falschen Verständnis nach?
Gruß, Andreas
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Osorkon »

@Andreas habe mit MQTT überhaupt nichts am Hut. 🎩 🤷‍♂️ Sorry
Und QOS sagt mir soviel wie UHJKKLW 🤪

Wenn Du zum Thema MQTT und QOS fragen hast, mach bitte ein neues Thema auf.
Seit heute gibt es auch die MQTT Kategorie. 😀

Gruß
Osorkon
Einer muss ja für Ordnung sorgen. :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Andreas »

@Osorkon
Gerade entdeckt :lol:
Hamudulu
Beiträge: 93
Registriert: So 9. Jan 2022, 22:42
2
Has thanked: 6 times
Been thanked: 10 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Hamudulu »

Hallo
Ich versuche da was ähnliches und hab das mal nachgebaut. Ich will meine Batterie aus dem Netzladen und ein Teil der Automation sieht sowas vor das die Aktion (Script) mehrmals ausgeführt wird bis ein Zustand erreicht wurde oder eben nicht mehr wenn der Preis zu hoch ist und das maximal 3mal. Klappt das so?

Code: Alles auswählen

    sequence:
      - repeat:
          count: 3
          sequence:
            - condition: numeric_state
              entity_id: sensor.electricity_price_zuhause
              below: 0.16
            - service: script.1698829378410
              data: {}
            - delay:
                hours: 0
                minutes: 29
                seconds: 0
                milliseconds: 0
      - service: script.1698828666891
        data: {}
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Osorkon »

Verstehe die Aufgabenstellung nicht ganz?!

Was ist den der Trigger der Automatisierung?

Nach dem die Automatisierung ausgelöst wurde, wird geprüft ob Preis unter 0,16 ist.
Wenn ja, wird das Skript ausgeführt und verzögert um 29min wird das script nochmal ausgeführt, wenn sich der Preis immer noch unter 0,16 befindet.
Das ganze bis zu 3 mal.

Also hängt die Automatisierung bis zu 1,5h in der Schleife.

Ist die Bedingung Preis < 0,16 nicht erfüllt, wird das zweite Skript ausgeführt.
Also entweder sofort, oder nach 29min oder 58min aber spätestens nach 87min wird das zweite Script ausgeführt.

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Hamudulu
Beiträge: 93
Registriert: So 9. Jan 2022, 22:42
2
Has thanked: 6 times
Been thanked: 10 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Hamudulu »

Ja, das passt so. Ich regele per Modbus (in den scripts) die Ladung meines Speichers mit Netzstrom. Nach 30 Minuten geht der WR wieder in den Normalmodus. Das will ich verhindern und so schiess ich nach 29min nochmal ein Befehl an den WR. Außer der Strompreis ist inzwischen teuerer wie 16cent, oder die Batterie ist annähernd voll , also höher wie 90%
Passt da eigentlich mein Modus? Weil ja neu getriggert wird , auch wenn der noch in der Schleife hängt...
Hier mal der komplette Code, ist alles noch im Betastadium, aber so ungefähr funktioniert es ;-)

Code: Alles auswählen

alias: Batterie Ladesteuerung Tibber
description: Automatisches Laden
trigger:
  - platform: numeric_state
    entity_id: sensor.epex_spot_data_rank
    for:
      hours: 0
      minutes: 0
      seconds: 30
    below: 2.5
    id: "7400"
  - platform: numeric_state
    entity_id:
      - sensor.battery_soc_total
    for:
      hours: 0
      minutes: 0
      seconds: 5
    above: 90
    id: soc 90
condition: []
action:
  - choose:
      - conditions:
          - condition: and
            conditions:
              - condition: trigger
                id: "7400"
              - condition: or
                conditions:
                  - condition: numeric_state
                    entity_id: sensor.energy_forecast_gesamt_heute
                    below: 12
                  - condition: numeric_state
                    entity_id: sensor.energy_forecast_gesamt_morgen
                    below: 12
                    enabled: true
                enabled: true
              - condition: numeric_state
                entity_id: sensor.battery_soc_total
                below: 50
              - condition: numeric_state
                entity_id: sensor.electricity_price_zuhause
                below: 0.18
              - condition: numeric_state
                entity_id: sensor.wallbox_power
                below: 3000
        sequence:
          - repeat:
              count: 3
              sequence:
                - condition: numeric_state
                  entity_id: sensor.electricity_price_zuhause
                  below: 0.16
                - service: script.1698829378410
                  data: {}
                - delay:
                    hours: 0
                    minutes: 29
                    seconds: 0
                    milliseconds: 0
          - service: script.1698828666891
            data: {}
      - conditions:
          - condition: and
            conditions:
              - condition: trigger
                id:
                  - soc 90
              - condition: numeric_state
                entity_id: sensor.pv_leistung_gesamt
                below: 1
        sequence:
          - service: script.1698828666891
            data: {}
          - service: notify.mobile_app_christian
            data:
              title: "Batterie:"
              message: Laden normal!
    default: []
mode: restart
Hamudulu
Beiträge: 93
Registriert: So 9. Jan 2022, 22:42
2
Has thanked: 6 times
Been thanked: 10 times

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Hamudulu »

Hier noch eine verbesserte Wiederhol-Sequenz:

Code: Alles auswählen

repeat:
  sequence:
    - service: script.1698829378410
      data: {}
    - delay:
        hours: 0
        minutes: 29
        seconds: 0
        milliseconds: 0
  until:
    - condition: or
      conditions:
        - condition: numeric_state
          entity_id: sensor.battery_soc_total
          above: 90
        - condition: numeric_state
          entity_id: sensor.electricity_price_zuhause
          above: 0.16

Das sollte so auch gehen, oder?

Frank-Ahrens
Beiträge: 15
Registriert: Fr 24. Mär 2023, 14:04
1
Has thanked: 1 time

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Frank-Ahrens »

Hallo,
ich suche auch eine Möglichkeit, mittels einer Automation eine andere Automation zu triggern.
Bei mir betrifft das die Steuerung von Heizkörper-Thermostaten.
Meine Heizungsautomation läuft basierend auf einem Zeitplan und stellt, zu bestimmten Uhrzeiten, an bestimmten Tagen (unter Berücksichtigung eines externen Temperaturfühler) den Heizungsvorgang ein oder aus..
Die Aktionen für das Regeln des Thermostats werden somit durch die Automation ausgelöst.
Soweit so gut.
Jetzt möchte ich aber auch manuelle Steuerungen am Thermostat zulassen. Die manuellen Änderungen funktionieren auch, aber die Regel-Automation greift ja erst wieder wenn einer ihrer Auslöser in Aktion tritt. Das bedeutet wenn die Automation zB zwischen 09:00Uhr und 12:00Uhr auf die Absenktemperatur gestellt wird wird die Automation erst wieder um 12:00Uhr aktiv. Stelle ich aber manuell zB um 10:00Uhr das Ventil auf eine höhere Temperatur bleibt diese bis 12:00 Uhr aktiv, weil der nächste Auslöser der Aktion erst wieder um 12:00Uhr aktiv ist.
Ich möchte jetzt eine "Schleifen-Automation" vorschalten die regelmäßg die in einem bestimmten Zyklus überprüft, ob der, am Ventil eingestellt Wert, mit dem Zielwert meiner Automatisierung übereinstimmt, und wenn das nicht der Fall ist die Heizungsautomatisierung wieder "antriggert". So könnte ich die manuelle, am Ventil vorgenommene, Änderung zb alle halbe Stunde überprüfen und auf die Werte der automatischen Steuerung "zurücksetzen". Leider habe ich keine Ahnung wie ich soetwas sauber umsetzen kann.
Hat jemand eine Idee wie man so etwas baut und vielleicht auch einen passenden YAML-Code für mich?

Danke im Voraus
Gruß Frank

Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Osorkon »

Hallo @Frank-Ahrens, das ist sehr abhängig von Deiner aktuellen Lösung.
Vielleicht kannst Du mal eine Deiner Automatisierungen posten, dass ich mir vorstellen kann, wie Du das aktuell umgesetzt hast.

Einen Möglichkeit wäre zu prüfen, Ober das Heizungsthermostat über ein Automatisierung, über die GUI oder am Gerät selbst verstellt wurde.
Und wenn die Änderung nicht per Automatisierung erfolgte, die Automatisierung nochmals triggern.

Ich würde vorschlagen, Du erstellst eine einen Thread dazu.

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Frank-Ahrens
Beiträge: 15
Registriert: Fr 24. Mär 2023, 14:04
1
Has thanked: 1 time

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Frank-Ahrens »

Sorry für die späte Antwort, war leider auf Dienstreise. Hie sind zwei der Automatisierung

Code: Alles auswählen

alias: Heizung an - ab 09:00 (Mo-Fr) 19°C
description: Heizung an - ab 09:00 (Mo-Fr) 19°C
trigger:
  - platform: time
    at: "09:00:00"
condition:
  - condition: state
    entity_id: binary_sensor.arbeitstage_woche
    state: "on"
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.heizung_stube_thermostat
    data:
      temperature: 19
      hvac_mode: heat
mode: single

Code: Alles auswählen

alias: Heizung an - ab 12:00 (Mo-Fr) 20°C
description: Heizung an - ab 12:00 (Mo-Fr) 20°C
trigger:
  - platform: time
    at: "12:00:00"
condition:
  - condition: state
    entity_id: binary_sensor.arbeitstage_woche
    state: "on"
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.heizung_stube_thermostat
    data:
      temperature: 20
      hvac_mode: heat
mode: single
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist

Beitrag von Osorkon »

@Frank-Ahrens ich habe hier mal beschrieben, wie mann unterscheiden kann ob ein Geräte per Automatisierung, Physisch oder über die GUI bedient wurde.

Du kannst Dir einen Timer erstellen "Heizung Stube Thermostat manuell" und diese dann starten wenn die Soll-Temperatur nicht über einen Automatisierung verändert wurde. Als Bsp. 1h

Bsp:

Code: Alles auswählen

alias: Manueller eingriff Heizung  Stube
description: ""
trigger:
  - platform: state
    entity_id:
      - climate.heizung_stube_thermostat
    attribute: temperature
    variables:
      id: "{{trigger.to_state.context.id}}"
      parent: "{{ trigger.to_state.context.parent_id }}"
      user: "{{ trigger.to_state.context.user_id }}"
      ident: "{{ (id != None, parent != None, user != None) }}"
condition:
  - condition: or
    conditions:
      - condition: template
        value_template: "{{ ident == (true, false, false) }}"
      - condition: template
        value_template: "{{ ident == (true, false, true) }}"
action:
  - service: timer.start
    metadata: {}
    data:
      duration: "01:00"
    target:
      entity_id: timer.heizung_stube_thermostat_manuell
mode: single

Den Ablauf des Timers kannst Du dann als zusätzlichen Trigger in Deinen Automatisierungen verwenden.
Als Zusätzliche Bedingung musst Du dann noch die Uhrzeit hinzufügen.
Also Zwischen 9 und 12 Uhr bzw. nach 12 Uhr

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Antworten