I crafted up this set of buttons using paper-buttons-row
. They can increment or decrement the volume of my receiver by 1 or 5 dB, or mute / unmute it.
type: entities
entities:
- entity: input_number.livingroom_amp_volume
name: Volume
- type: custom:paper-buttons-row
buttons:
- icon: mdi:numeric-5-box-outline
tooltip: Volume down by 5
tap_action:
action: call-service
service: script.change_volume
service_data:
entity_id: input_number.livingroom_amp_volume
increment: -5
- icon: mdi:numeric-1-box-outline
tooltip: Volume down by 1
tap_action:
action: call-service
service: script.change_volume
service_data:
entity_id: input_number.livingroom_amp_volume
increment: -1
- icon: >-
{{ iif(is_state_attr('media_player.livingroom_amp', 'is_volume_muted',
true), 'mdi:volume-high', 'mdi:volume-mute') }}
tooltip: Mute / Unmute
tap_action:
action: call-service
service: script.toggle_mute
service_data:
entity_id: media_player.livingroom_amp
- icon: mdi:numeric-1-box
tooltip: Volume up by 1
tap_action:
action: call-service
service: script.change_volume
service_data:
entity_id: input_number.livingroom_amp_volume
increment: 1
- icon: mdi:numeric-5-box
tooltip: Volume up by 5
tap_action:
action: call-service
service: script.change_volume
service_data:
entity_id: input_number.livingroom_amp_volume
increment: 5
And the server-side scripts. I had to use scripts because I couldn’t get the template parameters to work properly with the paper-buttons-row
card.
script:
toggle_mute:
alias: Toggle Mute
mode: queued
icon: mdi:volume-mute
fields:
entity_id:
name: Media Player
description: A media_player entity that can be muted and unmuted
required: true
selector:
entity:
domain: media_player
sequence:
- service: media_player.volume_mute
target:
entity_id: "{{ entity_id }}"
data:
is_volume_muted: "{{ not is_state_attr(entity_id, 'is_volume_muted', true) }}"
change_volume:
alias: Change Volume
mode: queued
icon: mdi:volume-high
fields:
entity_id:
name: Volume input_number
description: An input_number entity that corresponds to the volume of a media_player
required: true
selector:
entity:
domain: input_number
increment:
name: Increment
description: A integral value by which to adjust the volume
required: false
default: 1
selector:
number:
min: -10
max: 10
step: 1
unit_of_measurement: dB
mode: slider
sequence:
- service: input_number.set_value
target:
entity_id: "{{ entity_id }}"
data:
value: "{{ min(20, max(-80, (states(entity_id) | int) + (increment |int))) }}"