Skip to content

Instantly share code, notes, and snippets.

@andiwand
Last active November 25, 2018 13:49
Show Gist options
  • Save andiwand/4ca0b00303f9be4fc9187f559e24611b to your computer and use it in GitHub Desktop.
Save andiwand/4ca0b00303f9be4fc9187f559e24611b to your computer and use it in GitHub Desktop.
Backup time vs power data from suntrol-portal.com
#!/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