Skip to content

Instantly share code, notes, and snippets.

@PilaScat
Forked from Ante987/speaker_volume.yaml
Last active March 3, 2026 12:42
Show Gist options
  • Select an option

  • Save PilaScat/a66251ed04d513642fb18cd99160ec0e to your computer and use it in GitHub Desktop.

Select an option

Save PilaScat/a66251ed04d513642fb18cd99160ec0e to your computer and use it in GitHub Desktop.
Automatically adjusts the volume of selected media players based on the time of day.
blueprint:
name: Set Speaker Volume Based on Time of Day
description: >
Automatically adjusts the volume of selected media players
based on the time of day. Players currently playing are skipped
to avoid interrupting active media.
domain: automation
input:
media_players:
name: Media Players
description: Select the media players to control
selector:
entity:
domain: media_player
multiple: true
daytime_starts:
name: Daytime starts
description: Time when daytime volume should be applied
default: "07:00:00"
selector:
time:
daytime_ends:
name: Nighttime starts
description: Time when nighttime volume should be applied
default: "20:00:00"
selector:
time:
volume_day:
name: Daytime volume
description: Volume level during the day
default: 0.5
selector:
number:
min: 0.0
max: 1.0
step: 0.05
mode: slider
volume_night:
name: Nighttime volume
description: Volume level during the night
default: 0.1
selector:
number:
min: 0.0
max: 1.0
step: 0.05
mode: slider
variables:
players_input: !input media_players
active_players: >
{{ players_input
| select('is_state', 'playing')
| list }}
idle_players: >
{{ players_input
| reject('is_state', 'playing')
| list }}
trigger:
- platform: time
at: !input daytime_starts
- platform: time
at: !input daytime_ends
condition:
- condition: template
value_template: "{{ idle_players | count > 0 }}"
action:
- choose:
- conditions:
- condition: time
after: !input daytime_starts
before: !input daytime_ends
sequence:
- service: media_player.volume_set
data:
volume_level: !input volume_day
target:
entity_id: "{{ idle_players }}"
default:
- service: media_player.volume_set
data:
volume_level: !input volume_night
target:
entity_id: "{{ idle_players }}"
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment