Criar status para máquina de lavar

Precisava de uma ajuda para criar um sensor de status para máquina de lavar roupas e lavar louças, tipo de acordo com o wats saber em qual estágio está (enchendo, batendo, centrifugando e etc) alguém poderia me dar uma ajuda?
Estou com esse código e queria incluir mais segue:

  - platform: template
    sensors:
      maquina_lavar_status:
        friendly_name_template: Status Máquina de Lavar
        value_template: >-
          {% if states('sensor.watts_lava_e_seca')|float > 3 %}
            Lavando
          {% else %}
            Desligada
          {% endif %}
        icon_template: >-
          {% if states('sensor.watts_lava_e_seca')|float > 3 %}
            mdi:dishwasher
          {% else %}
            mdi:washing-machine
          {% endif %}

Primeiro você precisa criar uma entidade com as opções para máquina de lavar.
Assim a cada etapa você altera a opção atual da máquina de lavar.

Para isso crie um input select

input_select:
# Máquina de Lavar ################################
  opcoes_maquina_de_lavar:
    name: Opções da Máquina de Lavar
    options:
      - Desligada
      - Enchendo
      - Batendo
      - Molho
      - Esvaziando
      - Centrifugando
    initial: Desligada
    icon: mdi:washing-machine

Esse código acima vai dentro do configuration.yaml.

As opções você define de acordo com a sua máquina, ou com o que você deseja. Basta adicionar ou remover dentro da tag options: como o exemplo acima. Mesma coisa vale para o nome, eu coloquei opcoes_maquina_de_lavar, mas você pode colocar o nome que achar melhor.

Depois você precisa identificar a cada etapa da sua máquina, a quantidade watts. Mas já adianto que é chatinho fazer, pois as vezes você tem vários modos (modo curto, modo longo) de lavagem/secagem e isso da um trabalhinho.

Digo isso, porque as suas automações para mudar o status da sua máquina no INPUT SELECT, vai depender da etapa anterior que sua máquina se encontra, pois se não vai alterar para uma etapa que não deveria. Você precisará criar condições para trocar de etapa.

Exemplo:

# Etapa 1 - Máquina Ligada e Enchendo
- alias: 'Máquina de Lavar - Enchendo'
  initial_state: true
  trigger:
    - platform: numeric_state
      entity_id: sensor.maquina_de_lavar_wats
      above: 3 #acima
      below: 7 #abaixo
  condition:
    # Aqui uma condição, só vai trocar para a opção Enchendo se o opção atual dela for Desligada
    - condition: state
      entity_id: input_select.opcoes_maquina_de_lavar
      state: 'Desligada'         
  action:
    # aqui eu altero o valor da máquina no input que criei
    - service: input_select.select_option
      data:
        entity_id: input_select.opcoes_maquina_de_lavar
        option: 'Enchendo'
    # gh avisa - OPCIONAL
    - service: tts.google_translate_say
      data_template:
        entity_id: media_player.musics
        message: "Olá! A máquina de lavar foi ligada. Iniciando o primeiro processo, que é encher d'água."    

Para cada etapa você precisará fazer assim. Uma automação com condições.
Outro exemplo, a minha máquina sempre que termina o processo em todas os modos, ela faz a centrifugação antes de finalizar.

Então eu coloquei uma condição para que só altere a etapa para Desligada, se a etapa atual dela for “Centrifugando”

# etapa final
- alias: 'Máquina de Lavar - Finalizada'
  initial_state: true
  trigger:
    - platform: numeric_state
      entity_id: sensor.maquina_de_lavar_wats
      below: 1
   condition:  
    # Aqui é onde coloco a condição que para executar as ações, ela precisa estar no modo Centrifugando
    - condition: state
      entity_id: input_select.opcoes_maquina_de_lavar
      state: 'Centrifugando'             
  action:
    # Altera o valor do input
    - service: input_select.select_option
      data:
        entity_id: input_select.opcoes_maquina_de_lavar
        option: 'Desligada'
    # gh avisa
    - service: tts.google_translate_say
      data_template:
        entity_id: media_player.musics
        message: "Processo de lavação finalizou. Desliguei a máquina. Agora você pode recolher a roupa."   

Se você não colocar as condições baseado na etapa atual da máquina, as vezes sua automação vai trocar para molho e na verdade ela ta enchendo, pois as vezes a variação de watts é semelhante entre uma etapa e outra.

Outra dica é no gatilho trigger: colocar for: assim, ela só executa o gatilho se estiver por X tempo entre aquela situação (nesse caso watts), exemplo:

  trigger:
    - platform: numeric_state
      entity_id: sensor.maquina_de_lavar_wats
      below: 1
      for: '00:10:00' 

Nesse caso, só vai executar a ação se a máquina de lavar abaixo de 1 watt por 10 segundos. Isso também ajuda pois as vezes a máquina ou o sensor que monitora a energia dela, tem variação e de uma hora para outra vai para 0 em 1 segundo e acaba ativando sua automação.

No final você não vai utilizar o sensor.maquina_lavar_status para mostrar na tela (view), e sim o input_select.opcoes_maquina_de_lavar para mostrar o status dela.

Bom é isso, como eu disse, é chatinho, e tem que fazer bastante testes para conseguir chegar um resultado ideal, e além disso tem que ligar a máquina e verificar em cada etapa a variação de watts dela.