Roon module for Home Assistant

Hey @zeltak_b, happy to share the details. It’s involved multiple different things working together (templates, automations, scripts, custom UI etc) which will take a little bit of time to explain properly. I’m smashed with work this week, so I’ll put together a summary next week and come back to you.

1 Like

thx so much! no rush at all

appreciate it!

z

Hey @zeltak_b, sorry for the delay… #life :man_facepalming:

Anyway, here goes.

Home Assistant components used:

  • RoonLabs music player - Home Assistant (home-assistant.io) (obviously)
  • Custom:stack-in-card (after trying many others this was the only one that reliably gave me the coloured border how I wanted)
  • Custom:layout-card (for structuring grids within the coloured border)
  • Custom:button-card (for all my buttons)
  • Card-mod
  • Custom:mini-media-player (for a minimal media UI)
  • Templates (already there, but combined with the above changes card colours based on state)
  • Automations (for turning on amplifier zones based on media player state and for grouping zones based on toggle state)
  • Scripts (for making some of my code easier for things like volume changes and turning amps on to specific input)
  • Helpers (toggles for zone grouping and source dropdowns)

I also needed remote control in addition to the media player commands… this will be system specific, but for me was a mix of:

Once you have all the pieces together the dashboard is pretty straightforward.

I then created a card for each roon media player (i.e. zone):
image

type: custom:stack-in-card
mode: vertical
card_mod:
  style: |
    ha-card {
      background-color: royalblue
    }
cards:
  - type: custom:layout-card
    layout_type: custom:grid-layout
    layout:
      grid-template-columns: 85% 15%
    cards:
      - type: custom:mini-media-player
        entity: media_player.living
        info: short
        artwork: cover
        scale: 0.8
        hide:
          volume: true
          icon: true
          power: true
          progress: true
      - type: custom:button-card
        entity: input_boolean.grouped_living
        show_name: false
        show_state: false
        size: 100%
        styles:
          card:
            - height: 65px
        state:
          - icon: mdi:toggle-switch
            color: '#2471A3'
            value: 'on'
          - icon: mdi:toggle-switch-off
            color: '#D5D8DC'
            value: 'off'

And I created a card for each “amp zone”. (I’ve removed most of the volume buttons from the code for brevity)
image

