126 lines
3.9 KiB
Python
126 lines
3.9 KiB
Python
from datetime import datetime
|
|
|
|
from appdaemon.plugins.hass.hassapi import Hass
|
|
|
|
|
|
class Speakers(Hass):
|
|
def initialize(self):
|
|
self.listen_state(
|
|
callback=self.set_volume, entity_id='media_player.nest_minis', new='playing'
|
|
)
|
|
self.set_volume()
|
|
|
|
@property
|
|
def solar_elevation(self) -> float:
|
|
return self.AD.sched.location.solar_elevation(self.get_now())
|
|
|
|
def set_volume(self, entity=None, attribute=None, old=None, new=None, **kwargs):
|
|
self.log('Callback - state changed to playing')
|
|
if old == 'paused':
|
|
self.log('Unpaused - skipping volume adjust')
|
|
return
|
|
|
|
if self.get_now().time() < datetime.strptime('03:00', '%H:%M').time():
|
|
self.log('Setting volume - before 10:00am')
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.5,
|
|
entity_id=[
|
|
'media_player.kitchen_speaker',
|
|
'media_player.desk_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.5,
|
|
entity_id=[
|
|
'media_player.bedroom_speaker',
|
|
'media_player.bathroom_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.0,
|
|
entity_id=['media_player.patio_speaker'],
|
|
)
|
|
|
|
elif self.get_now().time() < datetime.strptime('10:00', '%H:%M').time():
|
|
self.log('Setting volume - before 10:00am')
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.7,
|
|
entity_id=[
|
|
'media_player.kitchen_speaker',
|
|
'media_player.desk_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.7,
|
|
entity_id=[
|
|
'media_player.bedroom_speaker',
|
|
'media_player.bathroom_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.0,
|
|
entity_id=['media_player.patio_speaker'],
|
|
)
|
|
|
|
elif self.solar_elevation < 0:
|
|
self.log('Setting volume - sun below horizon')
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.5,
|
|
entity_id=[
|
|
'media_player.kitchen_speaker',
|
|
'media_player.desk_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.3,
|
|
entity_id=[
|
|
'media_player.bedroom_speaker',
|
|
'media_player.bathroom_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.0,
|
|
entity_id=['media_player.patio_speaker'],
|
|
)
|
|
|
|
else:
|
|
self.log('Setting volume - default case')
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.5,
|
|
entity_id=[
|
|
'media_player.kitchen_speaker',
|
|
'media_player.desk_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.5,
|
|
entity_id=[
|
|
'media_player.bedroom_speaker',
|
|
'media_player.bathroom_speaker',
|
|
],
|
|
)
|
|
|
|
self.call_service(
|
|
'media_player/volume_set',
|
|
volume_level=0.0,
|
|
entity_id=['media_player.patio_speaker'],
|
|
)
|