@@ -144,7 +144,58 @@ def format_nwp_data(df: pd.DataFrame, nwp_source:str, site: PVSite):
144
144
)
145
145
return data_xr
146
146
147
- def process_pv_data (live_generation_kw : Optional [pd .DataFrame ], ts : pd .Timestamp , site : PVSite ) -> xr .Dataset :
147
+ def fetch_enphase_data () -> Optional [pd .DataFrame ]:
148
+ system_id = os .getenv ('ENPHASE_SYSTEM_ID' )
149
+ if not system_id :
150
+ print ("Error: Enphase inverter ID is not provided in the environment variables." )
151
+ return None
152
+ return get_enphase_data (system_id )
153
+
154
+ def fetch_solis_data () -> Optional [pd .DataFrame ]:
155
+ try :
156
+ return asyncio .run (get_solis_data ())
157
+ except Exception as e :
158
+ print (f"Error retrieving Solis data: { str (e )} " )
159
+ return None
160
+
161
+ def fetch_givenergy_data () -> Optional [pd .DataFrame ]:
162
+ try :
163
+ return get_givenergy_data ()
164
+ except Exception as e :
165
+ print (f"Error retrieving GivEnergy data: { str (e )} " )
166
+ return None
167
+
168
+ def fetch_solarman_data () -> pd .DataFrame :
169
+ try :
170
+ end_date = datetime .now ()
171
+ start_date = end_date - timedelta (weeks = 1 )
172
+ solarman_data = get_solarman_data (start_date , end_date )
173
+
174
+ # Filter out rows with null power_kw values
175
+ valid_data = solarman_data .dropna (subset = ['power_kw' ])
176
+
177
+ if valid_data .empty :
178
+ print ("No valid Solarman data found." )
179
+ return pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
180
+
181
+ return valid_data
182
+ except Exception as e :
183
+ print (f"Error retrieving Solarman data: { str (e )} " )
184
+ return pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
185
+
186
+ def fetch_live_generation_data (inverter_type : str ) -> Optional [pd .DataFrame ]:
187
+ if inverter_type == 'enphase' :
188
+ return fetch_enphase_data ()
189
+ elif inverter_type == 'solis' :
190
+ return fetch_solis_data ()
191
+ elif inverter_type == 'givenergy' :
192
+ return fetch_givenergy_data ()
193
+ elif inverter_type == 'solarman' :
194
+ return fetch_solarman_data ()
195
+ else :
196
+ return pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
197
+
198
+ def process_pv_data (live_generation_kw : Optional [pd .DataFrame ], ts : pd .Timestamp , site : 'PVSite' ) -> xr .Dataset :
148
199
"""
149
200
Process PV data and create an xarray Dataset.
150
201
@@ -180,53 +231,16 @@ def process_pv_data(live_generation_kw: Optional[pd.DataFrame], ts: pd.Timestamp
180
231
181
232
return da
182
233
183
- def make_pv_data (site : PVSite , ts : pd .Timestamp ) -> xr .Dataset :
234
+ def make_pv_data (site : ' PVSite' , ts : pd .Timestamp ) -> xr .Dataset :
184
235
"""
185
236
Make PV data by combining live data from various inverters.
186
237
187
238
:param site: the PV site
188
239
:param ts: the timestamp of the site
189
240
:return: The combined PV dataset in xarray form
190
241
"""
191
- live_generation_kw = None
192
-
193
- if site .inverter_type == 'enphase' :
194
- system_id = os .getenv ('ENPHASE_SYSTEM_ID' )
195
- if system_id :
196
- live_generation_kw = get_enphase_data (system_id )
197
- else :
198
- print ("Error: Enphase inverter ID is not provided in the environment variables." )
199
- elif site .inverter_type == 'solis' :
200
- live_generation_kw = asyncio .run (get_solis_data ())
201
- if live_generation_kw is None :
202
- print ("Error: Failed to retrieve Solis inverter data." )
203
- elif site .inverter_type == 'givenergy' :
204
- try :
205
- live_generation_kw = get_givenergy_data ()
206
- except Exception as e :
207
- print (f"Error retrieving GivEnergy data: { str (e )} " )
208
- elif site .inverter_type == 'solarman' :
209
- try :
210
- end_date = datetime .now ()
211
- start_date = end_date - timedelta (weeks = 1 )
212
- solarman_data = get_solarman_data (start_date , end_date )
213
-
214
- # Filter out rows with null power_kw values
215
- valid_data = solarman_data .dropna (subset = ['power_kw' ])
216
-
217
- if not valid_data .empty :
218
- # Use all valid data points
219
- live_generation_kw = valid_data
220
- else :
221
- print ("No valid Solarman data found." )
222
- live_generation_kw = pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
223
- except Exception as e :
224
- print (f"Error retrieving Solarman data: { str (e )} " )
225
- live_generation_kw = pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
226
- else :
227
- live_generation_kw = pd .DataFrame (columns = ['timestamp' , 'power_kw' ])
228
-
242
+ live_generation_kw = fetch_live_generation_data (site .inverter_type )
229
243
# Process the PV data
230
244
da = process_pv_data (live_generation_kw , ts , site )
231
245
232
- return da
246
+ return da
0 commit comments