Multiroom Audio Player

I’m sharing a small widget I just (re-)designed to control my multiroom system, trying to make it as generic as possible:

logo

  • It doesn’t make any assumptions about your items, so you have to configure them individually with the props. Only the artist, track and player control item are required;
  • The track progress/track duration time are notably available with the Spotify binding, if you’re looking for them;
  • The icons on the bottom left will appear as you specify the items;
  • The “volume” icon will replace the controls by a slider to adjust the volume;
  • The “multiroom” icon will bring up the command options with the standard action sheet - so make sure the item you specify has some.

Code

uid: multiroom_audio_control
tags: []
props:
  parameters:
    - context: item
      label: Player Control Item
      name: playerControlItem
      required: true
      type: TEXT
    - context: item
      label: Artist Name Item
      name: artistItem
      required: true
      type: TEXT
    - context: item
      label: Track Name Item
      name: trackItem
      required: true
      type: TEXT
    - context: item
      label: Album Art Item
      name: albumArtItem
      required: false
      type: TEXT
    - context: item
      label: Track Progress Time Item
      name: trackProgressItem
      required: false
      type: TEXT
    - context: item
      label: Track Total Time Item
      name: trackTimeItem
      required: false
      type: TEXT
    - context: item
      label: Power Item
      name: powerItem
      required: false
      type: TEXT
    - context: item
      label: Multiroom Control Item
      name: multiroomControlItem
      required: false
      type: TEXT
    - context: item
      label: Volume Control Item
      name: volumeControlItem
      required: false
      type: TEXT
    - label: Force Dark Theme
      name: darkTheme
      required: false
      type: BOOLEAN
  parameterGroups: []
timestamp: Dec 15, 2020, 2:58:37 PM
component: f7-card
config:
  themeDark: =props.darkTheme
  style:
    height: 160px
slots:
  default:
    - component: f7-card-content
      slots:
        default:
          - component: oh-image
            config:
              item: =props.albumArtItem
              action: photos
              actionPhotos: =[props.albumArtItem]
              actionPhotoBrowserConfig:
                theme: dark
              style:
                display: "=props.albumArtItem ? 'block' : 'none'"
                height: 80px
                width: 80px
                float: left
          - component: f7-block
            config:
              style:
                display: flex
                flex-direction: column
            slots:
              default:
                - component: Label
                  config:
                    text: =items[props.artistItem].state
                    class:
                      - margin-top
                    style:
                      overflow: hidden
                      white-space: nowrap
                      text-overflow: ellipsis
                - component: Label
                  config:
                    text: =items[props.trackItem].state
                    style:
                      font-size: 20px
                      overflow: hidden
                      white-space: nowrap
                      text-overflow: ellipsis
                - component: Label
                  config:
                    text: "=(props.trackProgressItem && props.trackTimeItem) ? items[props.trackProgressItem].state + ' / ' + items[props.trackTimeItem].state : ''"
                    style:
                      font-size: 12px
                      height: 20px
                      margin-top: 2px
                      color: gray
                - component: oh-player-controls
                  config:
                    item: =props.playerControlItem
                    color: green
                    visible: =!vars.showVolume
                    style:
                      margin: 1rem
                - component: oh-slider
                  config:
                    item: =props.volumeControlItem
                    color: blue
                    visible: =vars.showVolume === true
                    style:
                      margin-top: 2rem
          - component: f7-block
            config:
              style:
                position: absolute
                top: 137px
                width: 112px
                text-align: right
                display: flex
                flex-direction: row-reverse
                justify-content: center
            slots:
              default:
                - component: oh-link
                  config:
                    style:
                      margin: 0 0.5em
                    visible: =props.volumeControlItem !== undefined
                    iconF7: speaker_3_fill
                    iconSize: 18
                    color: "=(vars.showVolume) ? 'blue' : 'gray'"
                    round: true
                    action: variable
                    actionVariable: showVolume
                    actionVariableValue: =!(vars.showVolume === true)
                - component: oh-link
                  config:
                    style:
                      margin: 0 0.5em
                    visible: =props.multiroomControlItem !== undefined
                    iconF7: music_house_fill
                    iconSize: 18
                    color: gray
                    round: true
                    action: options
                    actionItem: =props.multiroomControlItem
                    tooltip: =items[props.multiroomControlItem].displayState || items[props.multiroomControlItem].state
                - component: oh-link
                  config:
                    style:
                      margin: 0 0.5em
                      color: var(--f7-card-text-color)
                      opacity: "=(items[props.powerItem].state === 'ON') ? 1 : 0.3"
                    visible: =props.powerItem !== undefined
                    iconF7: power
                    iconSize: 18
                    round: true
                    action: toggle
                    actionItem: =props.powerItem
                    actionCommand: ON
                    actionCommandAlt: OFF

