# ---------------------------------- Music --------------------------------------------- URLS = { 'klassik_radio': "http://opml.radiotime.com/Tune.ashx?id=s25028&formats=aac,ogg,mp3", 'spotify_rain': "spotify:playlist:37i9dQZF1DXbcPC6Vvqudd", 'spotify_merkliste': "spotify:playlist:43wCckw3P4WKdy06Rd7eYO", } async def media_player_s(service_name, entity_id, **kwargs): await hass.services.async_call('media_player', service_name, {'entity_id': entity_id, **kwargs}) async def media_player_f(service_name, entity_id, **kwargs): async def f(): hass.services.async_call('media_player', service_name, {'entity_id': entity_id, **kwargs}) return f async def default_music_settings(player, shuffle=False): await media_player_s('shuffle_set', player, shuffle=shuffle) await media_player_s('squeezebox_call_method', player, command="playlist repeat 0") await media_player_s('squeezebox_call_method', player, command="playerpref transitionType 0") async def repeat_one_crossfade(player): await media_player_s('repeat_set', player, repeat='one') await media_player_s('squeezebox_call_method', player, command='playerpref transitionType 1') def playlist_f(name, player, shuffle=False): async def f(): await default_music_settings(player, shuffle=shuffle) await media_player_s('play_media', player, media_content_id=name, media_content_type='music') return f def radio_f(name, player): async def f(): await media_player_s('play_media', player, media_content_id=name, media_content_type='channel') return f def scene_f(name): async def f(): await hass.services.async_call('scene', 'turn_on', {'entity_id': 'scene.' + name}) return f def cover_f(name, entity_id, **kwargs): async def f(): await hass.services.async_call('cover', name, {'entity_id': entity_id, **kwargs}) return f def cover_half_f(entity_id): async def f(): await hass.services.async_call('cover_half', 'set_half', {'entity_id': entity_id}) return f def light_f(name, entity_id, **kwargs): async def f(): await hass.services.async_call('light', name, {'entity_id': entity_id, **kwargs}) return f def default_ir_music_control(player): return { 'key_play': media_player_f("media_play_pause", player), 'key_pause': media_player_f("turn_off", player), 'key_forward': media_player_f('media_next_track', player), 'key_fastforward': media_player_f('media_next_track', player), 'key_previous': media_player_f('media_previous_track', player), 'key_rewind': media_player_f('media_previous_track', player), 'key_volumeup': media_player_f('volume_up', player), 'key_volumedown': media_player_f('volume_down', player), 'key_menu': media_player_f('shuffle_set', player, shuffle=True), 'key_exit': media_player_f('shuffle_set', player, shuffle=False), } # ---------------------------------- Covers -------------------------------------------- def default_ir_cover_control(device_group): return { 'key_up': cover_f('open_cover', device_group), 'key_down': cover_f('close_cover', device_group), 'key_left': cover_half_f(device_group), 'key_right': cover_half_f(device_group), } # ---------------------------------- Lights --------------------------------------------- def default_ir_light_control(device_group): def dim_offset_f(offset): async def f(): await hass.services.async_call('dimmer', 'dim', {'entity_id': device_group, 'offset': offset}) return f return { 'key_channelup': dim_offset_f(+30), 'key_channeldown': dim_offset_f(-30), 'key_menu': dim_offset_f(130), 'key_stop': dim_offset_f(-130), 'key_goto': light_f('turn_off', device_group) } class CyclicCounter: def __init__(self, func, values): self.idx = 0 self.values = values self.func = func def next(self): self.idx = (self.idx + 1) % len(self.values) self.func(self.values[self.idx]) def prev(self): self.idx = (self.idx - 1) % len(self.values) self.func(self.values[self.idx])