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.
thx so much! no rush at all
appreciate it!
z
Hey @zeltak_b, sorry for the delay… #life
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:
- Denon AVR Network Receivers - Home Assistant (home-assistant.io) (for controlling my newer amp)
- Logitech Harmony Hub - Home Assistant (home-assistant.io) (for controlling some of the older devices via IR)
- Philips Hue - Home Assistant (home-assistant.io) (not relevant to the HA dashboard at all… but great for adding physical volume buttons)
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):
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)
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)
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
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.