The latest source code is here.
import requests import json import datetime import time # Set this to the IP address of your inverter host = "192.168.0.112" # number of seconds between samples, set to zero to run once and exit sample_seconds = 60 * 5 def main(): print("started") while True: try: watts = watts_generated() now = time.strftime("%H:%M:%S") line = "%s\t%s\n" % (now, watts) # print(line) write_to_logfile(line) except requests.exceptions.ConnectTimeout: print("Connect timeout at %s" % time.strftime("%H:%M:%S")) if sample_seconds > 0: time.sleep(sample_seconds) else: return def write_to_logfile(line): today = time.strftime("%Y_%m_%d") file_name = today + ".csv" out_file = open(file_name, "a") out_file.write(line) out_file.close() def watts_generated(): url = "http://" + host + "/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System" r = requests.get(url, timeout=2) json_data = r.json() result = json_data["Body"]["Data"]["PAC"]["Values"]["1"] return result if __name__ == "__main__": main()
Note that I'm assuming Python 3 and you'll probably need to install the requests module. The program outputs a single file for each day.
Here's some code to draw a pretty graph.
""" Simple code to draw a graph of a day of power. Requires matplotlib On Fedora Linux: sudo dnf install python3-matplotlib """ import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.dates as mdates import csv import time import datetime today = time.strftime("%Y_%m_%d") INFILENAME = today + '.csv' def main(): data_reader = csv.reader(open(INFILENAME,'r'), delimiter='\t') y = [] x = [] for row in data_reader: if len(row) > 1: timeval = row[0] dt = datetime.datetime.strptime(timeval, "%H:%M:%S") print("timeval = %s -> %s" % (timeval, dt)) x.append(mdates.date2num(dt)) watts = float(row[1]) y.append(watts) fig, ax = plt.subplots() ax.plot(x,y) ax.xaxis_date() my_fmt = mdates.DateFormatter('%H:%M') ax.xaxis.set_major_formatter(my_fmt) plt.ylabel("Watts") plt.xlabel("Time") plt.show() plt.savefig('%s_graph' % today) if __name__ == "__main__": main()
Finding the IP address of your inverter is pretty easy if you have a network scanner such as nmap. I use LanScan on macOS and the Fronius comes up as having a network interface from "u-blox AG".
No comments:
Post a Comment