type: horizontal-stack
cards:
  - type: custom:stack-in-card
    mode: vertical
    card_mod:
      style: |
        ha-card {
          background-color:
            {% if state_attr('media_player.denon_avc_x4800h_3', 'source') == 'AUX2' %}
              teal
            {% elif state_attr('media_player.denon_avc_x4800h_3', 'source') == 'CD' %}
              royalblue
            {% else %}
              
            {% endif %}
        }
    cards:
      - type: custom:layout-card
        layout_type: custom:grid-layout
        cards:
          - type: custom:button-card
            action: none
            entity: media_player.denon_avc_x4800h_3
            show_state: true
            show_name: false
            show_icon: false
            show_label: true
            label: Dining
            layout: icon_name_state
            styles:
              grid:
                - grid-template-areas: '"l n"'
                - grid-template-columns: 60% 30%
                - grid-template-rows: 1fr
                - font-size: 14px
              card:
                - height: 33px
            state_display: '[[[ return entity.attributes.volume_level ]]]'
          - type: custom:layout-card
            layout_type: custom:grid-layout
            cards:
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: royalblue
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h_3
                      parameter1: Z3ON
                      parameter2: Z3CD
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: teal
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h_3
                      parameter1: Z3ON
                      parameter2: Z3AUX2
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state: 'on'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state_not: 'off'
                card:
                  type: custom:state-switch
                  entity: template
                  template: >-
                    {% if state_attr('media_player.denon_avc_x4800h_3',
                    'source') == 'AUX2' %} blue {% else %} purple {% endif %}
                  states:
                    purple:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: teal
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h_3
                          command: /goform/formiPhoneAppDirect.xml?Z3AUX2
                      icon: mdi:audio-input-rca
                      icon_height: 35px
                    blue:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: royalblue
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h_3
                          command: /goform/formiPhoneAppDirect.xml?Z3CD
                      icon: mdi:audio-input-rca
                      icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state: 'on'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_3
                    state_not: 'off'
                card:
                  show_name: false
                  show_icon: true
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                  tap_action:
                    action: call-service
                    service: denonavr.get_command
                    data:
                      entity_id: media_player.denon_avc_x4800h_3
                      command: /goform/formiPhoneAppDirect.xml?Z3OFF
                  icon: mdi:power
                  icon_height: 35px
            layout:
              grid-template-columns: 34% 66%
              grid-template-rows: auto
              padding: 0px
              margin: 0px -4px 0px -4px
              grid-template-areas: |
                "LPower RPower"
          - type: horizontal-stack
            cards:
              - show_name: false
                show_icon: true
                size: 100%
                type: custom:button-card
                styles:
                  card:
                    - height: 30px
                    - padding: 0
                tap_action:
                  action: call-service
                  service: media_player.volume_set
                  data:
                    volume_level: 0.2
                  target:
                    entity_id: media_player.denon_avc_x4800h_3
                icon: mdi:volume-low
                icon_height: 25px
                name: '20'
                show_state: false
          - type: horizontal-stack
            cards:
              - type: custom:button-card
                show_icon: true
                size: 100%
                styles:
                  card:
                    - height: 30px
                    - padding: 0
                tap_action:
                  action: call-service
                  service: script.media_mute_toggle
                  data:
                    media_player: media_player.denon_avc_x4800h_3
                icon: mdi:volume-mute
                icon_height: 25px
                name: '0'
                show_name: false
              - show_name: false
                show_icon: true
                size: 100%
                type: custom:button-card
                styles:
                  card:
                    - height: 30px
                    - padding: 0
                tap_action:
                  action: call-service
                  service: script.volume_change_step
                  data:
                    media_player: media_player.denon_avc_x4800h_3
                    increment: -0.05
                icon: mdi:volume-minus
                icon_height: 25px
                name: '-5'
  - type: custom:stack-in-card
    mode: vertical
    card_mod:
      style: |
        ha-card {
          background-color:
            {% if state_attr('media_player.denon_avc_x4800h_2', 'source') == 'AUX2' %}
              teal
            {% elif state_attr('media_player.denon_avc_x4800h_2', 'source') == 'CD' %}
              royalblue
            {% else %}
              
            {% endif %}
        }
    cards:
      - type: custom:layout-card
        layout_type: custom:grid-layout
        cards:
          - type: custom:button-card
            action: none
            entity: media_player.denon_avc_x4800h_2
            show_state: true
            show_name: false
            show_icon: false
            show_label: true
            label: Kitchen
            layout: icon_name_state
            styles:
              grid:
                - grid-template-areas: '"l n"'
                - grid-template-columns: 60% 30%
                - grid-template-rows: 1fr
                - font-size: 14px
              card:
                - height: 33px
            state_display: '[[[ return entity.attributes.volume_level ]]]'
          - type: custom:layout-card
            layout_type: custom:grid-layout
            cards:
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: royalblue
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h_2
                      parameter1: Z2ON
                      parameter2: Z2CD
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: teal
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h_2
                      parameter1: Z2ON
                      parameter2: Z2AUX2
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state_not: 'off'
                card:
                  type: custom:state-switch
                  entity: template
                  template: >-
                    {% if state_attr('media_player.denon_avc_x4800h_2',
                    'source') == 'AUX2' %}
                      blue
                    {% elif state_attr('media_player.denon_avc_x4800h_2',
                    'source') == 'AUX2' %}
                      blue
                    {% elif state_attr('media_player.denon_avc_x4800h_2',
                    'source') == 'CD' %}
                      purple
                    {% else %}
                      purple
                    {% endif %}
                  states:
                    purple:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: teal
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h_2
                          command: /goform/formiPhoneAppDirect.xml?Z2AUX2
                      icon: mdi:audio-input-rca
                      icon_height: 35px
                    blue:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: royalblue
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h_2
                          command: /goform/formiPhoneAppDirect.xml?Z2CD
                      icon: mdi:audio-input-rca
                      icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h_2
                    state_not: 'off'
                card:
                  show_name: false
                  show_icon: true
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                  tap_action:
                    action: call-service
                    service: denonavr.get_command
                    data:
                      entity_id: media_player.denon_avc_x4800h_2
                      command: /goform/formiPhoneAppDirect.xml?Z2OFF
                  icon: mdi:power
                  icon_height: 35px
            layout:
              grid-template-columns: 34% 66%
              grid-template-rows: auto
              padding: 0px
              margin: 0px -4px 0px -4px
              grid-template-areas: |
                "LPower RPower"
  - type: custom:stack-in-card
    mode: vertical
    card_mod:
      style: |
        ha-card {
          background-color:
            {% if state_attr('media_player.denon_avc_x4800h', 'source') == 'AUX2' %}
              teal
            {% elif state_attr('media_player.denon_avc_x4800h', 'source') == 'CD' %}
              royalblue
            {% else %}
              
            {% endif %}
        }
    cards:
      - type: custom:layout-card
        layout_type: custom:grid-layout
        cards:
          - type: custom:button-card
            action: none
            entity: media_player.denon_avc_x4800h
            show_state: true
            show_name: false
            show_icon: false
            show_label: true
            label: Living
            layout: icon_name_state
            styles:
              grid:
                - grid-template-areas: '"l n"'
                - grid-template-columns: 60% 30%
                - grid-template-rows: 1fr
                - font-size: 14px
              card:
                - height: 33px
            state_display: '[[[ return entity.attributes.volume_level ]]]'
          - type: custom:layout-card
            layout_type: custom:grid-layout
            layout:
              grid-template-columns: 34% 66%
              grid-template-rows: auto
              padding: 0px
              margin: 0px -4px 0px -4px
              grid-template-areas: |
                "LPower RPower"
            cards:
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: royalblue
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h
                      parameter1: ZMON
                      parameter2: SICD
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state: 'off'
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state_not: 'on'
                card:
                  show_name: false
                  show_icon: true
                  size: 100%
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                      - background-color: teal
                  tap_action:
                    action: call-service
                    service: script.denon_on_to_input
                    data:
                      media_player: media_player.denon_avc_x4800h
                      parameter1: ZMON
                      parameter2: SIAUX2
                  icon: mdi:power
                  icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: LPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state: 'on'
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state_not: 'off'
                card:
                  type: custom:state-switch
                  entity: template
                  template: >-
                    {% if state_attr('media_player.denon_avc_x4800h', 'source')
                    == 'AUX2' %} blue {% else %} purple {% endif %}
                  states:
                    purple:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: teal
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h
                          command: /goform/formiPhoneAppDirect.xml?SIAUX2
                      icon: mdi:audio-input-rca
                      icon_height: 35px
                    blue:
                      type: custom:button-card
                      size: 100%
                      styles:
                        card:
                          - height: 33px
                          - padding: 0
                          - background-color: royalblue
                        icon:
                          - height: 25px
                      tap_action:
                        action: call-service
                        service: denonavr.get_command
                        data:
                          entity_id: media_player.denon_avc_x4800h
                          command: /goform/formiPhoneAppDirect.xml?SICD
                      icon: mdi:audio-input-rca
                      icon_height: 35px
              - type: conditional
                view_layout:
                  grid-area: RPower
                conditions:
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state: 'on'
                  - condition: state
                    entity: media_player.denon_avc_x4800h
                    state_not: 'off'
                card:
                  show_name: false
                  show_icon: true
                  type: custom:button-card
                  styles:
                    card:
                      - height: 33px
                      - padding: 0
                  tap_action:
                    action: call-service
                    service: denonavr.get_command
                    data:
                      entity_id: media_player.denon_avc_x4800h
                      command: /goform/formiPhoneAppDirect.xml?ZMOFF
                  icon: mdi:power
                  icon_height: 35px

