From 8727451b41b057d36e76cecdb543015c0f50b304 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 6 Dec 2017 13:46:14 +0100 Subject: update --- google-muell.py | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ muelldata.json | 42 ++++++++++++++++----- 2 files changed, 143 insertions(+), 10 deletions(-) create mode 100755 google-muell.py 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() diff --git a/muelldata.json b/muelldata.json index c87b8a9..807581a 100644 --- a/muelldata.json +++ b/muelldata.json @@ -1,5 +1,5 @@ -{ - "gelber_sack": [ +[ + {"gelber_sack": [ "2017-01-02", "2017-01-23", "2017-02-13", @@ -19,12 +19,34 @@ "2017-12-04", "2017-12-23", "2018-01-15" - ], - "papiermuell": [ - ], - "restmuell": [ - ], - "kehrwoche": [ + ]}, + {"orchis": [ + "2017-05-22", + "2017-06-05", + "2017-06-19", + "2017-07-03", + "2017-07-17", + "2017-07-31", + "2017-08-14", + "2017-08-28", + "2017-09-11", + "2017-09-25", + "2017-10-09", + "2017-10-23", + "2017-11-06", + "2017-11-20", + "2017-12-04", + "2017-12-18", + "2018-01-01", + "2018-01-15", + "2018-01-29" + ]}, + + {"papiermuell": [ + ]}, + {"restmuell": [ + ]}, + {"kehrwoche": [ "2017-05-21", "2017-05-22", "2017-06-11", @@ -46,5 +68,5 @@ "2017-12-08", "2017-12-28", "2017-12-29" - ] -} + ]} +] -- cgit v1.2.3