spotframework/alarm.py

78 lines
2.3 KiB
Python

from spotframework.net.user import NetworkUser
from spotframework.net.network import Network
import spotframework.net.const as const
import spotframework.io.json as json
import spotframework.util.monthstrings as month
import os
import datetime
import logging
logger = logging.getLogger('spotframework')
file_log_format = '%(asctime)s %(levelname)s %(name)s:%(funcName)s - %(message)s'
file_handler = logging.FileHandler(".spot/alarm.log")
file_formatter = logging.Formatter(file_log_format)
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
stream_log_format = '%(levelname)s %(name)s:%(funcName)s - %(message)s'
stream_formatter = logging.Formatter(stream_log_format)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(stream_formatter)
logger.addHandler(stream_handler)
def check_phone():
response = os.system("ping -c 1 -w5 " + os.environ['PHONEIP'] + " > /dev/null 2>&1")
logger.info('checking for phone')
if response == 0:
return True
else:
return False
if __name__ == '__main__':
try:
network = Network(NetworkUser(client_id=os.environ['SPOT_CLIENT'],
client_secret=os.environ['SPOT_SECRET'],
refresh_token=os.environ['SPOT_REFRESH'])).refresh_access_token()
found = False
for i in range(0, 36):
if check_phone():
found = True
break
if found:
if os.path.exists(os.path.join(const.config_path, 'config.json')):
data = json.load_json(os.path.join(const.config_path, 'config.json'))
date = datetime.datetime.now()
playlists = network.user_playlists()
if data['alarm']['use_month']:
playlisturi = next((i.uri for i in playlists if i.name == month.get_this_month()),
data['alarm']['uri'])
else:
playlisturi = data['alarm']['uri']
network.play(uri=playlisturi, deviceid=network.map_device_name_to_id(data['alarm']['device_name']))
network.shuffle(True)
network.volume(data['alarm']['volume'])
network.next()
except Exception as e:
logger.exception('exception occured')