If you’ve got the plugins installed then the above should basically render for you as-is but you’ll get some whopping big errors on the state_display: '[[[ return entity.attributes.volume_level ]]]' lines because that entity won’t exist at your end. You’ll also find most of the buttons don’t do anything since they call automations/scripts. I’m trying not to write a thesis so I’ll summarise those below and won’t paste the code unless it’s useful.

  • Automation: Start zones (if mediaplayer changes state to playing then turn on amp zone)
  • Automation: Group zones (if toggle changes to true then call group zone script)
  • Script: On to input (takes entity and source values and then turns the amp on to that input)
  • Script: Mute (takes an entity and toggles mute state)
  • Script: Volume change (takes an entity, gets current volume and then changes it by X)
  • Script: Join (takes an entity (sent by automation) and a helper value and joins the zones)

That’s about it… it’s the result of a lot of trial and error but it’s been pretty solid now. The only thing that’s not working perfectly at the moment is the template state that should let me switch inputs (only relevant to the main living area where I have two roon zones across three amp zones) sometimes doesn’t show up until I refresh the page. (image below shows it missing)
image

3 Likes

thx so much @James_Fitzell !

will explore this over the weekend!

best

Z

I worked out what was doing this. Due to evolution in my goals, I had a conditional card for the amp being on, and then within the conditional I then had the template state checking inputs. This doesn’t seem to play nice, but also isn’t a logical way to have done it. I removed both conditional cards (one covered on, the other off) and integrated the off condition into my template state.

