A python script for Home Assistant that control fan speed with Fan Template and Broadlink.
The script automatically call broadlink service when you set fan speed.
if your fan speed range is 1~12.
example1: call increase fan 4 times when you set fan speed from 1 to 5.
example2: call decrease fan 3 times when you set fan speed from 5 to 2.
example3: call decrease fan 2 times when you set fan speed from 2 to 12.
enable python_script for your HomeAssistant.
- Add to
configuration.yaml:python_script: - Create folder
<config>/python_scripts - restart HomeAssistant
Find Fan Speed Control on HACS automation category.
Or you can copy the Python script in to your <config>/python_scripts directory.
| key | required | type | description |
|---|---|---|---|
| fan_speed | true | string | speed from fan template |
| fan_speed_entity_id | true | string | |
| fan_entity_id | true | string | |
| fan_speed_count | true | integer | |
| service_domain | true | string | |
| service | true | string | |
| service_data_increase | true | object | |
| service_data_decrease | true | object |
set_percentage on template fan
set_percentage:
- service: python_script.fan_speed_control
data_template:
fan_speed: "{{ percentage }}"
fan_speed_entity_id: 'input_number.status_fan_speed'
fan_entity_id: 'fan.bedroom_fan'
fan_speed_count: 12
service_domain: 'remote'
service: 'send_command'
service_data_increase:
entity_id: remote.broadlink
device: fan
command: increase
service_data_decrease:
entity_id: remote.broadlink
device: fan
command: decreaseinput_boolean:
status_fan_power:
name: 'Fan Power'
input_number:
status_fan_speed:
name: 'Fan Speed'
min: 0
max: 100
input_select:
fan_osc:
name: 'Fan osc'
options:
- 'True'
- 'False'
fan:
- platform: template
fans:
bedroom_fan:
friendly_name: "myFan"
speed_count: 12
value_template: "{{ states('input_boolean.status_fan_power') }}"
percentage_template: "{{ states('input_number.status_fan_speed') | int }}"
oscillating_template: "{{ states('input_select.fan_osc') }}"
turn_on:
- condition: state
entity_id: input_boolean.status_fan_power
state: 'off'
- service: remote.send_command
data:
entity_id: remote.broadlink
device: fan
command: toggle
- service: input_boolean.turn_on
entity_id: input_boolean.status_fan_power
turn_off:
- condition: state
entity_id: input_boolean.status_fan_power
state: 'on'
- service: remote.send_command
data:
entity_id: remote.broadlink
device: fan
command: toggle
- service: input_boolean.turn_off
entity_id: input_boolean.status_fan_power
set_percentage:
- service: python_script.fan_speed_control
data_template:
fan_speed: "{{ percentage }}"
fan_speed_entity_id: 'input_number.status_fan_speed'
fan_entity_id: 'fan.bedroom_fan'
fan_speed_count: 12
service_domain: 'remote'
service: 'send_command'
service_data_increase:
entity_id: remote.broadlink
device: fan
command: increase
service_data_decrease:
entity_id: remote.broadlink
device: fan
command: decrease
set_oscillating:
- condition: state
entity_id: input_boolean.status_fan_power
state: 'on'
- service: remote.send_command
data:
entity_id: remote.broadlink
device: fan
command: oscillate
- service: input_select.select_next
entity_id: input_select.fan_oscadd logger to your configuration.yaml
logger:
default: warn
logs:
homeassistant.components.python_script.fan_speed_control.py: debug- Refactor arguments, like: remove not used argument
service - Find some way to get
entity.stateandfan speednot by arguments

