Kontrolowanie głośności media_player (Spotify) przy użyciu template:number

Cześć, interesuje mnie sterowanie głośnością Spotify za pomocą suwaka w HA (komunikacja dwustronna). Wcześniej zrobiłem to za pomocą automatyzacji i input_number ale działało tragicznie więc teraz mam zrobione tak:

template:
  - number:
      - name: "Spotify Lukasz Volume"
        unique_id: spotify_lukasz_volume
        icon: mdi:volume-high
        min: 0
        max: 100
        step: 1
        unit_of_measurement: "%"
        state: >
          {{ (state_attr('media_player.spotify_lukasz', 'volume_level') | float(0)) * 100 }}
        availability: >
          {{ state_attr('media_player.spotify_lukasz', 'volume_level') is not none }}
        set_value:
          - service: media_player.volume_set
            target:
              entity_id: media_player.spotify_lukasz
            data:
              volume_level: "{{ value | float(0) / 100 }}"

Działa ale nie idealnie. Gdy ustawię głośność na przykład na 20% i szybko zmienię na 100% to Spotify jest ustawiony na 20%. Jakieś pomysły? Może ktoś ma już to rozwiązane u siebie? Interesuje mnie rozwiązanie bez instalowania jakichś dodatków/pluginów itp (jeśli się da).

Sterowanie nie zawiera się od 0-100%

Tak zobacz.

min: 0
max: 1
step: 0.01

Wiem, dlatego robiłem mnożenie/dzielenie przez 100. Teraz zrobiłem tak:

template:
  - number:
      - name: "Spotify Lukasz Volume"
        unique_id: spotify_lukasz_volume
        icon: mdi:volume-high
        min: 0
        max: 1
        step: 0.01
        unit_of_measurement: "%"
        state: >
          {{ (state_attr('media_player.spotify_lukasz', 'volume_level') | float(0)) }}
        availability: >
          {{ state_attr('media_player.spotify_lukasz', 'volume_level') is not none }}
        set_value:
          - service: media_player.volume_set
            target:
              entity_id: media_player.spotify_lukasz
            data:
              volume_level: "{{ value | float(0) }}"

upewniłem się, że zmiany weszły:

ale efekt jest ten sam. Działa jeśli powoli klikam. Jak zaczynam szybkie klikanie/przeciąganie to nie trzyma synchronizacji. Synchronizacja Spotify⭢HA wydaje się być ok, problem jest z HA⭢Spotify.

Auto.

alias: Spotify - Adjust Volume
description: spotify slider
triggers:
  platform: state
  entity_id: input_number.spotify_player_vol
action:
    - service: media_player.volume_set
      data_template:
        entity_id: media_player.spotifyplus_pc_artur
        volume_level: '{{ trigger.to_state.state }}'

input_number.spotify_player_vol

min: 0
max: 1
step: 0.01

Dzięki, sprawdziłem to rozwiązanie ale przy szybkiej zmianie wartości (przesuwanie slidera) występuje identyczny problem. Poza tym to jest jednokierunkowe. Wcześniej kombinowałem z automatyzacjami ale gdy robiłem 2 kierunkowo to zapętlałem :smiley:

Kombinowałem też z czatem AI i wczoraj i dzisiaj ale jeszcze gorzej wychodziło.

Chyba się udało, póki co nie widzę z tym problemów.

auto1:

alias: Spotify volume - player to slider
description: ""
triggers:
  - entity_id: media_player.spotify_lukasz
    attribute: volume_level
    trigger: state
conditions:
  - condition: template
    value_template: >-
      {{ state_attr('media_player.spotify_lukasz','volume_level') is not none
      }}
  - condition: template
    value_template: >
      {% set player =
      (state_attr('media_player.spotify_lukasz','volume_level')|float(0)*100)|int
      %} {% set stored = states('input_number.spotify_volume_state')|int %} {{
      (player - stored) | abs > 1 }}
actions:
  - variables:
      player_percent: >
        {{
        (state_attr('media_player.spotify_lukasz','volume_level')|float(0)*100)|round(0)
        }}
  - target:
      entity_id: input_number.spotify_volume_state
    data:
      value: "{{ player_percent }}"
    action: input_number.set_value
  - target:
      entity_id: input_number.spotify_volume_slider
    data:
      value: "{{ player_percent }}"
    action: input_number.set_value
mode: queued
max: 10

auto2:

alias: Spotify volume - slider to player
description: ""
triggers:
  - entity_id: input_number.spotify_volume_slider
    trigger: state
actions:
  - wait_for_trigger:
      - entity_id: input_number.spotify_volume_slider
        trigger: state
    timeout:
      milliseconds: 250
    continue_on_timeout: true
  - condition: template
    value_template: |
      {{ states('input_number.spotify_volume_slider')|int
         != states('input_number.spotify_volume_state')|int }}
  - target:
      entity_id: media_player.spotify_lukasz
    data:
      volume_level: >
        {{ (states('input_number.spotify_volume_slider')|int / 100) | round(2)
        }}
    action: media_player.volume_set
  - target:
      entity_id: input_number.spotify_volume_state
    data:
      value: "{{ states('input_number.spotify_volume_slider')|int }}"
    action: input_number.set_value
mode: restart

input_number:
  spotify_volume_slider:
    min: 0
    max: 100
    step: 1
    mode: slider
    unit_of_measurement: "%"
  spotify_volume_state:
    min: 0
    max: 100
    step: 1
    mode: slider
    unit_of_measurement: "%"
1 polubienie