14 Likes

Very nice work, Yannick!

I especially like the the exchange mechanic of the player-controls with the volume slider - it still retains a compact widget then.

I also recognized that it might be beneficial to use more generic elements as you don’t have to mess around too much with all the custom classes and styles then to make it work in the different themes.

1 Like

hello very nice work
I use it for Alex
I have also made a list of my favorite radios
but I do not know how to make it all together

uid: Alexa_Music
tags:
  - Music
  - Alexa
  - Light
props:
  parameters:
    - context: item
      label: Player Control Item "Player"
      name: playerControlItem
      required: true
      type: TEXT
    - context: item
      label: Volume Control Item "Volume"
      name: volumeControlItem
      required: false
      type: TEXT
    - context: item
      label: Album Art Item "ImageUrl"
      name: albumArtItem
      required: false
      type: TEXT
    - context: item
      label: Track Name Item "Title"
      name: trackItem
      required: true
      type: TEXT
    - context: item
      label: Artist Name Item "Subtitle 2"
      name: artistItem
      required: true
      type: TEXT
    - context: item
      label: Tune in radio station Item "RadioStationId"
      name: trackTimeItem
      required: false
      type: TEXT
    - context: item
      label: power Item "Radio"
      name: powerItem
      required: false
      type: TEXT
    - context: item
      label: Light Item "Light To Room"
      name: LightItems
      required: false
      type: TEXT
    - context: item
      label: Multiroom Control Item "Doors"
      name: multiroomControlItem
      required: false
      type: TEXT
    - context: item
      label: Track Progress Time Item
      name: trackProgressItem
      required: false
      type: TEXT
    - label: Force Dark Theme
      name: darkTheme
      required: false
      type: BOOLEAN
  parameterGroups: []
timestamp: Jan 9, 2021, 3:16:42 AM
component: f7-card
config:
  themeDark: =props.darkTheme
  style:
    height: 160px
slots:
  default:
    - component: f7-card-content
      slots:
        default:
          - component: oh-image
            config:
              item: =props.albumArtItem
              action: photos
              actionPhotos: =[props.albumArtItem]
              actionPhotoBrowserConfig:
                theme: dark
              style:
                display: "=props.albumArtItem ? 'block' : 'none'"
                height: 80px
                width: 80px
                float: left
          - component: f7-block
            config:
              style:
                display: flex
                flex-direction: column
            slots:
              default:
                - component: Label
                  config:
                    text: =items[props.artistItem].state
                    class:
                      - margin-top
                    style:
                      overflow: hidden
                      white-space: nowrap
                      text-overflow: ellipsis
                - component: Label
                  config:
                    text: =items[props.trackItem].state
                    style:
                      font-size: 20px
                      overflow: hidden
                      white-space: nowrap
                      text-overflow: ellipsis
                - component: Label
                  config:
                    text: "=(props.trackProgressItem && props.trackTimeItem) ? items[props.trackProgressItem].state + ' / ' + items[props.trackTimeItem].state : ''"
                    style:
                      font-size: 12px
                      height: 20px
                      margin-top: 2px
                      color: gray
                - component: oh-player-controls
                  config:
                    item: =props.playerControlItem
                    color: green
                    visible: =!vars.showVolume
                    style:
                      margin: 1rem
                - component: oh-slider
                  config:
                    item: =props.volumeControlItem
                    color: blue
                    visible: =vars.showVolume === true
                    style:
                      margin-top: 2rem
          - component: f7-block
            config:
              style:
                position: absolute
                top: 137px
                width: 112px
                text-align: right
                display: flex
                flex-direction: row-reverse
                justify-content: center
            slots:
              default:
                - component: oh-link
                  config:
                    style:
                      margin: 0 0.5em
                    iconF7: speaker_3_fill
                    iconSize: 18
                    color: "=(vars.showVolume) ? 'blue' : 'red'"
                    opacity: "=(items[props.volumeControlItem].state === 'ON') ? 1 : 0.2"
                    round: true
                    action: variable
                    actionVariable: showVolume
                    actionVariableValue: =!(vars.showVolume === true)
                    tooltip: =items[props.volumeControlItem].displayState || items[props.volumeControlItem].state
                - component: oh-link
                  config:
                    style:
                      margin: 0 0.5em
                    iconF7: music_house_fill
                    iconSize: 18
                    visible: props.multiroomControlItem !== undefined
                    color: '=(items[props.multiroomControlItem].state === "ON") ? "blue" : "red"'
                    opacity: "=(items[props.multiroomControlItem].state === 'ON') ? 1 : 0.2"
                    round: true
                    action: toggle
                    actionItem: =props.multiroomControlItem
                    actionCommand: ON
                    actionCommandAlt: OFF
                    tooltip: =items[props.multiroomControlItem].displayState || items[props.multiroomControlItem].state
                - component: oh-link
                  config:
                    style:
                      color: '=(items[props.powerItem].state === "ON") ? "blue" : "red"'
                      margin: 0 0.5em
                      opacity: "=(items[props.powerItem].state === 'ON') ? 1 : 0.2"
                      visible: props.powerItem !== undefined
                    iconF7: power
                    iconSize: 18
                    round: true
                    action: toggle
                    actionItem: =props.powerItem
                    actionCommand: ON
                    actionCommandAlt: OFF
                    tooltip: =items[props.powerItem].displayState || items[props.powerItem].state
                - component: oh-link
                  config:
                    style:
                      color: '=(items[props.LightItems].state === "ON") ? "blue" : "red"'
                      opacity: "=(items[props.LightItems].state === 'ON') ? 1 : 0.2"
                      visible: props.LightItems !== undefined
                      margin: 0 0.5em
                    iconF7: lightbulb
                    iconSize: 18
                    round: true
                    action: toggle
                    actionItem: =props.LightItems
                    actionCommand: ON
                    actionCommandAlt: OFF
                    tooltip: =items[props.LightItems].displayState || items[props.LightItems].state
