diff options
Diffstat (limited to 'google-muell.py')
-rwxr-xr-x | google-muell.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/google-muell.py b/google-muell.py new file mode 100755 index 0000000..b3652cb --- /dev/null +++ b/google-muell.py @@ -0,0 +1,111 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i python3 -p python3 python36Packages.docopt python36Packages.requests2 python36Packages.google_api_python_client python36Packages.dateutil +""" usage: google-muell [options] + + --esp=HOST esp8266 ip [Default: 192.168.1.23] + --client-secrets=FILE Path to client secrets file (from application) [Default: licht-kalender-secrets.json] + --credential-path=PATH Path to newly generated (or existing) credentials [Default: licht-creds.json] + --sleepval=SEC seconds to sleep [Default: 900] + +you can create the client-secrets by creating a new google application, create +oauth2 token and download it ( url here) + +""" +from docopt import docopt +from fade import calc_chain +import time +from time import sleep +import json +import sys +from datetime import datetime, timedelta +import requests + +import httplib2 +from dateutil.parser import parse +from apiclient import discovery +from oauth2client import client +from oauth2client import tools +from oauth2client.file import Storage +SCOPES = 'https://www.googleapis.com/auth/calendar.readonly' +APPLICATION_NAME = 'licht-kalender-client' + +colormap = { + "8": [ 128,128,128 ], # grey + "9": [ 0,0,0 ], # blue + "11": [ 0,0,0 ],# true red + "4": [ 0,0,0 ], # light red + "3": [ 0,0,0 ], # purple + } + +def get_creds(secrets_file,credential_path): + ''' + provide a cred_dir where the credentials would be stored to + ''' + import argparse + flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() + + store = Storage(credential_path) + credentials = store.get() + if not credentials or credentials.invalid: + flow = client.flow_from_clientsecrets(secrets_file, SCOPES) + flow.user_agent = APPLICATION_NAME + credentials = tools.run_flow(flow, store, flags) + print('Storing new credentials to ' + credential_path) + else: + print('Using existing valid credentials ' + credential_path) + + return credentials + +def next_date(credentials): + http = credentials.authorize(httplib2.Http()) + service = discovery.build('calendar', 'v3', http=http) + + #page_token = None + #while True: + # calendar_list = service.calendarList().list( + # pageToken=page_token).execute() + # for calendar_list_entry in calendar_list['items']: + # print("{} - {}".format(calendar_list_entry['id'],calendar_list_entry['summary'])) + # page_token = calendar_list.get('nextPageToken') + # if not page_token: + # break + + + now = datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time + print('Getting the upcoming 10 events') + eventsResult = service.events().list( + calendarId='o56ig681gla2a5vupm4vgiv7tc@group.calendar.google.com', timeMin=now, maxResults=10, singleEvents=True, + orderBy='startTime').execute() + events = eventsResult.get('items', []) + for event in events: + start = parse(event['start'].get('dateTime', event['start'].get('date'))) + if 'dateTime' in event['end']: + end = parse(event['end']['dateTime']) + else: + end = parse(event['end']['date']) + timedelta(days=1) - timedelta(seconds=1) + + if start < datetime.now() < end: + print("event is active now") + print(start,end, event) + + + pass + + +def to_payload(arr): + return {"r":arr[0],"g":arr[1],"b":arr[2]} + +def main(): + args = docopt(__doc__) + client_secrets = args['--client-secrets'] + sleepval = float(args["--sleepval"]) + esp = args["--esp"] + cred_path = args["--credential-path"] + creds = get_creds(client_secrets,cred_path) + while True: + t = next_date(creds) + requests.get("http://{}/color".format(esp),params=to_payload(t)) + sleep(sleepval) + +if __name__ == "__main__": + main() |