mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
282 lines
7.3 KiB
YAML
282 lines
7.3 KiB
YAML
esphome:
|
|
name: test-text-sensor-raw-state
|
|
|
|
host:
|
|
api:
|
|
batch_delay: 0ms # Disable batching to receive all state updates
|
|
logger:
|
|
level: DEBUG
|
|
|
|
# Text sensor WITHOUT filters - get_raw_state() should return same as state
|
|
text_sensor:
|
|
- platform: template
|
|
name: "No Filter Sensor"
|
|
id: no_filter_sensor
|
|
|
|
# Text sensor WITH filter - get_raw_state() should return original value
|
|
- platform: template
|
|
name: "With Filter Sensor"
|
|
id: with_filter_sensor
|
|
filters:
|
|
- to_upper
|
|
|
|
# StringRef-based filters (append, prepend, substitute, map)
|
|
- platform: template
|
|
name: "Append Sensor"
|
|
id: append_sensor
|
|
filters:
|
|
- append: " suffix"
|
|
|
|
- platform: template
|
|
name: "Prepend Sensor"
|
|
id: prepend_sensor
|
|
filters:
|
|
- prepend: "prefix "
|
|
|
|
- platform: template
|
|
name: "Substitute Sensor"
|
|
id: substitute_sensor
|
|
filters:
|
|
- substitute:
|
|
- foo -> bar
|
|
- hello -> world
|
|
|
|
- platform: template
|
|
name: "Map Sensor"
|
|
id: map_sensor
|
|
filters:
|
|
- map:
|
|
- ON -> Active
|
|
- OFF -> Inactive
|
|
|
|
- platform: template
|
|
name: "Chained Sensor"
|
|
id: chained_sensor
|
|
filters:
|
|
- prepend: "["
|
|
- append: "]"
|
|
|
|
- platform: template
|
|
name: "To Lower Sensor"
|
|
id: to_lower_sensor
|
|
filters:
|
|
- to_lower
|
|
|
|
- platform: template
|
|
name: "Lambda Sensor"
|
|
id: lambda_sensor
|
|
filters:
|
|
- lambda: |-
|
|
return {"[" + x + "]"};
|
|
|
|
- platform: template
|
|
name: "Lambda Raw State Sensor"
|
|
id: lambda_raw_state_sensor
|
|
filters:
|
|
- lambda: |-
|
|
return {x + " MODIFIED"};
|
|
|
|
- platform: template
|
|
name: "Lambda Skip Sensor"
|
|
id: lambda_skip_sensor
|
|
filters:
|
|
- lambda: |-
|
|
if (x == "skip") {
|
|
return {};
|
|
}
|
|
return {x + " passed"};
|
|
|
|
# Button to publish values and log raw_state vs state
|
|
button:
|
|
- platform: template
|
|
name: "Test No Filter Button"
|
|
id: test_no_filter_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: no_filter_sensor
|
|
state: "hello world"
|
|
- delay: 50ms
|
|
# Log both state and get_raw_state() to verify they match
|
|
- logger.log:
|
|
format: "NO_FILTER: state='%s' raw_state='%s'"
|
|
args:
|
|
- id(no_filter_sensor).state.c_str()
|
|
- id(no_filter_sensor).get_raw_state().c_str()
|
|
|
|
- platform: template
|
|
name: "Test With Filter Button"
|
|
id: test_with_filter_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: with_filter_sensor
|
|
state: "hello world"
|
|
- delay: 50ms
|
|
# Log both state and get_raw_state() to verify filter works
|
|
# state should be "HELLO WORLD" (filtered), raw_state should be "hello world" (original)
|
|
- logger.log:
|
|
format: "WITH_FILTER: state='%s' raw_state='%s'"
|
|
args:
|
|
- id(with_filter_sensor).state.c_str()
|
|
- id(with_filter_sensor).get_raw_state().c_str()
|
|
|
|
- platform: template
|
|
name: "Test Append Button"
|
|
id: test_append_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: append_sensor
|
|
state: "test"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "APPEND: state='%s'"
|
|
args:
|
|
- id(append_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Prepend Button"
|
|
id: test_prepend_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: prepend_sensor
|
|
state: "test"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "PREPEND: state='%s'"
|
|
args:
|
|
- id(prepend_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Substitute Button"
|
|
id: test_substitute_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: substitute_sensor
|
|
state: "foo says hello"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "SUBSTITUTE: state='%s'"
|
|
args:
|
|
- id(substitute_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Map ON Button"
|
|
id: test_map_on_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: map_sensor
|
|
state: "ON"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "MAP_ON: state='%s'"
|
|
args:
|
|
- id(map_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Map OFF Button"
|
|
id: test_map_off_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: map_sensor
|
|
state: "OFF"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "MAP_OFF: state='%s'"
|
|
args:
|
|
- id(map_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Map Unknown Button"
|
|
id: test_map_unknown_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: map_sensor
|
|
state: "UNKNOWN"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "MAP_UNKNOWN: state='%s'"
|
|
args:
|
|
- id(map_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Chained Button"
|
|
id: test_chained_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: chained_sensor
|
|
state: "value"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "CHAINED: state='%s'"
|
|
args:
|
|
- id(chained_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test To Lower Button"
|
|
id: test_to_lower_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: to_lower_sensor
|
|
state: "HELLO WORLD"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "TO_LOWER: state='%s'"
|
|
args:
|
|
- id(to_lower_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Lambda Button"
|
|
id: test_lambda_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: lambda_sensor
|
|
state: "test"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "LAMBDA: state='%s'"
|
|
args:
|
|
- id(lambda_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Lambda Pass Button"
|
|
id: test_lambda_pass_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: lambda_skip_sensor
|
|
state: "value"
|
|
- delay: 50ms
|
|
- logger.log:
|
|
format: "LAMBDA_PASS: state='%s'"
|
|
args:
|
|
- id(lambda_skip_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Lambda Skip Button"
|
|
id: test_lambda_skip_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: lambda_skip_sensor
|
|
state: "skip"
|
|
- delay: 50ms
|
|
# When lambda returns {}, the value should NOT be published
|
|
# so state should remain from previous publish (or empty if first)
|
|
- logger.log:
|
|
format: "LAMBDA_SKIP: state='%s'"
|
|
args:
|
|
- id(lambda_skip_sensor).state.c_str()
|
|
|
|
- platform: template
|
|
name: "Test Lambda Raw State Button"
|
|
id: test_lambda_raw_state_button
|
|
on_press:
|
|
- text_sensor.template.publish:
|
|
id: lambda_raw_state_sensor
|
|
state: "original"
|
|
- delay: 50ms
|
|
# Verify raw_state is preserved (not mutated) after lambda filter
|
|
# state should be "original MODIFIED", raw_state should be "original"
|
|
- logger.log:
|
|
format: "LAMBDA_RAW_STATE: state='%s' raw_state='%s'"
|
|
args:
|
|
- id(lambda_raw_state_sensor).state.c_str()
|
|
- id(lambda_raw_state_sensor).get_raw_state().c_str()
|