uid: Radio_List_Alexa
tags:
  - Alexa
  - Music
  - list
props:
  parameters:
    - description: The Label at the top of the card
      label: Friendly name  Lounge
      name: title
      required: true
      type: TEXT
    - context: item
      label: Favore Title
      name: Favore_Title
      required: true
      type: TEXT
    - context: item
      label: Favore
      name: Favore
      required: true
      type: TEXT
  parameterGroups: []
timestamp: Jan 9, 2021, 3:57:06 AM
component: oh-list-card
config:
  class:
    - no-padding
  style:
    text-align: center
    height: auto
    font-size: 15px
    --f7-button-text-color: var(--f7-text-color)
    --f7-button-bg-color: var(--f7-card-bg-color)
    --f7-theme-color-rgb: var(--f7-color-blue-rgb)
  title: =props.title
  accordionList: true
slots:
  default:
    - component: oh-list-item
      config:
        title: =items[props.Favore_Title].state
        textColor: blue
        icon: f7:music_note_list
        badge: " Radio "
        badgeColor: red
      slots:
        accordion:
          - component: oh-list-card
            config:
              class:
                - margin
                - no-padding
              accordionList: true
            slots:
              default:
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Zoo Radio
                    text: Zoo Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 100
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Fly Radio
                    text: Fly Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 1
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Imagine FM
                    text: Imagine FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 2
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: North Radio
                    text: North Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 3
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Plus Radio
                    text: Plus Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 4
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: COSMO RADIO
                    text: COSMO RADIO
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 5
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Rainbow
                    text: Rainbow
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 6
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Rock Radio
                    text: Rock Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 7
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: RSO
                    text: RSO
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 8
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Velvet 96.8 FM
                    text: Velvet 96.8 FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 9
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Bayern Chillout
                    text: Bayern Chillout
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 10
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: BAYERN Lovesongs
                    text: BAYERN Lovesongs
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 11
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: BAYERN 90er Hits
                    text: BAYERN 90er Hits
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 12
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: BAYERN Classic Rock
                    text: BAYERN Classic Rock
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 13
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: 80s christmas
                    text: 80s christmas
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 14
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Christmas
                    text: Christmas
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 15
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Christmas Radio
                    text: Christmas Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 16
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Athens Party +
                    text: Athens Party +
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 17
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Athens Party
                    text: Athens Party
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 18
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Athens Party RNB
                    text: Athens Party RNB
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 19
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: 92.9 Kiss
                    text: 92.9 Kiss
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 20
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Athens Deejay
                    text: Athens Deejay
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 21
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Diesi FM"
                    text: Diesi FM"
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 22
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Dromos FM
                    text: Dromos FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 23
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Easy 97.2
                    text: Easy 97.2
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 24
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Ellinadiko FM
                    text: Ellinadiko FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 25
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Heart FM
                    text: Heart FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 26
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Kiss 91.1 FM
                    text: Kiss 91.1 FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 27
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: LOVE
                    text: LOVE
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 28
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Mad Radio
                    text: Mad Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 29
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Melodia FM
                    text: Melodia FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 30
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Music 89.2
                    text: Music 89.2
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 31
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Palmos FM
                    text: Palmos FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 32
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Paradise Radio
                    text: Paradise Radio
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 33
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Rock FM
                    text: Rock FM
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 34
                    accordionList: true
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                      - align-items-center
                    title: Rythmos 949"
                    text: Rythmos 949"
                    action: command
                    actionItem: =props.Favore
                    actionCommand: 35
                    accordionList: true

