Dynamic fan speed automation in response to a secondary humidity sensor

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 %}