Mini Media Player - Script für Playlists unabhängig von der verwendeten Entity

Hallo Community, ich habe mir ein Dashboard mit dem Mini Media Player und der Swipe-Card für einen Raum (Arbeitszimmer) gebastelt.

image

Insgesamt habe ich drei Swipe-Cards: Radio, Apple Music und Spotify. Auf jeder Karte habe ich 4 Buttons, welche jeweils ein Script auslösen, jedoch spezifisch für den einen Raum (Arbeitszimmer). Exemplarisch nachfolgend das Script für einen Radiosender.

alias: "#SpreeRadio 80er"
sequence:
  - if:
      - condition: state
        entity_id: media_player.arbeitszimmer_2
        state: playing
    then:
      - metadata: {}
        data: {}
        target:
          entity_id: media_player.arbeitszimmer_2
        action: media_player.turn_off
    else:
      - data:
          extra:
            thumb: http://www.spreeradio.de/assets/icons/apple-touch-icon.png
            title: SpreeRadio 80er
          media_content_id: library://radio/6
          media_content_type: music
          enqueue: replace
        target:
          entity_id:
            - media_player.arbeitszimmer_2
        action: media_player.play_media
mode: single
description: ""
icon: mdi:radio

Alles funktioniert soweit. Ich möchte das ganze jetzt jedoch nochmal für das Badezimmer und Wohnzimmer wiederholen. Meinem aktuellen Wissensstand nach würde ich die 12 Skripte ( 3 Karten x 4 Buttons) pro weiteren Raum kopieren und hätte dann insgesamt 36 Skripte für alle Playlists. Geht das irgendwie einfacher? Pro Skript den aktuell ausgewählten Mediaplayer auswählen?

Danke für eure Hilfe.

Du könntest nur 1 Script nehmen und übergibst dem Script per Button die Variablen Raum und Quelle. Quelle sind entsprechend Radio, Apple Music oder Spotify. Im Script sagts Du dann entsprechend der Variable, was genau gemacht werden soll.

Beispiel:

Tile Karte ruft Script auf

type: tile
entity: sensor.xxx
tap_action:
  action: call-service
  service: script.1_forum_variable
  data:
    room: "Wohnzimmer"
    source: "Radio"

Das Script empfängt und in meinem Fall verschickt Mail

alias: 1 forum variable
sequence:
  - variables:
      room: "{{room}}"
      source: "{{source}}"
  - action: notify.gmxolaf3
    metadata: {}
    data:
      title: Was das Script machen soll?
      message: |
        Im Raum {{room}} soll Musik vom {{source}} abgespielt werden.
description: ""

Diesen Teil könntest Du Dir sparen und im Script direkt die Variablen abfassen aber vorne hat den Vorteil der Dokumentation für später - mit welche Variablen werden erwartet.

  - variables:
      room: "{{room}}"
      source: "{{source}}"

PS: Letzteres habe ich auch noch nicht konsequent gemacht, will ich aber in Zukunft.

Super, ich muss mich damit wohl erst mal beschäftigen, ganz verstehe ich das noch nicht, aber ich lese mich da sicherlich rein. Danke für den Schubser.

Ich arbeite gerade an einer Spaßseite, die manuelle Texte auf dem Dashboard auf entsprechende Sonosboxen sprechen läßt. Hier verwende ich das gleiche Prinzip wie Du benötigst.

Screenshot 2024-12-16 221621

Der entscheide Teil der custom:button-card mit Fokus auf Variablenübergabe

tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.om_scr_funtexte_sprechen
  data:
    variables:
      target: AllHaveFun

Das Empfängerscript script.om_scr_funtexte_sprechen sieht in der Grundstruktur so aus.

alias: om_scr_funtexte_sprechen
sequence:
  - variables:
      target: "{{target}}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{target == 'AllHaveFun'}}"
        sequence:
          - action: meine Action für Alle
      - conditions:
          - condition: template
            value_template: "{{target == 'OnlyOlafFun'}}"
        sequence:
          - action: meine Action für Oben
      - conditions:
          - condition: template
            value_template: "{{target == 'OnlyMitteFun'}}"
        sequence:
          - action: meine Action für Mitte
description: ""

Die Target Variable entscheidet welche Option im Script ausgeführt wird.

Der Vorteil des Konstrukts - nur ein Script wird gebraucht obwohl es mehrere Boxen gibt.

1 „Gefällt mir“