Allow setting set_percentage and set_preset_mode of template fan without turning on (#23822)

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
Petro31 2022-10-24 12:36:30 -04:00 committed by GitHub
parent fa32b9f54f
commit a5854a0e71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,6 +13,8 @@ The `template` platform creates fans that combine integrations and provides the
ability to run scripts or invoke services for each of the `turn_on`, `turn_off`, `set_percentage`,
`set_preset_mode`, `set_oscillating`, and `set_direction` commands of a fan.
## Configuration
To enable Template Fans in your installation, add the following to your
`configuration.yaml` file:
@ -146,3 +148,110 @@ When converting a fan with 3 speeds from the old fan entity model, the following
33 - `low`
66 - `medium`
100 - `high`
## Examples
### Helper Fan
This example uses an input_boolean and an input_number to mimic a fan, and
the example shows multiple service calls for set_percentage.
{% raw %}
```yaml
fan:
- platform: template
fans:
helper_fan:
friendly_name: "Helper Fan"
value_template: "{{ states('input_boolean.state') }}"
turn_on:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.state
turn_off:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.state
percentage_template: >
{{ states('input_number.percentage') if is_state('input_boolean.state', 'on') else 0 }}
speed_count: 6
set_percentage:
- service: input_boolean.turn_{{ 'on' if percentage > 0 else 'off' }}
target:
entity_id: input_boolean.state
- service: input_number.set_value
target:
entity_id: input_number.percentage
data:
value: "{{ percentage }}"
```
{% endraw %}
### Preset Modes Fan
This example uses an existing fan with only a percentage. It extends the
percentage value into useable preset modes without a helper entity.
{% raw %}
```yaml
fan:
- platform: template
fans:
preset_mode_fan:
friendly_name: "Preset Mode Fan Example"
value_template: "{{ states('fan.percentage_fan') }}"
turn_on:
- service: fan.turn_on
target:
entity_id: fan.percentage_fan
turn_off:
- service: fan.turn_off
target:
entity_id: fan.percentage_fan
percentage_template: >
{{ state_attr('fan.percentage_fan', 'percentage') }}
speed_count: 3
set_percentage:
- service: fan.set_percentage
target:
entity_id: fan.percentage_fan
data:
percentage: "{{ percentage }}"
preset_modes:
- "off"
- "low"
- "medium"
- "high"
preset_mode_template: >
{% if is_state('fan.percentage_fan', 'on') %}
{% if state_attr('fan.percentage_fan', 'percentage') == 100 %}
high
{% elif state_attr('fan.percentage_fan', 'percentage') == 66 %}
medium
{% else %}
low
{% endif %}
{% else %}
off
{% endif %}
set_preset_mode:
- service: fan.set_percentage
target:
entity_id: fan.percentage_fan
data:
percentage: >-
{% if preset_mode == 'high' %}
100
{% elif preset_mode == 'medium' %}
66
{% elif preset_mode == 'low' %}
33
{% else %}
0
{% endif %}
```
{% endraw %}