mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 08:41:59 +00:00
Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@koston.org> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@home-assistant.io>
131 lines
3.8 KiB
YAML
131 lines
3.8 KiB
YAML
esphome:
|
|
name: test-automation-wait-actions
|
|
|
|
host:
|
|
|
|
api:
|
|
actions:
|
|
# Test 1: Trigger wait_until automation 5 times rapidly
|
|
- action: test_wait_until
|
|
then:
|
|
- logger.log: "=== TEST 1: Triggering wait_until automation 5 times ==="
|
|
# Publish 5 different values to trigger the on_value automation 5 times
|
|
- sensor.template.publish:
|
|
id: wait_until_sensor
|
|
state: 1
|
|
- sensor.template.publish:
|
|
id: wait_until_sensor
|
|
state: 2
|
|
- sensor.template.publish:
|
|
id: wait_until_sensor
|
|
state: 3
|
|
- sensor.template.publish:
|
|
id: wait_until_sensor
|
|
state: 4
|
|
- sensor.template.publish:
|
|
id: wait_until_sensor
|
|
state: 5
|
|
# Wait then satisfy the condition so all 5 waiting actions complete
|
|
- delay: 100ms
|
|
- globals.set:
|
|
id: test_flag
|
|
value: 'true'
|
|
|
|
# Test 2: Trigger script.wait automation 5 times rapidly
|
|
- action: test_script_wait
|
|
then:
|
|
- logger.log: "=== TEST 2: Triggering script.wait automation 5 times ==="
|
|
# Start a long-running script
|
|
- script.execute: blocking_script
|
|
# Publish 5 different values to trigger the on_value automation 5 times
|
|
- sensor.template.publish:
|
|
id: script_wait_sensor
|
|
state: 1
|
|
- sensor.template.publish:
|
|
id: script_wait_sensor
|
|
state: 2
|
|
- sensor.template.publish:
|
|
id: script_wait_sensor
|
|
state: 3
|
|
- sensor.template.publish:
|
|
id: script_wait_sensor
|
|
state: 4
|
|
- sensor.template.publish:
|
|
id: script_wait_sensor
|
|
state: 5
|
|
|
|
# Test 3: Trigger wait_until timeout automation 5 times rapidly
|
|
- action: test_wait_timeout
|
|
then:
|
|
- logger.log: "=== TEST 3: Triggering timeout automation 5 times ==="
|
|
# Publish 5 different values (condition will never be true, all will timeout)
|
|
- sensor.template.publish:
|
|
id: timeout_sensor
|
|
state: 1
|
|
- sensor.template.publish:
|
|
id: timeout_sensor
|
|
state: 2
|
|
- sensor.template.publish:
|
|
id: timeout_sensor
|
|
state: 3
|
|
- sensor.template.publish:
|
|
id: timeout_sensor
|
|
state: 4
|
|
- sensor.template.publish:
|
|
id: timeout_sensor
|
|
state: 5
|
|
|
|
logger:
|
|
level: DEBUG
|
|
|
|
globals:
|
|
- id: test_flag
|
|
type: bool
|
|
restore_value: false
|
|
initial_value: 'false'
|
|
|
|
- id: timeout_flag
|
|
type: bool
|
|
restore_value: false
|
|
initial_value: 'false'
|
|
|
|
# Sensors with wait_until/script.wait in their on_value automations
|
|
sensor:
|
|
# Test 1: on_value automation with wait_until
|
|
- platform: template
|
|
id: wait_until_sensor
|
|
on_value:
|
|
# This wait_until will be hit 5 times before any complete
|
|
- wait_until:
|
|
condition:
|
|
lambda: return id(test_flag);
|
|
- logger.log: "wait_until automation completed"
|
|
|
|
# Test 2: on_value automation with script.wait
|
|
- platform: template
|
|
id: script_wait_sensor
|
|
on_value:
|
|
# This script.wait will be hit 5 times before any complete
|
|
- script.wait: blocking_script
|
|
- logger.log: "script.wait automation completed"
|
|
|
|
# Test 3: on_value automation with wait_until timeout
|
|
- platform: template
|
|
id: timeout_sensor
|
|
on_value:
|
|
# This wait_until will be hit 5 times, all will timeout
|
|
- wait_until:
|
|
condition:
|
|
lambda: return id(timeout_flag);
|
|
timeout: 200ms
|
|
- logger.log: "timeout automation completed"
|
|
|
|
script:
|
|
# Blocking script for script.wait test
|
|
- id: blocking_script
|
|
mode: single
|
|
then:
|
|
- logger.log: "Blocking script: START"
|
|
- delay: 200ms
|
|
- logger.log: "Blocking script: END"
|