mirror of
https://github.com/esphome/esphome.git
synced 2025-09-01 19:02:18 +01:00
86 lines
2.5 KiB
YAML
86 lines
2.5 KiB
YAML
esphome:
|
|
name: loop-test
|
|
|
|
host:
|
|
api:
|
|
logger:
|
|
level: DEBUG
|
|
|
|
external_components:
|
|
- source:
|
|
type: local
|
|
path: EXTERNAL_COMPONENT_PATH
|
|
|
|
loop_test_component:
|
|
components:
|
|
# Component that disables itself after 10 loops
|
|
- id: self_disable_10
|
|
name: "self_disable_10"
|
|
disable_after: 10
|
|
|
|
# Component that never disables itself (for re-enable test)
|
|
- id: normal_component
|
|
name: "normal_component"
|
|
disable_after: 0
|
|
|
|
# Component that tests enable when already enabled
|
|
- id: redundant_enable
|
|
name: "redundant_enable"
|
|
test_redundant_operations: true
|
|
disable_after: 0
|
|
|
|
# Component that tests disable when already disabled
|
|
- id: redundant_disable
|
|
name: "redundant_disable"
|
|
test_redundant_operations: true
|
|
disable_after: 10
|
|
|
|
# ISR test component that uses enable_loop_soon_any_context
|
|
isr_components:
|
|
- id: isr_test
|
|
name: "isr_test"
|
|
|
|
# Update test component to test component.update when loop is disabled
|
|
update_components:
|
|
- id: update_test_component
|
|
name: "update_test"
|
|
disable_loop_after: 3 # Disable loop after 3 iterations
|
|
update_interval: 0.1s # Fast update interval for testing
|
|
|
|
# Interval to re-enable the self_disable_10 component after some time
|
|
interval:
|
|
- interval: 0.5s
|
|
then:
|
|
- if:
|
|
condition:
|
|
lambda: 'return id(self_disable_10).get_loop_count() == 10;'
|
|
then:
|
|
- logger.log: "Re-enabling self_disable_10 via service"
|
|
- loop_test_component.enable:
|
|
id: self_disable_10
|
|
|
|
# Test component.update on a component with disabled loop
|
|
- interval: 0.1s
|
|
then:
|
|
- lambda: |-
|
|
static bool manual_update_done = false;
|
|
if (!manual_update_done &&
|
|
id(update_test_component).get_loop_count() == 3 &&
|
|
id(update_test_component).get_update_count() >= 3) {
|
|
ESP_LOGI("main", "Manually calling component.update on update_test_component with disabled loop");
|
|
manual_update_done = true;
|
|
}
|
|
- if:
|
|
condition:
|
|
lambda: |-
|
|
static bool manual_update_triggered = false;
|
|
if (!manual_update_triggered &&
|
|
id(update_test_component).get_loop_count() == 3 &&
|
|
id(update_test_component).get_update_count() >= 3) {
|
|
manual_update_triggered = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
then:
|
|
- component.update: update_test_component
|