Thanks to @Lionel_Glitchy on his post here, I managed to put together some automation that makes sense.
This is still under test and I will report back once I have the final version.
As explained by @Lionel_Glitchy, to use this you’ll need to create some helpers so you don’t have any parameters hard coded.
alias: Fan Humidity Automation
description: ""
trigger:
- platform: state
entity_id: input_number.fan_min_speed
- platform: state
entity_id: input_number.fan_max_speed
- platform: state
entity_id: input_number.humidity_target
- platform: time_pattern
minutes: /10
condition: []
action:
- service: number.set_value
target:
entity_id: number.air_humidifier_motor_speed
data:
value: >
{% set min_speed = states('input_number.fan_min_speed') | int %}
{% set max_speed = states('input_number.fan_max_speed') | int %}
{% set humidity_target = states('input_number.humidity_target') | int %}
{% set current_humidity = states('sensor.hall_humidity') | int %}
{% set current_fan_speed = states('number.air_humidifier_motor_speed') | int %}
{% if current_humidity < humidity_target %}
{% set new_speed = (current_fan_speed + 100) | int %}
{% if new_speed > max_speed %}
{{ max_speed | int }}
{% elif new_speed < min_speed %}
{{ min_speed | int }}
{% else %}
{{ new_speed | int }}
{% endif %}
{% elif current_humidity > humidity_target %}
{% set new_speed = (current_fan_speed - 100) | int %}
{% if new_speed > max_speed %}
{{ max_speed | int }}
{% elif new_speed < min_speed %}
{{ min_speed | int }}
{% else %}
{{ new_speed | int }}
{% endif %}
{% else %}
{{ current_fan_speed | int }}
{% endif %}