summaryrefslogtreecommitdiffstats
path: root/ampel/google-muell.py
diff options
context:
space:
mode:
Diffstat (limited to 'ampel/google-muell.py')
-rwxr-xr-xampel/google-muell.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/ampel/google-muell.py b/ampel/google-muell.py
new file mode 100755
index 0000000..b3652cb
--- /dev/null
+++ b/ampel/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()