Sonos Switch ON/OFF/Volume control

This is my Lovace code which defines a 3-high vertical stack (1 for each of my Sonos players) using the HACS Mini Media Player card. Download the plugin from HACS then just paste the following into a new Manual card and edit it to reference your Sonos entities. Remember to also make sure that the buttons reference valid playlists which must exist in ‘My Sonos’ within the Sonos App:

cards:
  - artwork: cover
    entity: media_player.lounge
    hide: null
    speaker_group:
      entities:
        - entity_id: media_player.lounge
          name: Lounge - Sonos Connect Amp
        - entity_id: media_player.bedroom
          name: Bed 1 - Sonos Play 5
        - entity_id: media_player.Study
          name: Study - Sonos Play 3
      platform: sonos
      show_group_count: true
    tts:
      language: en-uk
      platform: sonos
      volume: 0.4
    type: 'custom:mini-media-player'
  - artwork: cover
    entity: media_player.bedroom
    shortcuts:
      buttons:
        - id: Absolute 80s
          name: Abs 80s
          type: source
        - id: .977 80's Hits
          name: 80s Hits
          type: source
        - id: KISS FM UK 100.0 (Top 40/Pop)
          name: Kiss
          type: source
        - id: Nation Radio
          name: Nation
          type: source
        - id: talkRADIO
          name: Talk
          type: source
        - id: Rock
          name: Rock
          type: source
        - id: Christmas
          name: Xmas
          type: source
        - id: Lynettes Favourites
          name: Lynette
          type: source
        - id: Steve's Favourites
          name: Steve
          type: source
        - id: Sleep Sounds
          name: Sleep
          type: source
      columns: 5
    tts:
      language: en-uk
      platform: sonos
      volume: 0.3
    type: 'custom:mini-media-player'
  - artwork: cover
    entity: media_player.study
    shortcuts:
      buttons:
        - id: Absolute 80s
          name: Abs 80s
          type: source
        - id: .977 80's Hits
          name: 80s Hits
          type: source
        - id: KISS FM UK 100.0 (Top 40/Pop)
          name: Kiss
          type: source
        - id: Nation Radio
          name: Nation
          type: source
        - id: talkRADIO
          name: Talk
          type: source
        - id: Rock
          name: Rock
          type: source
        - id: Christmas
          name: Xmas
          type: source
        - id: Lynettes Favourites
          name: Lynette
          type: source
        - id: Steve's Favourites
          name: Steve
          type: source
        - id: Sleep Sounds
          name: Sleep
          type: source
      columns: 5
    tts:
      language: en-uk
      platform: sonos
      volume: 0.3
    type: 'custom:mini-media-player'
type: vertical-stack

This is my automation for an RF remote that also controls the Bedroom Sonos player:

- id: '1595688076706'
  alias: Bed1 Remote
  description: Control Bedroom Sonos and Lights via Remote5
  trigger:
  - entity_id: sensor.remote5
    platform: state
  condition:
  - condition: template
    value_template: '{{ states(''sensor.remote5'') != ''unavailable'' }}'
  action:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 1'' }}'
      sequence:
      - entity_id: media_player.bedroom
        service: media_player.media_play_pause
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 2'' }}'
      sequence:
      - data:
          entity_id: media_player.bedroom
          source: Sleep Sounds
        service: media_player.select_source
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 3'' }}'
      sequence:
      - entity_id: media_player.bedroom
        service: media_player.volume_down
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 4'' }}'
      sequence:
      - entity_id: media_player.bedroom
        service: media_player.volume_up
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 5'' }}'
      sequence:
      - data: {}
        entity_id: media_player.bedroom
        service: media_player.media_previous_track
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 6'' }}'
      sequence:
      - data: {}
        entity_id: media_player.bedroom
        service: media_player.media_next_track
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 7'' }}'
      sequence:
      - entity_id: switch.sonoff06
        service: switch.toggle
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state  == ''Button 8'' }}'
      sequence:
      - entity_id: switch.bed1_fan
        service: switch.toggle
  initial_state: 'on'
  mode: queued
  max: 3

Note that I use the rfbridge_demux python script to efficiently capture all my RF codes and you and read up on that here Sonoff RF Bridge. Strategies for receiving data. Essentially sensor.remote 5 is either “Button 1” thru “Button 8” if a button has just been pressed otherwise it is “unavailable”.

The cheap remote that I used is this one https://www.aliexpress.com/i/33035885811.html.

Cheers and hope that Helps!