Now works fine every load, no more missing button.

I also did some messing with my grouping so that they are also template state meaning you can’t accidentally group the source (e.g. Living2 in the below) and if you turn on a group then it goes the colour of the master (e.g. Rumpus)

Can you show us your updated/final yaml for this?

I’m happy to… but it’s rather large :thinking:
image

Even uploading only the section in the image above is well over double what the forum will let me paste.

This code covers just the Blue living room media player, and the left-hand Dining controls below it.

      - type: custom:stack-in-card
        mode: vertical
        card_mod:
          style: |
            ha-card {
              background-color: royalblue
            }
        cards:
          - type: custom:layout-card
            layout_type: custom:grid-layout
            layout:
              grid-template-columns: 85% 15%
            cards:
              - type: custom:mini-media-player
                entity: media_player.living
                info: short
                artwork: cover
                scale: 0.8
                hide:
                  volume: true
                  icon: true
                  power: true
                  progress: true
              - type: custom:state-switch
                entity: template
                template: >-
                  {% if is_state('input_select.roon_source','Living') %} src {%
                  else %} dest {% endif %}
                states:
                  src:
                    type: custom:button-card
                    show_name: false
                    show_state: false
                    size: 90%
                    styles:
                      card:
                        - height: 65px
                        - background-color: royalblue
                    icon: mdi:speaker-message
                  dest:
                    type: custom:button-card
                    entity: input_boolean.grouped_living
                    show_name: false
                    show_state: false
                    size: 100%
                    styles:
                      card:
                        - height: 65px
                        - background-color: royalblue
                    state:
                      - icon: mdi:toggle-switch
                        value: 'on'
                        styles:
                          icon:
                            - color: >
                                [[[   if
                                (states['input_select.roon_source'].state ==
                                'Study')
                                  return "orange";
                                else if
                                (states['input_select.roon_source'].state ==
                                'Lounge')
                                  return "darkorchid";
                                else if
                                (states['input_select.roon_source'].state ==
                                'Living2')
                                  return "teal";
                                else if
                                (states['input_select.roon_source'].state ==
                                'Rumpus')
                                  return "burlywood";
                                else if
                                (states['input_select.roon_source'].state ==
                                'Bedroom')
                                  return "olive";
                                else
                                  return "black";
                                ]]] 
                      - icon: mdi:toggle-switch-off
                        color: white
                        value: 'off'
      - type: horizontal-stack
        cards:
          - type: custom:stack-in-card
            mode: vertical
            card_mod:
              style: |
                ha-card {
                  background-color:
                    {% if state_attr('media_player.denon_avc_x4800h_3', 'source') == 'CD2' %}
                      teal
                    {% elif state_attr('media_player.denon_avc_x4800h_3', 'source') == 'AUX2' %}
                      teal
                    {% elif state_attr('media_player.denon_avc_x4800h_3', 'source') == 'CD' %}
                      royalblue
                    {% else %}
                      
                    {% endif %}
                }
            cards:
              - type: custom:layout-card
                layout_type: custom:grid-layout
                cards:
                  - type: custom:button-card
                    action: none
                    entity: media_player.denon_avc_x4800h_3
                    show_state: true
                    show_name: false
                    show_icon: false
                    show_label: true
                    label: Dining
                    layout: icon_name_state
                    styles:
                      grid:
                        - grid-template-areas: '"l n"'
                        - grid-template-columns: 60% 30%
                        - grid-template-rows: 1fr
                        - font-size: 14px
                      card:
                        - height: 33px
                    state_display: '[[[ return entity.attributes.volume_level ]]]'
                  - type: custom:layout-card
                    layout_type: custom:grid-layout
                    cards:
                      - type: conditional
                        view_layout:
                          grid-area: RPower
                        conditions:
                          - condition: state
                            entity: media_player.denon_avc_x4800h_3
                            state: 'off'
                          - condition: state
                            entity: media_player.denon_avc_x4800h_3
                            state_not: 'on'
                        card:
                          show_name: false
                          show_icon: true
                          size: 100%
                          type: custom:button-card
                          styles:
                            card:
                              - height: 33px
                              - padding: 0
                              - background-color: teal
                          tap_action:
                            action: call-service
                            service: script.denon_on_to_input
                            data:
                              media_player: media_player.denon_avc_x4800h_3
                              parameter1: Z3ON
                              parameter2: Z3AUX2
                          icon: mdi:power
                          icon_height: 35px
                      - type: custom:state-switch
                        view_layout:
                          grid-area: LPower
                        entity: template
                        template: >-
                          {% if states("media_player.denon_avc_x4800h_3") in
                          ["off"] %}
                            pwr
                          {% elif state_attr('media_player.denon_avc_x4800h_3',
                          'source') == 'CD2' %}
                            cd2
                          {% elif state_attr('media_player.denon_avc_x4800h_3',
                          'source') ==  'CD' %}
                            cd
                          {% else %} 

                          {% endif %}
                        states:
                          cd:
                            type: custom:button-card
                            size: 100%
                            styles:
                              card:
                                - height: 33px
                                - padding: 0
                                - background-color: teal
                              icon:
                                - height: 25px
                            tap_action:
                              action: call-service
                              service: denonavr.get_command
                              data:
                                entity_id: media_player.denon_avc_x4800h_3
                                command: /goform/formiPhoneAppDirect.xml?Z3AUX2
                            icon: mdi:audio-input-rca
                            icon_height: 35px
                          cd2:
                            type: custom:button-card
                            size: 100%
                            styles:
                              card:
                                - height: 33px
                                - padding: 0
                                - background-color: royalblue
                              icon:
                                - height: 25px
                            tap_action:
                              action: call-service
                              service: denonavr.get_command
                              data:
                                entity_id: media_player.denon_avc_x4800h_3
                                command: /goform/formiPhoneAppDirect.xml?Z3CD
                            icon: mdi:audio-input-rca
                            icon_height: 35px
                          pwr:
                            type: custom:button-card
                            show_name: false
                            show_icon: true
                            size: 100%
                            styles:
                              card:
                                - height: 33px
                                - padding: 0
                                - background-color: royalblue
                            tap_action:
                              action: call-service
                              service: script.denon_on_to_input
                              data:
                                media_player: media_player.denon_avc_x4800h_3
                                parameter1: Z3ON
                                parameter2: Z3CD
                            icon: mdi:power
                            icon_height: 35px
                      - type: conditional
                        view_layout:
                          grid-area: RPower
                        conditions:
                          - condition: state
                            entity: media_player.denon_avc_x4800h_3
                            state: 'on'
                          - condition: state
                            entity: media_player.denon_avc_x4800h_3
                            state_not: 'off'
                        card:
                          show_name: false
                          show_icon: true
                          type: custom:button-card
                          styles:
                            card:
                              - height: 33px
                              - padding: 0
                          tap_action:
                            action: call-service
                            service: denonavr.get_command
                            data:
                              entity_id: media_player.denon_avc_x4800h_3
                              command: /goform/formiPhoneAppDirect.xml?Z3OFF
                          icon: mdi:power
                          icon_height: 35px
                    layout:
                      grid-template-columns: 34% 66%
                      grid-template-rows: auto
                      padding: 0px
                      margin: 0px -4px 0px -4px
                      grid-template-areas: |
                        "LPower RPower"
                  - type: horizontal-stack
                    cards:
                      - show_name: false
                        show_icon: true
                        size: 100%
                        type: custom:button-card
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: media_player.volume_set
                          data:
                            volume_level: 0.2
                          target:
                            entity_id: media_player.denon_avc_x4800h_3
                        icon: mdi:volume-low
                        icon_height: 25px
                        name: '20'
                        show_state: false
                      - show_name: false
                        show_icon: true
                        size: 100%
                        type: custom:button-card
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: media_player.volume_set
                          data:
                            volume_level: 0.3
                          target:
                            entity_id: media_player.denon_avc_x4800h_3
                        icon: mdi:volume-medium
                        icon_height: 25px
                        name: '30'
                        show_state: false
                      - show_name: false
                        show_icon: true
                        size: 100%
                        type: custom:button-card
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: media_player.volume_set
                          data:
                            volume_level: 0.4
                          target:
                            entity_id: media_player.denon_avc_x4800h_3
                        icon: mdi:volume-high
                        icon_height: 25px
                        name: '40'
                        show_state: false
                  - type: horizontal-stack
                    cards:
                      - type: custom:button-card
                        show_icon: true
                        size: 100%
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: script.media_mute_toggle
                          data:
                            media_player: media_player.denon_avc_x4800h_3
                        icon: mdi:volume-mute
                        icon_height: 25px
                        name: '0'
                        show_name: false
                      - show_name: false
                        show_icon: true
                        size: 100%
                        type: custom:button-card
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: script.volume_change_step
                          data:
                            media_player: media_player.denon_avc_x4800h_3
                            increment: -0.05
                        icon: mdi:volume-minus
                        icon_height: 25px
                        name: '-5'
                      - show_name: false
                        show_icon: true
                        size: 100%
                        type: custom:button-card
                        styles:
                          card:
                            - height: 30px
                            - padding: 0
                        tap_action:
                          action: call-service
                          service: script.volume_change_step
                          data:
                            media_player: media_player.denon_avc_x4800h_3
                            increment: 0.05
                        icon: mdi:volume-plus
                        icon_height: 25px
                        name: '+5'

