speaker control
This commit is contained in:
156
apps/speakers/speakers.py
Normal file
156
apps/speakers/speakers.py
Normal 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'
|
||||
]
|
||||
)
|
||||
30
apps/speakers/speakers.yaml
Normal file
30
apps/speakers/speakers.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
speakers:
|
||||
module: speakers
|
||||
class: Speakers
|
||||
states:
|
||||
- time: '05:00:00'
|
||||
sets:
|
||||
- entity_id:
|
||||
- media_player.desk_speaker
|
||||
- media_player.kitchen_speaker
|
||||
- media_player.bathroom_speaker
|
||||
volume: 0.7
|
||||
- entity_id: media_player.bedroom_speaker
|
||||
volume: 0.7
|
||||
- entity_id: media_player.patio_speaker
|
||||
volume: 0.0
|
||||
- elevation: 0
|
||||
|
||||
# - service: media_player.volume_set
|
||||
# data:
|
||||
# volume_level: 0.2
|
||||
# target:
|
||||
# entity_id:
|
||||
# - media_player.desk_speaker
|
||||
# - media_player.kitchen_speaker
|
||||
# - media_player.bathroom_speaker
|
||||
# - service: media_player.volume_set
|
||||
# data:
|
||||
# volume_level: 0.3
|
||||
# target:
|
||||
# entity_id: media_player.bedroom_speaker
|
||||
Reference in New Issue
Block a user