2021.4: For our advanced users ❤️

try this:

  - platform: mqtt
    name: "Master Bedroom Fan"
    command_topic: "cmnd/iFan03-2/FanSpeed"
    state_topic: "stat/iFan03-2/RESULT"
    state_value_template: >
      {% if value_json.FanSpeed is defined %}
        {% if value_json.FanSpeed == 0 -%}off{%- elif value_json.FanSpeed > 0 -%}on{%- endif %}
      {% else %}
        {% if states.fan.master_bedroom_fan.state == 'off' -%}off{%- elif states.fan.master_bedroom_fan.state == 'on' -%}on{%- endif %}
      {% endif %}
    availability_topic: tele/iFan03-2/LWT
    payload_off: "off"
    payload_on: "on"
    payload_available: Online
    payload_not_available: Offline
    percentage_command_template: >
      {% if value == 33 %}
        1
      {% elif value == 67 %}
        2
      {% elif value == 100 %}
        3
      {% else %}
        0 
      {% endif %}
    percentage_command_topic: "cmnd/iFan03-2/FanSpeed"
    percentage_state_topic: "stat/iFan03-2/RESULT"
    percentage_value_template: >
      {% if value_json.FanSpeed == 1 %}
        33
      {% elif value_json.FanSpeed == 2 %}
        67
      {% elif value_json.FanSpeed == 3 %}
        100
      {% else %}
        0
      {% endif %}

it seems to be working except I can’t figure out how to limit the step stops in the speed slider for the pop up to be only three steps.

Right now it has steps of 1% instead of 33%.

Does anyone know how to define how many speeds there are for the mqtt fan?

That doesn’t seem to be an option like it is for the template fan.