Seite 1 von 1
Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Sa 18. Jun 2022, 00:08
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Sa 18. Jun 2022, 07:40
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.
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Sa 18. Jun 2022, 15:51
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Sa 18. Jun 2022, 16:04
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Sa 18. Jun 2022, 17:38
von Andreas
@Osorkon
Gerade entdeckt
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: So 19. Nov 2023, 12:50
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: {}
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: So 19. Nov 2023, 15:54
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: So 19. Nov 2023, 17:09
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: So 19. Nov 2023, 19:07
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?
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Mi 21. Feb 2024, 13:10
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Mi 21. Feb 2024, 23:43
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Di 12. Mär 2024, 16:24
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
Re: Wiederholungen- Aktion solange ausführen bis gewünschter Zustand erreicht ist
Verfasst: Mi 13. Mär 2024, 23:54
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