Spotify - Como integrar e comandar entre dispositivos (Requer Premium)

@fontes31 quando publicares código deves sublinhar o texto que queres transformar em código e clicar no icone </>. Deverá existir um espaço antes e outro depois do bloco de código para que funcione correctamente. O código em Yaml é muito sensível aos espaçamentos e sem o código devidamente formatado não te poderemos ajudar.

eu fiz copy paste do spotify.yaml que foi publicado, penso que o erro esta nesta parte:

     source: >
        {% if is_state("input_select.spotify_source", "Sala de

Jantar") %} Sala de Jantar
{% elif is_state(“input_select.spotify_source”, “Sala de
TV”) %} Sala de TV
{% endif %}

@fontes31 edita o teu anterior post com a formatação correcta sff

ja editei o spotify.yaml so que agora tenho este erro - “extra keys not allowed @ data[‘group’]”

@fontes31 peço que que edites o post como disse anteriormente, pois assim não conseguimos detectar o que possa estar errado.

Boa tarde.
Em relação ao erro “extra keys not allowed @ data[‘group’]”, aconteceu-me exactamente o mesmo. Bastou mudar o S maiúsculo para minúsculo, em vez de Spotify.yaml mudar para spotify.yaml. Não sei se foi a solução. O que é certo é que o erro deixou de dar.
Agora surge-me outro problema. Na janela de configuração do Spotify, quando tento clicar o link ( [Link Spotify account) dá o seguinte erro: INVALID_CLIENT: Invalid redirect URI.
Tenho o Spotify premium e por via das dúvidas faço logout e depois login.

Cumprimentos
Sebastião

Isso pode ter a ver com o link que introduziste quando fizeste os passos relativos ao Spotify. O URL de redirect tem de ser um link válido.

Boa noite.
Já funciona.
O problema estava no base_url do componte HTTP do configuration.yaml. Tinha

base_url: https://xxxx.duckdns.org

em vez de

base_url: https://xxxx.duckdns.org:8123

Cumprimentos
Sebastião

1 Curtiu

Uma mensagem foi dividida em um novo tópico: Spotify e Echo Dot

tenho um erro e não consigo reproduzir o spotify. Conseguem me ajudar?

Error executing service <ServiceCall script.spotify_music (c:f1191e54fbdc4c039242cff9e6f2eecf)>
Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/homeassistant/core.py”, line 1150, in _safe_execute
await self._execute_service(handler, service_call)
File “/usr/local/lib/python3.7/site-packages/homeassistant/core.py”, line 1163, in _execute_service
await handler.func(service_call)
File “/usr/local/lib/python3.7/site-packages/homeassistant/components/script/init.py”, line 114, in service_handler
context=service.context)
File “/usr/local/lib/python3.7/site-packages/homeassistant/components/script/init.py”, line 172, in async_turn_on
kwargs.get(ATTR_VARIABLES), context)
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/script.py”, line 131, in async_run
await self._handle_action(action, variables, context)
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/script.py”, line 210, in _handle_action
action, variables, context)
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/script.py”, line 299, in _async_call_service
context=context
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/service.py”, line 89, in async_call_from_config
domain, service_name, service_data, blocking=blocking, context=context)
File “/usr/local/lib/python3.7/site-packages/homeassistant/core.py”, line 1141, in async_call
self._execute_service(handler, service_call))
File “/usr/local/lib/python3.7/site-packages/homeassistant/core.py”, line 1163, in _execute_service
await handler.func(service_call)
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/entity_component.py”, line 194, in handle_service
required_features
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/service.py”, line 316, in entity_service_call
future.result() # pop exception if have
File “/usr/local/lib/python3.7/site-packages/homeassistant/helpers/service.py”, line 337, in _handle_service_platform_call
await getattr(entity, func)(**data)
File “/usr/local/lib/python3.7/concurrent/futures/thread.py”, line 57, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/local/lib/python3.7/site-packages/homeassistant/components/spotify/media_player.py”, line 238, in select_source
self._player.transfer_playback(self._devices[source],
KeyError: ‘’

Caros Amigos,
Gostava da vossa ajuda neste ponto.
Depois de configurar, bem acho eu, esta integração obtive este erro:
2019-08-08 16:14:46 ERROR (MainThread) [homeassistant.components.hassio] Integration not found: packages
Coloquei este parâmetros no configuration.yaml

  - platform: spotify
    client_id: !secret spotify_client_id
    client_secret: !secret spotify_client_secret
packages: !include_dir_named packages/

E adicionei o ficheiro spotify.yaml na pasta confi/packages com o seguinte código:

media_player:
  - platform: spotify
    client_id: !secret spotify_client_id
    client_secret: !secret spotify_client_secret

group:
  home_spotify_player:
    name: Spotify Player
    entities:
      - media_player.spotify
  
  home_spotify_controls:
    name: Spotify Controls
    control: hidden
    entities:
      - input_select.spotify_playlist
      - input_select.spotify_source
      - script.spotify_music
      - input_number.spotify_volume
      - input_boolean.spotify_shuffle


homeassistant:
  customize:
    script.spotify_music:
      friendly_name: 'Play'
      icon: mdi:play

sensor:
  - platform: template
    sensors:
      spotify_volume:
        friendly_name: "Spotify Volume"
        value_template: "{{ states.media_player.spotify.attributes.volume_level }}"
  - platform: template
    sensors:
      spotify_shuffle:
        friendly_name: "Spotify Shuffle"
        value_template: "{{ states.media_player.spotify.attributes.shuffle }}"
  - platform: template
    sensors:
      spotify_source:
        friendly_name: "Spotify Source"
        value_template: "{{ states.media_player.spotify.attributes.source }}"

input_number:
  spotify_volume:
    name: Volume
    icon: mdi:volume-high
    initial: 100
    min: 0
    max: 100
    step: 1

input_select:
  spotify_playlist:
    name: 'Playlist:'
    options:
      - Lista1
      - Lista2
      - Lista3
      - Lista4
    icon: mdi:spotify
  spotify_source:
    name: 'Source:'
    options:
      - Web Player (Chrome)
      - Mi Phone
      - DESKTOP-922IFR3
    initial: Web Player (Chrome)
    icon: mdi:speaker-wireless

input_boolean:
  spotify_shuffle:
    name: Shuffle
    icon: mdi:shuffle-variant

script:
  spotify_music:
    alias: "Play selected spotify playlist"
    sequence:
      - service: media_player.select_source
        data_template: 
          entity_id: media_player.spotify
          source: >
            {% if is_state("input_select.spotify_source", "Web Player (Chrome)") %} Web Player (Chrome)
            {% elif is_state("input_select.spotify_source", "Mi Phone") %} Mi Phone
            {% elif is_state("input_select.spotify_source", "DESKTOP-922IFR3") %} DESKTOP-922IFR3
            {% endif %}
      - service: media_player.play_media
        data_template:
          entity_id: media_player.spotify
          media_content_type: playlist
          media_content_id: >
            {% if is_state("input_select.spotify_playlist", "Lista1") %} spotify:user:spotify:playlist:37i9dQZF1DXakWdSZ8mUMO
            {% elif is_state("input_select.spotify_playlist", "Lista2") %} spotify:user:spotify:playlist:5dfbLgeesT8gixq1GTWBoU
            {% elif is_state("input_select.spotify_playlist", "Lista3") %} spotify:user:spotify:playlist:37i9dQZF1DX4WYpdgoIcn6
            {% elif is_state("input_select.spotify_playlist", "Lista4") %} spotify:user:spotify:playlist:6IjDl5eRczFdgZkKYXhuHZ
            {% endif %}

automation:
  - alias: 'Spotify Volume (Set)'
    trigger:
      platform: state
      entity_id: input_number.spotify_volume
    action:
      service: media_player.volume_set
      data_template:
        entity_id: media_player.spotify
        volume_level: '{{  states.input_number.spotify_volume.state | int / 100  }}'
  
  - alias: 'Spotify Volume (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_volume
    action:
      - delay:
          seconds: 5
      - service: input_number.set_value
        data_template:
          entity_id: input_number.spotify_volume
          value: '{{  states.sensor.spotify_volume.state | float | round(2) * 100  }}'
  
  - alias: 'Spotify Shuffle (Set)'
    trigger:
      platform: state
      entity_id: input_boolean.spotify_shuffle
    action:
      service: media_player.shuffle_set
      data_template:
        entity_id: media_player.spotify
        shuffle: >
          {% if is_state('input_boolean.spotify_shuffle', 'off') %} 
          false
          {% elif is_state('input_boolean.spotify_shuffle', 'on') %}
          true
          {% endif %}
  
  - alias: 'Spotify Shuffle (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_shuffle
    action:
      - delay:
          seconds: 5
      - service_template: >
          {% if states.sensor.spotify_shuffle.state == 'False' %}
            input_boolean.turn_off
          {% else %}
            input_boolean.turn_on
          {% endif %}
        data:
          entity_id: input_boolean.spotify_shuffle

  - alias: 'Spotify Source (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_source
    action:
      service: input_select.select_option
      entity_id: input_select.spotify_source
      data_template:
        option: '{{  states.sensor.spotify_source.state  }}'

Este código que coloquei no spotify.yaml copiei na integra do posto " Spotify - Como integrar e comandar entre dispositivos (Requer Premium)"

Desde já obrigado pela vossa ajuda
Abraço

olhando para o código que tens ai, tas a chamar duas vezes a mesma coisa

media_player:
  - platform: spotify
    client_id: !secret spotify_client_id
    client_secret: !secret spotify_client_secret

tens no configuration.yaml e no spotify.yaml
tira do configuration.yaml porque ja tens no spotify.yaml

1 Curtiu

Olá Hugo,
Obrigado pela resposta.
Testei, removendo da configuration.yaml ou do spotify.yaml mas o erro mantém-se.
Ab

@pmdsaude passa pelo nosso discord para podermos falar sobre isso melhor

Bom dia,

@pmdsaude Basicamente o erro indica-te que estas com o “link” errado, experimenta algo assim no configuration.yaml:

packages:
spotify: !include packages/spotify.yaml

1 Curtiu

Boa Noite,

Penso que fiz tudo direito, contudo quando estou a "Validar a Configuração " está a aparecer este erro.

Invalid config for [group]: [control] is an invalid option for [group]. Check: group->group->home_spotify_controls->control. (See ?, line ?).

Meu Codigo:

media_player:
  - platform: spotify
    client_id: !secret spotify_client_id
    client_secret: !secret spotify_client_secret

group:
  home_spotify_player:
    name: Spotify Player
    entities:
      - media_player.spotify
  
  home_spotify_controls:
    name: Spotify Controls
    control: hidden
    entities:
      - input_select.spotify_playlist
      - input_select.spotify_source
      - script.spotify_music
      - input_number.spotify_volume
      - input_boolean.spotify_shuffle


homeassistant:
  customize:
    script.spotify_music:
      friendly_name: 'Play'
      icon: mdi:play

sensor:
  - platform: template
    sensors:
      spotify_volume:
        friendly_name: "Spotify Volume"
        value_template: "{{ states.media_player.spotify.attributes.volume_level }}"
  - platform: template
    sensors:
      spotify_shuffle:
        friendly_name: "Spotify Shuffle"
        value_template: "{{ states.media_player.spotify.attributes.shuffle }}"
  - platform: template
    sensors:
      spotify_source:
        friendly_name: "Spotify Source"
        value_template: "{{ states.media_player.spotify.attributes.source }}"

input_number:
  spotify_volume:
    name: Volume
    icon: mdi:volume-high
    initial: 100
    min: 0
    max: 100
    step: 1

input_select:
  spotify_playlist:
    name: 'Playlist:'
    options:
      - Lista1
      - Lista2
      - Lista3
      - Lista4
    icon: mdi:spotify
  spotify_source:
    name: 'Source:'
    options:
      - Web Player (Chrome)
      - Mi Phone
      - DESKTOP-922IFR3
    initial: Web Player (Chrome)
    icon: mdi:speaker-wireless

input_boolean:
  spotify_shuffle:
    name: Shuffle
    icon: mdi:shuffle-variant

script:
  spotify_music:
    alias: "Play selected spotify playlist"
    sequence:
      - service: media_player.select_source
        data_template: 
          entity_id: media_player.spotify
          source: >
            {% if is_state("input_select.spotify_source", "Web Player (Chrome)") %} Web Player (Chrome)
            {% elif is_state("input_select.spotify_source", "Mi Phone") %} Mi Phone
            {% elif is_state("input_select.spotify_source", "DESKTOP-922IFR3") %} DESKTOP-922IFR3
            {% endif %}
      - service: media_player.play_media
        data_template:
          entity_id: media_player.spotify
          media_content_type: playlist
          media_content_id: >
            {% if is_state("input_select.spotify_playlist", "Lista1") %} spotify:user:spotify:playlist:37i9dQZF1DXakWdSZ8mUMO
            {% elif is_state("input_select.spotify_playlist", "Lista2") %} spotify:user:spotify:playlist:5dfbLgeesT8gixq1GTWBoU
            {% elif is_state("input_select.spotify_playlist", "Lista3") %} spotify:user:spotify:playlist:37i9dQZF1DX4WYpdgoIcn6
            {% elif is_state("input_select.spotify_playlist", "Lista4") %} spotify:user:spotify:playlist:6IjDl5eRczFdgZkKYXhuHZ
            {% endif %}

automation:
  - alias: 'Spotify Volume (Set)'
    trigger:
      platform: state
      entity_id: input_number.spotify_volume
    action:
      service: media_player.volume_set
      data_template:
        entity_id: media_player.spotify
        volume_level: '{{  states.input_number.spotify_volume.state | int / 100  }}'
  
  - alias: 'Spotify Volume (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_volume
    action:
      - delay:
          seconds: 5
      - service: input_number.set_value
        data_template:
          entity_id: input_number.spotify_volume
          value: '{{  states.sensor.spotify_volume.state | float | round(2) * 100  }}'
  
  - alias: 'Spotify Shuffle (Set)'
    trigger:
      platform: state
      entity_id: input_boolean.spotify_shuffle
    action:
      service: media_player.shuffle_set
      data_template:
        entity_id: media_player.spotify
        shuffle: >
          {% if is_state('input_boolean.spotify_shuffle', 'off') %} 
          false
          {% elif is_state('input_boolean.spotify_shuffle', 'on') %}
          true
          {% endif %}
  
  - alias: 'Spotify Shuffle (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_shuffle
    action:
      - delay:
          seconds: 5
      - service_template: >
          {% if states.sensor.spotify_shuffle.state == 'False' %}
            input_boolean.turn_off
          {% else %}
            input_boolean.turn_on
          {% endif %}
        data:
          entity_id: input_boolean.spotify_shuffle

  - alias: 'Spotify Source (Sync)'
    trigger:
      - platform: homeassistant
        event: start
      - platform: state
        entity_id: sensor.spotify_source
    action:
      service: input_select.select_option
      entity_id: input_select.spotify_source
      data_template:
        option: '{{  states.sensor.spotify_source.state  }}'

E usas os group: para quê?

Boas

Apenas copiei a código.
Não percebi a sua funcionalidade.

Já agora qual a função deste código

group:
  home_spotify_player:
    name: Spotify Player
    entities:
      - media_player.spotify
  
  home_spotify_controls:
    name: Spotify Controls
    control: hidden
    entities:
      - input_select.spotify_playlist
      - input_select.spotify_source
      - script.spotify_music
      - input_number.spotify_volume
      - input_boolean.spotify_shuffle

Vou remover e testar

@heldercampos1 não é boa prática copiar códigos sem perceber a sua funcionalidade…
Pois isso vai fazer com que não entendas como funciona.
Os groups: neste caso e só neste caso mt particular já não se usa devido ao Lovelace já ter um cartão que suporta directamente as chamadas das entidades.

No cartão entidades, podes chamar directamente as entidades.
PS: Este tutorial foi feito há dois anos , é possível que tenha havido alterações podes obviamente exprimentar, mas tens que primeiro entender a estrutura de todo o código e suas funcionalidades, deixando de parte o conceito de (copiar colar).

Estou com algumas dificuldades em perceber todos estes pontos. É muita informação ao mesmo tempo. Espero com o tempo melhorar.

Contudo já consegui integrar o Spotify com o HA. Ainda estou a explorar esta integração, para já parece porreira.

Temos opção de escolher a nossa playlist de forma simples, e carrega as listas automaticamente do Spotify.

Segue uma foto de como ficou.

1 Curtiu

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade