mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 12:17:23 +00:00
61 lines
1.7 KiB
YAML
61 lines
1.7 KiB
YAML
esphome:
|
|
name: loop-interval-decouple
|
|
on_boot:
|
|
priority: -100
|
|
then:
|
|
- lambda: |-
|
|
// Raise loop_interval_ to 500ms. With the decoupling fix the
|
|
// component phase should run ~twice per second while the 50ms
|
|
// scheduler interval below still fires at its requested cadence.
|
|
App.set_loop_interval(500);
|
|
# Start measurement after 1s so boot transients settle.
|
|
- delay: 1000ms
|
|
- lambda: |-
|
|
id(loop_at_start) = id(loop_counter)->get_loop_count();
|
|
id(sched_at_start) = id(sched_count);
|
|
ESP_LOGI("test", "MEASUREMENT_STARTED loop=%d sched=%d",
|
|
id(loop_at_start), id(sched_at_start));
|
|
# Observe for 2s.
|
|
- delay: 2000ms
|
|
- lambda: |-
|
|
int loop_delta = id(loop_counter)->get_loop_count() - id(loop_at_start);
|
|
int sched_delta = id(sched_count) - id(sched_at_start);
|
|
ESP_LOGI("test", "MEASUREMENT_DONE loop_delta=%d sched_delta=%d",
|
|
loop_delta, sched_delta);
|
|
|
|
host:
|
|
api:
|
|
logger:
|
|
level: INFO
|
|
logs:
|
|
loop_test_component: WARN # Silence per-loop log spam
|
|
|
|
external_components:
|
|
- source:
|
|
type: local
|
|
path: EXTERNAL_COMPONENT_PATH
|
|
|
|
globals:
|
|
- id: sched_count
|
|
type: int
|
|
initial_value: "0"
|
|
- id: loop_at_start
|
|
type: int
|
|
initial_value: "0"
|
|
- id: sched_at_start
|
|
type: int
|
|
initial_value: "0"
|
|
|
|
loop_test_component:
|
|
components:
|
|
- id: loop_counter
|
|
name: loop_counter
|
|
|
|
interval:
|
|
# Fast scheduler interval — with the decoupling fix this should fire at
|
|
# its requested 50ms cadence regardless of loop_interval_.
|
|
- interval: 50ms
|
|
then:
|
|
- lambda: |-
|
|
id(sched_count) += 1;
|