-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsolaredge2graphite.py
More file actions
executable file
·79 lines (73 loc) · 2.72 KB
/
Copy pathsolaredge2graphite.py
File metadata and controls
executable file
·79 lines (73 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python3
#
# Script: solaredge2graphite.py
#
# Description: Grab PV lifetime energy & current power output from
# SolarEdge portal, send to Graphite
#
# Requires: Solaredge API key & site ID; see libraries below
#
# Author: Ade Rixon
#
# History:
# 201181019 Created - ajr
#
import solaredge
import graphyte
import json
import time
import argparse
import sys
# defaults; set these or use the command line options to override
graphite_host = 'graphite'
graphite_port = 2003
graphite_pre = 'solar.pv'
apikey = 'SOLAREDGE_API_KEY'
site_id = 'XXXXXX'
time_pattern = '%Y-%m-%d %H:%M:%S'
parser = argparse.ArgumentParser(description='Reads current & total output from SolarEdge portal and submits to Graphite')
parser.add_argument('-a', '--apikey', dest='apikey', default=None, help='SolarEdge API key')
parser.add_argument('-s', '--site', dest='site_id', default=None, help='SolarEdge site ID')
parser.add_argument('-g', '--graphitehost', dest='graphite_host', default=None, help='Graphite hostname')
parser.add_argument('-p', '--graphiteprefix', dest='graphite_pre', default=None, help='Graphite prefix')
parser.add_argument('--graphiteport', dest='graphite_port', default=None, help='Graphite line receiver port')
parser.add_argument('-n', '--null', action='store_true', default=False, help='no action (send zero)')
parser.add_argument('-d', '--debug', action='store_true', default=False, help='debug (print metrics only)')
args = parser.parse_args()
if args.graphite_host:
graphite_host = args.graphite_host
if args.graphite_pre:
graphite_pre = args.graphite_pre
if args.graphite_port:
graphite_port = args.graphite_port
if args.apikey:
apikey = args.apikey
if args.site_id:
site_id = args.site_id
r = None
if args.null:
timestamp = int(round(time.time()))
energy = float('nan')
power = 0
else:
s = solaredge.Solaredge(apikey)
try:
r = s.get_overview(site_id)
except:
print("Unexpected error accessing SolarEdge portal:", sys.exc_info()[0])
raise
o = r["overview"]
timestamp = int(time.mktime(time.strptime(o["lastUpdateTime"], time_pattern)))
energy = o["lifeTimeData"]["energy"]
power = o["currentPower"]["power"]
# DEBUG:
if args.debug:
if r is not None:
print(json.dumps(r, indent=4, separators=(',', ': ')))
print("Update time: " + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)))
print(graphite_pre + ".lifetime_energy " + str(energy) + ' ' + str(timestamp))
print(graphite_pre + ".current_power " + str(power) + ' ' + str(timestamp))
else:
graphyte.init(graphite_host, prefix=graphite_pre)
graphyte.send('lifetime_energy', energy, timestamp=timestamp)
graphyte.send('current_power', power, timestamp=timestamp)