I’ve found something I want to do with the roon HA module, but can’t (afaik).

Sleep timer. In the GUI I can set a sleep timer, but this isn’t accessible in HA from what I can tell, nor is it an available option in the Ropieee display endpoint I use in the bedroom.

Anyone know a way to turn on a zone sleep timer?

I don’t think the roon api exposes that.

I’ve never used the sleep timers in roon, but if you just want to turn the music offer after a period of time that’s quite easy in HA automation. Happy to help if needed.

I put a wake up alarm together in HA - but rarely use it!

Thanks Greg,

I can definitely do a separate timer automation but was hoping I could do something more flexible like the UI provides. I think I’ll need to get a spare Hue dimmer so I can control the automation from the bedside.

Cheers,
James

I use a mix of hue dimmers and Ikea Symfonisk remotes (SYMFONISK gen 2, sound remote - IKEA).

The Ikea are less expensive. I now have one in most of my zones to control play/pause & volume. There are a couple of extra buttons which I use for a radio station and ‘all off’, but you could have two buttons for your sleep timer. Dedicating one to each zone makes life easier.

You have to get Zigbee going in HA, I’ve now settled on ZHA which seems good.

Roon’s sleep timer doesn’t seem complicated - so I think you should be able to reproduce what you use in HA. https://help.roonlabs.com/portal/en/kb/articles/sleep-timer#Enabling_the_Sleep_Timer

We’re getting close to full support of the Hue Tap Dial in ZHA! We’ve had it in Z2MQTT for a while, but not for ZHA. I have a quite excellent blueprint ready to go to support it. The dial does velocity-sensitive volume control, three of the buttons to play/pause, prev track, next track. All buttons can be customized for long press, double press, triple press, etc.

Hopefully the ZHA changes will be out in next month’s update if we can get the code review guys to finish the review!

Also, someone on this forum recommend this device, which I’ve switched to in preference to a USB Zigbee antenna:

It works great for me.

I’m already using Hue Tap Dial (and Hue Dimmers) in HA (but directly via the Hue integration since I have no other zigbee). Working perfectly, I just hadn’t planned to use them in this instance since I already have control of the endpoint via the screen with Ropieee.

1 Like