HA-FanSpeedControl
HA-FanSpeedControl copied to clipboard
A python script for Home Assistant that control fan speed with Fan Template and Broadlink.
HA-FanSpeedControl
A python script for Home Assistant that control fan speed with Fan Template and Broadlink.
Document
How it work
The script automatically call broadlink service when you set fan speed.
Example
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.
Installation
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.
Script arguments
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 |
Config Example
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: decrease
Template Fan config
input_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_osc
Debug
add logger to your configuration.yaml
logger:
default: warn
logs:
homeassistant.components.python_script.fan_speed_control.py: debug
Screenshot
Custom ui
Todos
- [ ] Refactor arguments, like: remove not used argument
service
- [ ] Find some way to get
entity.state
andfan speed
not by arguments