mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 12:17:23 +00:00
142 lines
4.1 KiB
YAML
142 lines
4.1 KiB
YAML
esphome:
|
|
name: status-flags-test
|
|
|
|
host:
|
|
api:
|
|
actions:
|
|
# Warning flag services for sensor_a
|
|
- action: set_warning_a
|
|
then:
|
|
- lambda: "id(sensor_a)->status_set_warning();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
- action: clear_warning_a
|
|
then:
|
|
- lambda: "id(sensor_a)->status_clear_warning();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
|
|
# Warning flag services for sensor_b
|
|
- action: set_warning_b
|
|
then:
|
|
- lambda: "id(sensor_b)->status_set_warning();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
- action: clear_warning_b
|
|
then:
|
|
- lambda: "id(sensor_b)->status_clear_warning();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
|
|
# Error flag services for sensor_a
|
|
- action: set_error_a
|
|
then:
|
|
- lambda: "id(sensor_a)->status_set_error();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
- action: clear_error_a
|
|
then:
|
|
- lambda: "id(sensor_a)->status_clear_error();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
|
|
# Error flag services for sensor_b
|
|
- action: set_error_b
|
|
then:
|
|
- lambda: "id(sensor_b)->status_set_error();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
- action: clear_error_b
|
|
then:
|
|
- lambda: "id(sensor_b)->status_clear_error();"
|
|
- component.update: app_warning_bit
|
|
- component.update: app_error_bit
|
|
|
|
# Snapshot of the status_led_light's output state for observation.
|
|
- action: snapshot_led
|
|
then:
|
|
- component.update: status_led_writes
|
|
- component.update: status_led_last_state
|
|
|
|
logger:
|
|
|
|
# Tracks each write to the fake status_led output.
|
|
globals:
|
|
- id: status_led_write_count
|
|
type: uint32_t
|
|
restore_value: no
|
|
initial_value: "0"
|
|
- id: status_led_last_write
|
|
type: bool
|
|
restore_value: no
|
|
initial_value: "false"
|
|
|
|
# Fake binary output — status_led_light writes to this instead of a pin.
|
|
# Every write bumps a counter and records the last value, both of which
|
|
# are exposed below so the test can verify status_led_light's loop is
|
|
# actually reading App.get_app_state() and responding.
|
|
output:
|
|
- platform: template
|
|
id: fake_status_led
|
|
type: binary
|
|
write_action:
|
|
- globals.set:
|
|
id: status_led_write_count
|
|
value: !lambda "return id(status_led_write_count) + 1;"
|
|
- globals.set:
|
|
id: status_led_last_write
|
|
value: !lambda "return state;"
|
|
|
|
# Actual status_led_light component under test.
|
|
light:
|
|
- platform: status_led
|
|
name: Status LED
|
|
id: status_led_light_id
|
|
output: fake_status_led
|
|
|
|
sensor:
|
|
# Two components that the test will toggle warning/error flags on.
|
|
- platform: template
|
|
name: Sensor A
|
|
id: sensor_a
|
|
update_interval: 24h
|
|
lambda: return 1.0;
|
|
- platform: template
|
|
name: Sensor B
|
|
id: sensor_b
|
|
update_interval: 24h
|
|
lambda: return 2.0;
|
|
|
|
# Expose App.app_state_'s STATUS_LED_WARNING / STATUS_LED_ERROR bits
|
|
# as 0.0 / 1.0. force_update ensures every manual component.update
|
|
# publishes even if the value is unchanged.
|
|
- platform: template
|
|
name: App Warning Bit
|
|
id: app_warning_bit
|
|
update_interval: 24h
|
|
force_update: true
|
|
lambda: |-
|
|
return (App.get_app_state() & STATUS_LED_WARNING) != 0 ? 1.0 : 0.0;
|
|
- platform: template
|
|
name: App Error Bit
|
|
id: app_error_bit
|
|
update_interval: 24h
|
|
force_update: true
|
|
lambda: |-
|
|
return (App.get_app_state() & STATUS_LED_ERROR) != 0 ? 1.0 : 0.0;
|
|
|
|
# Observables for the fake status_led output.
|
|
- platform: template
|
|
name: Status LED Writes
|
|
id: status_led_writes
|
|
update_interval: 24h
|
|
force_update: true
|
|
lambda: return id(status_led_write_count);
|
|
- platform: template
|
|
name: Status LED Last State
|
|
id: status_led_last_state
|
|
update_interval: 24h
|
|
force_update: true
|
|
lambda: |-
|
|
return id(status_led_last_write) ? 1.0 : 0.0;
|