Files
ad-nix/apps/speakers/speakers.py
2024-08-27 19:14:26 -05:00

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'],
)