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