Last active
November 25, 2018 13:49
-
-
Save andiwand/4ca0b00303f9be4fc9187f559e24611b to your computer and use it in GitHub Desktop.
Backup time vs power data from suntrol-portal.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import argparse | |
import datetime | |
import requests | |
import pandas | |
def date(s): | |
try: | |
return datetime.datetime.strptime(s, '%Y-%m-%d') | |
except ValueError: | |
msg = "Not a valid date: '{0}'.".format(s) | |
raise argparse.ArgumentTypeError(msg) | |
def daterange(start, end): | |
for n in range(int ((end - start).days)): | |
yield start + datetime.timedelta(n) | |
def arguments(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument('plant', type=int) | |
parser.add_argument('accesstoken', type=str) | |
parser.add_argument('date_from', type=date, help='to date (YYYY-MM-DD)') | |
parser.add_argument('date_to', type=date, help='from date (YYYY-MM-DD)') | |
parser.add_argument('path', type=str, help='path to output file') | |
return parser.parse_args() | |
def configuration(args): | |
return { | |
'plant': args.plant, | |
'accesstoken': args.accesstoken, | |
'from': args.date_from, | |
'to': args.date_to, | |
'path': args.path, | |
} | |
def fetch(plant, accesstoken, dt): | |
s = requests.Session() | |
url = 'http://api.suntrol-portal.com/en/plant/%d/output/%d/%d/%d/data/accesstoken/%s' % (plant, dt.year, dt.month, dt.day, accesstoken) | |
r = s.get(url) | |
if not r: | |
return None | |
return r.json() | |
def extract(dt, data): | |
result = [] | |
for d in data['data']: | |
time = datetime.datetime.strptime(d['label'], '%I:%M %p') | |
dt = dt.replace(hour=time.hour, minute=time.minute) | |
unixtime = int((dt - datetime.datetime(1970, 1, 1)).total_seconds()) | |
line = {'time': unixtime, 'power': d['value'] * 1E3} | |
result.append(line) | |
return result | |
def main(): | |
args = arguments() | |
config = configuration(args) | |
all_data = [] | |
for dt in daterange(config['from'], config['to']): | |
print(dt) | |
data = fetch(config['plant'], config['accesstoken'], dt) | |
if data is None: | |
print('cannot fetch %s' % str(d)) | |
continue | |
data = extract(dt, data) | |
all_data.extend(data) | |
all_data = pandas.DataFrame(all_data) | |
all_data.to_csv(config['path'], index=False, columns=['time', 'power']) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment