speaker control

This commit is contained in:
John Lancaster
2023-07-17 17:35:30 -05:00
parent 61ae9f1149
commit c621b8d31b
2 changed files with 186 additions and 0 deletions

156
apps/speakers/speakers.py Normal file
View File

@@ -0,0 +1,156 @@
from datetime import datetime, time
from appdaemon.plugins.hass.hassapi import Hass
from rich import print
class Speakers(Hass):
def initialize(self):
self.listen_state(
callback=self.set_volume,
entity_id='media_player.nest_minis',
new='playing'
)
self.set_volume()
# self.listen_state(
# callback=self.state_test,
# entity_id='media_player.nest_minis',
# # new=lambda n: n == 'playing',
# attribute='all'
# )
@property
def solar_elevation(self) -> float:
return self.AD.sched.location.solar_elevation(self.get_now())
def state_test(self, entity=None, attribute=None, old=None, new=None, kwargs=None):
try:
print(new.keys())
self.log(new.keys())
except:
self.log('Error')
# for k, v in new.items():
# self.log(f'{k}: {v}')
# self.log(new['state'])
# self.log(entity)
# self.log(f'New state:\n{type(new)}')
# self.log(new['entity_id'])
def set_volume(self, entity=None, attribute=None, old=None, new=None, kwargs=None):
self.log('Callback - state changed to playing')
if old == 'paused':
self.log(f'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'
]
)