and my rules

rules file

val String filename = "Alexa_RADIO_Kitchen_Favorite"

// if (xxxxsxx.state == 0 )

// logInfo(filename, "xxxxxxx")

// received update

rule "Alexa Kitchen Radio Favorite"

when

Item  KitchenRoom_Favorite_Radio_Alexa received command

then

    switch(KitchenRoom_Favorite_Radio_Alexa.state) 

            {

        case 100 :       {

           // Zoo Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s78170")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Zoo Radio")

         logInfo(filename, "Zoo Radio")  

      }

        case 1 :  {

           // Republic Radio s78249

           // Fly Radio s266902

          Al_KitchenRoom_RadioStationId.sendCommand("s266902")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Fly Radio")

         logInfo(filename, "Fly Radio ")  

      }

        case 2 :   {

         // Imagine FM

           Al_KitchenRoom_RadioStationId.sendCommand("s79446")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Imagine FM")

         logInfo(filename, "Imagine FM")  

      }

        case 3 :   {

           // North Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s133388")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("North Radio")

         logInfo(filename, "North Radio")  

      }

        case 4 :   {

          // Plus Radio

          Al_KitchenRoom_RadioStationId.sendCommand("s102465")

          KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Plus Radio")

         logInfo(filename, "Plus Radio")  

      }

         case 5 :  {

           // RADIOCOSMO

           Al_KitchenRoom_RadioStationId.sendCommand("s6659")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("COSMO RADIOC")

         logInfo(filename, "RADIOCOSMO")  

      }

        case 6 :  {

          // Rainbow

           Al_KitchenRoom_RadioStationId.sendCommand("s87077")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Rainbow")

         logInfo(filename, "Rainbow")  

      }

        case 7 :  {

           // Rock Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s9406")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Rock Radio")

         logInfo(filename, "Rock Radio")  

      }

        case 8 :   {

          // RSO

           Al_KitchenRoom_RadioStationId.sendCommand("s54732")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("RSO")

         logInfo(filename, "RSO")  

      }

        case 9 :  {

           // Velvet 96.8 FM

           Al_KitchenRoom_RadioStationId.sendCommand("s168619")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Velvet 96.8 FM")

         logInfo(filename, "Velvet 96.8 FM")  

      }

        case 10 :   {

          // Antenne Bayern Chillout

           Al_KitchenRoom_RadioStationId.sendCommand("s96745")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Bayern Chillout")

         logInfo(filename, "Antenne Bayern Chillout")  

      }

        case 11 :   {

           // ANTENNE BAYERN Lovesongs

           Al_KitchenRoom_RadioStationId.sendCommand("s104096")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("BAYERN Lovesongs")

         logInfo(filename, "ANTENNE BAYERN Lovesongs")  

      }

        case 12 :   {

          // ANTENNE BAYERN 90er Hits

           Al_KitchenRoom_RadioStationId.sendCommand("s231123")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("BAYERN 90er Hits")

         logInfo(filename, "ANTENNE BAYERN 90er Hits")  

      }

        case 13 :  {

           // ANTENNE BAYERN Classic Rock Live

           Al_KitchenRoom_RadioStationId.sendCommand("s104094")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("BAYERN Classic Rock")

         logInfo(filename, "ANTENNE BAYERN Classic Rock Live")  

      }

        case 14 :   {

          // 80s80s christmas

           Al_KitchenRoom_RadioStationId.sendCommand("s258389")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("80s christmas")

         logInfo(filename, "80s christmas")  

      }

        case 15 :   {

           // Christmas

           Al_KitchenRoom_RadioStationId.sendCommand("s302328")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Christmas")

         logInfo(filename, "Christmas")  

      }

        case 16 :   {

          // Christmas Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s299546")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Christmas Radio")

         logInfo(filename, "Christmas Radio")  

      }

        case 17 :   {

           // Athens Party +

           Al_KitchenRoom_RadioStationId.sendCommand("s187567")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Athens Party +")

         logInfo(filename, "Athens Party +")  

      }

        case 18 :   {

          // Athens Party

           Al_KitchenRoom_RadioStationId.sendCommand("s103538")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Athens Party")

         logInfo(filename, "Athens Party")  

      }

        case 19 :   {

           // Athens Party RNB

           Al_KitchenRoom_RadioStationId.sendCommand("s187570")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Athens Party RNB")

         logInfo(filename, "Athens Party RNB")  

      }

        case 20 :   {

           // 92.9 Kiss

           Al_KitchenRoom_RadioStationId.sendCommand("s6183")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("92.9 Kiss")

         logInfo(filename, "92.9 Kiss")  

      }

        case 21 :   {

         // Athens Deejay FM

           Al_KitchenRoom_RadioStationId.sendCommand("s80307")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Athens Deejay")

         logInfo(filename, "Athens Deejay FM")  

      }

        case 22 :   {

           // Diesi FM

           Al_KitchenRoom_RadioStationId.sendCommand("s49386")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Diesi FM")

         logInfo(filename, "Diesi FM")  

      }

        case 23 :   {

          // Dromos FM

           Al_KitchenRoom_RadioStationId.sendCommand("s87064")

            KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Dromos FM")

         logInfo(filename, "Dromos FM")  

      }

          case 24 :   {

           // Easy 97.2

           Al_KitchenRoom_RadioStationId.sendCommand("s291260")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Easy 97.2")

         logInfo(filename, "Easy 97.2")  

      }

        case 25 :   {

          // Ellinadiko FM

           Al_KitchenRoom_RadioStationId.sendCommand("s109115")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Ellinadiko FM")

         logInfo(filename, "Ellinadiko FM")  

      }

        case 26 :   {

           // Heart FM

           Al_KitchenRoom_RadioStationId.sendCommand("s103550")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Heart FM")

         logInfo(filename, "Heart FM")  

      }

        case 27 :  {

          // Kiss 91.1 FM

           Al_KitchenRoom_RadioStationId.sendCommand("s116740")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Kiss 91.1 FM")

         logInfo(filename, "Kiss 91.1 FM")  

      }

        case 28 :   {

           // LOVE

           Al_KitchenRoom_RadioStationId.sendCommand("s15774")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("LOVE")

         logInfo(filename, "LOVE")  

      }

        case 29 :   {

          // Mad Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s18299")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Mad Radio")

         logInfo(filename, "Mad Radio")  

      }

        case 30 :   {

           // Melodia FM

           Al_KitchenRoom_RadioStationId.sendCommand("s15782")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Melodia FM")

         logInfo(filename, "Melodia FM")  

      }

        case 31 :   {

          // Music 89.2

           Al_KitchenRoom_RadioStationId.sendCommand("s133390")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Music 89.2")

         logInfo(filename, "Music 89.2")  

      }

        case 32 :   {

           // Palmos FM

           Al_KitchenRoom_RadioStationId.sendCommand("s154544")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Palmos FM")

         logInfo(filename, "Palmos FM")  

      }

        case 33 :   {

          // Paradise Radio

           Al_KitchenRoom_RadioStationId.sendCommand("s102452")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Paradise Radio")

         logInfo(filename, "Paradise Radio")  

      }

        case 34 :   {

           // Rock FM

           Al_KitchenRoom_RadioStationId.sendCommand("s15809")

           KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Rock FM")

         logInfo(filename, "Rock FM")  

      }

        case 35 :  {

           // Rythmos 949

           Al_KitchenRoom_RadioStationId.sendCommand("p1095544")

            KitchenRoom_Favorite_Radio_Alexa_string.sendCommand("Rythmos 949")

         logInfo(filename, "Rythmos 949")  

      }

    }

end

items

Number         KitchenRoom_Favorite_Radio_Alexa        "Alexa KitchenRoom Radio Favorite"                 
String         KitchenRoom_Favorite_Radio_Alexa_string "Alexa KitchenRoom Radio Favorite String"

can you explain the multiroom icon.
I use some sort of snapcast to control all the volumes across my place but probably need to set it up correctly to your widget.

Yeah, it’s not “really” multiroom, it’s just that I have an item with rules reacting to it, which will configure some preset links between the rooms… I always have the same music source, I just choose in which room it plays. There’s no individual volume control, I have a page dedicated to that.

Note that you can modify the widget and repurpose this button to something else, like open a popup with playlist/radio buttons…

ok thx
I just stated to understand widgets in general, so I need to dig deeper into popups and bttons etc.

hi,

what are you using as image url for album cover ?

Thanks

@Mike_s1 In my case that would be an Image item linked to a
spotify:player:<myaccount>:albumImage channel
but it’s sort of a shortcut since while I use Spotify often as my source it’s not always the case. I have a Yamaha multiroom setup but the Yamaha Receiver binding for instance, AFAIK, doesn’t expose proper Image channels unfortunately, which could be used with this widget.