Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Retrieving SolarEdge solar panel generation data from the API using Python
import pandas as pd
import solaredge
import time
s = solaredge.Solaredge("YOUR-API-KEY")
site_id = YOUR-SITE-ID
# Edit this date range as you see fit
# If querying at the maximum resolution of 15 minute intervals, the API is limited to queries of a month at a time
# This script queries one day at a time, with a one-second pause per day that is polite but probably not necessary
day_list = pd.date_range(start="2019-12-01",end="2020-12-01")
day_list = day_list.strftime('%Y-%m-%d')
energy_df_list = []
for day in day_list:
temp = s.get_energy_details(site_id,day+' 00:00:00',day + ' 23:59:59',time_unit='QUARTER_OF_AN_HOUR')
temp_df = pd.DataFrame(temp['energyDetails']['meters'][0]['values'])
energy_df_list.append(temp_df)
time.sleep(1)
power_df_list = []
for day in day_list:
temp = s.get_power_details(site_id,day+' 00:00:00',day + ' 23:59:59')
temp_df = pd.DataFrame(temp['powerDetails']['meters'][0]['values'])
power_df_list.append(temp_df)
time.sleep(1)
energy_df = pd.concat(energy_df_list)
energy_df.columns = ['date','energy']
power_df = pd.concat(power_df_list)
power_df.columns = ['date','power']
merged = pd.merge(energy_df,power_df)
merged.to_csv("C:/merged_solar_data.csv",index=False)
@Conet1502

This comment has been minimized.

Copy link

@Conet1502 Conet1502 commented Mar 27, 2021

What about if you want to pull the temperature and current data?

@sfirke

This comment has been minimized.

Copy link
Owner Author

@sfirke sfirke commented Mar 27, 2021

@Conet1502

This comment has been minimized.

Copy link

@Conet1502 Conet1502 commented Mar 28, 2021

add this to the solaredge.py file

def get_data(self, site_id, short_serial ,start_time, end_time):
    url = urljoin(BASEURL2, site_id, short_serial, "data")
    params = {
        'startTime': start_time,
        'endTime': end_time,
		'api_key': self.token,
    }
    r = requests.get(url,params)
    r.raise_for_status()
    return r.json()

and this to the example solaredge_retrieval.py

Line1Data_df_list = []

for day in day_list:
temp = s.get_data(site_id,short_serial,day+' 00:00:00',day + ' 23:59:59')

#temp_df = pd.DataFrame(temp['data']['telemetries'])
#temp_df = temp_df.drop(['L1Data'], axis=1)
temp = s.get_data(site_id,short_serial,day+' 00:00:00',day +  ' 23:59:59')
temp_df1 = pd.json_normalize(temp['data']['telemetries'])
Line1Data_df_list.append(temp_df1)
#time.sleep(1)
@Conet1502

This comment has been minimized.

Copy link

@Conet1502 Conet1502 commented Mar 28, 2021

Also add this to the solaredge.py

BASEURL2 = 'https://monitoringapi.solaredge.com/equipment'

@sfirke

This comment has been minimized.

Copy link
Owner Author

@sfirke sfirke commented Apr 1, 2021

Thanks for the additions! I moved this gist to a repo: https://github.com/sfirke/solaredge/ If you're up for it, feel free to send those changes as a pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment