Skip to content

Commit af28972

Browse files
[DEV-1853] Add Work Package intervention config (#24)
Signed-off-by: Roberto Marquez <roberto.marquez@zepben.com> Signed-off-by: Marcus Koh <marcus.koh@zepben.com> Co-authored-by: Roberto Marquez <roberto.marquez@zepben.com>
1 parent c2e7efc commit af28972

File tree

2 files changed

+249
-40
lines changed

2 files changed

+249
-40
lines changed

src/zepben/eas/client/eas_client.py

Lines changed: 78 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
212212
"endTime": work_package.load_time.end_time.isoformat(),
213213
} if isinstance(work_package.load_time, TimePeriod) else None,
214214
"qualityAssuranceProcessing": work_package.quality_assurance_processing,
215-
"generatorConfig": {
216-
"model": {
215+
"generatorConfig": work_package.generator_config and {
216+
"model": work_package.generator_config.model and {
217217
"vmPu": work_package.generator_config.model.vm_pu,
218218
"vMinPu": work_package.generator_config.model.vmin_pu,
219219
"vMaxPu": work_package.generator_config.model.vmax_pu,
@@ -232,7 +232,7 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
232232
"maxLoadServiceLineRatio": work_package.generator_config.model.max_load_service_line_ratio,
233233
"maxLoadLvLineRatio": work_package.generator_config.model.max_load_lv_line_ratio,
234234
"collapseLvNetworks": work_package.generator_config.model.collapse_lv_networks,
235-
"feederScenarioAllocationStrategy": work_package.generator_config.model.feeder_scenario_allocation_strategy.name if work_package.generator_config.model.feeder_scenario_allocation_strategy is not None else None,
235+
"feederScenarioAllocationStrategy": work_package.generator_config.model.feeder_scenario_allocation_strategy and work_package.generator_config.model.feeder_scenario_allocation_strategy.name,
236236
"closedLoopVRegEnabled": work_package.generator_config.model.closed_loop_v_reg_enabled,
237237
"closedLoopVRegReplaceAll": work_package.generator_config.model.closed_loop_v_reg_replace_all,
238238
"closedLoopVRegSetPoint": work_package.generator_config.model.closed_loop_v_reg_set_point,
@@ -245,25 +245,26 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
245245
"splitPhaseDefaultLoadLossPercentage": work_package.generator_config.model.split_phase_default_load_loss_percentage,
246246
"splitPhaseLVKV": work_package.generator_config.model.split_phase_lv_kv,
247247
"swerVoltageToLineVoltage": work_package.generator_config.model.swer_voltage_to_line_voltage,
248-
"loadPlacement": work_package.generator_config.model.load_placement.name if work_package.generator_config.model.load_placement is not None else None,
248+
"loadPlacement": work_package.generator_config.model.load_placement and work_package.generator_config.model.load_placement.name,
249249
"loadIntervalLengthHours": work_package.generator_config.model.load_interval_length_hours,
250-
"meterPlacementConfig": {
250+
"meterPlacementConfig": work_package.generator_config.model.meter_placement_config and {
251251
"feederHead": work_package.generator_config.model.meter_placement_config.feeder_head,
252252
"distTransformers": work_package.generator_config.model.meter_placement_config.dist_transformers,
253-
"switchMeterPlacementConfigs": [{
254-
"meterSwitchClass": spc.meter_switch_class.name if spc.meter_switch_class is not None else None,
255-
"namePattern": spc.name_pattern
256-
} for spc in
257-
work_package.generator_config.model.meter_placement_config.switch_meter_placement_configs] if work_package.generator_config.model.meter_placement_config.switch_meter_placement_configs is not None else None,
253+
"switchMeterPlacementConfigs": work_package.generator_config.model.meter_placement_config.switch_meter_placement_configs and [
254+
{
255+
"meterSwitchClass": spc.meter_switch_class and spc.meter_switch_class.name,
256+
"namePattern": spc.name_pattern
257+
} for spc in work_package.generator_config.model.meter_placement_config.switch_meter_placement_configs
258+
],
258259
"energyConsumerMeterGroup": work_package.generator_config.model.meter_placement_config.energy_consumer_meter_group
259-
} if work_package.generator_config.model.meter_placement_config is not None else None,
260+
},
260261
"seed": work_package.generator_config.model.seed,
261-
"defaultLoadWatts" : work_package.generator_config.model.default_load_watts,
262-
"defaultGenWatts" : work_package.generator_config.model.default_gen_watts,
263-
"defaultLoadVar" : work_package.generator_config.model.default_load_var,
264-
"defaultGenVar" : work_package.generator_config.model.default_gen_var
265-
} if work_package.generator_config.model is not None else None,
266-
"solve": {
262+
"defaultLoadWatts": work_package.generator_config.model.default_load_watts,
263+
"defaultGenWatts": work_package.generator_config.model.default_gen_watts,
264+
"defaultLoadVar": work_package.generator_config.model.default_load_var,
265+
"defaultGenVar": work_package.generator_config.model.default_gen_var
266+
},
267+
"solve": work_package.generator_config.solve and {
267268
"normVMinPu": work_package.generator_config.solve.norm_vmin_pu,
268269
"normVMaxPu": work_package.generator_config.solve.norm_vmax_pu,
269270
"emergVMinPu": work_package.generator_config.solve.emerg_vmin_pu,
@@ -272,32 +273,32 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
272273
"voltageBases": work_package.generator_config.solve.voltage_bases,
273274
"maxIter": work_package.generator_config.solve.max_iter,
274275
"maxControlIter": work_package.generator_config.solve.max_control_iter,
275-
"mode": work_package.generator_config.solve.mode.name if work_package.generator_config.solve.mode is not None else None,
276+
"mode": work_package.generator_config.solve.mode and work_package.generator_config.solve.mode.name,
276277
"stepSizeMinutes": work_package.generator_config.solve.step_size_minutes
277-
} if work_package.generator_config.solve is not None else None,
278-
"rawResults": {
278+
},
279+
"rawResults": work_package.generator_config.raw_results and {
279280
"energyMeterVoltagesRaw": work_package.generator_config.raw_results.energy_meter_voltages_raw,
280281
"energyMetersRaw": work_package.generator_config.raw_results.energy_meters_raw,
281282
"resultsPerMeter": work_package.generator_config.raw_results.results_per_meter,
282283
"overloadsRaw": work_package.generator_config.raw_results.overloads_raw,
283284
"voltageExceptionsRaw": work_package.generator_config.raw_results.voltage_exceptions_raw
284-
} if work_package.generator_config.raw_results is not None else None
285-
} if work_package.generator_config is not None else None,
285+
}
286+
},
286287
"executorConfig": {},
287-
"resultProcessorConfig": {
288-
"storedResults": {
288+
"resultProcessorConfig": work_package.result_processor_config and {
289+
"storedResults": work_package.result_processor_config.stored_results and {
289290
"energyMeterVoltagesRaw": work_package.result_processor_config.stored_results.energy_meter_voltages_raw,
290291
"energyMetersRaw": work_package.result_processor_config.stored_results.energy_meters_raw,
291292
"overloadsRaw": work_package.result_processor_config.stored_results.overloads_raw,
292293
"voltageExceptionsRaw": work_package.result_processor_config.stored_results.voltage_exceptions_raw,
293-
} if work_package.result_processor_config.stored_results is not None else None,
294-
"metrics": {
294+
},
295+
"metrics": work_package.result_processor_config.metrics and {
295296
"calculatePerformanceMetrics": work_package.result_processor_config.metrics.calculate_performance_metrics
296-
} if work_package.result_processor_config.metrics is not None else None,
297-
"writerConfig": {
298-
"writerType": work_package.result_processor_config.writer_config.writer_type.name if work_package.result_processor_config.writer_config.writer_type is not None else None,
299-
"outputWriterConfig": {
300-
"enhancedMetricsConfig": {
297+
},
298+
"writerConfig": work_package.result_processor_config.writer_config and {
299+
"writerType": work_package.result_processor_config.writer_config.writer_type and work_package.result_processor_config.writer_config.writer_type.name,
300+
"outputWriterConfig": work_package.result_processor_config.writer_config.output_writer_config and {
301+
"enhancedMetricsConfig": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config and {
301302
"populateEnhancedMetrics": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.populate_enhanced_metrics,
302303
"populateEnhancedMetricsProfile": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.populate_enhanced_metrics_profile,
303304
"populateDurationCurves": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.populate_duration_curves,
@@ -308,10 +309,48 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
308309
"calculateNormalForGenThermal": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.calculate_normal_for_gen_thermal,
309310
"calculateEmergForGenThermal": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.calculate_emerg_for_gen_thermal,
310311
"calculateCO2": work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config.calculate_co2
311-
} if work_package.result_processor_config.writer_config.output_writer_config.enhanced_metrics_config is not None else None
312-
} if work_package.result_processor_config.writer_config.output_writer_config is not None else None
313-
} if work_package.result_processor_config.writer_config is not None else None
314-
} if work_package.result_processor_config is not None else None
312+
}
313+
}
314+
}
315+
},
316+
"intervention": work_package.intervention and {
317+
"baseWorkPackageId": work_package.intervention.base_work_package_id,
318+
"yearRange": {
319+
"maxYear": work_package.intervention.year_range.max_year,
320+
"minYear": work_package.intervention.year_range.min_year
321+
},
322+
"allocationLimitPerYear": work_package.intervention.allocation_limit_per_year,
323+
"interventionType": work_package.intervention.intervention_type.name,
324+
"candidateGeneration": work_package.intervention.candidate_generation and {
325+
"type": work_package.intervention.candidate_generation.type.name,
326+
"interventionCriteriaName": work_package.intervention.candidate_generation.intervention_criteria_name,
327+
"voltageDeltaAvgThreshold": work_package.intervention.candidate_generation.voltage_delta_avg_threshold,
328+
"voltageUnderLimitHoursThreshold": work_package.intervention.candidate_generation.voltage_under_limit_hours_threshold,
329+
"voltageOverLimitHoursThreshold": work_package.intervention.candidate_generation.voltage_over_limit_hours_threshold,
330+
"tapWeightingFactorLowerThreshold": work_package.intervention.candidate_generation.tap_weighting_factor_lower_threshold,
331+
"tapWeightingFactorUpperThreshold": work_package.intervention.candidate_generation.tap_weighting_factor_upper_threshold,
332+
},
333+
"allocationCriteria": work_package.intervention.allocation_criteria,
334+
"specificAllocationInstance": work_package.intervention.specific_allocation_instance,
335+
"phaseRebalanceProportions": work_package.intervention.phase_rebalance_proportions and {
336+
"a": work_package.intervention.phase_rebalance_proportions.a,
337+
"b": work_package.intervention.phase_rebalance_proportions.b,
338+
"c": work_package.intervention.phase_rebalance_proportions.c
339+
},
340+
"dvms": work_package.intervention.dvms and {
341+
"lowerLimit": work_package.intervention.dvms.lower_limit,
342+
"upperLimit": work_package.intervention.dvms.upper_limit,
343+
"lowerPercentile": work_package.intervention.dvms.lower_percentile,
344+
"upperPercentile": work_package.intervention.dvms.upper_percentile,
345+
"maxIterations": work_package.intervention.dvms.max_iterations,
346+
"regulatorConfig": {
347+
"puTarget": work_package.intervention.dvms.regulator_config.pu_target,
348+
"puDeadbandPercent": work_package.intervention.dvms.regulator_config.pu_deadband_percent,
349+
"maxTapChangePerStep": work_package.intervention.dvms.regulator_config.max_tap_change_per_step,
350+
"allowPushToLimit": work_package.intervention.dvms.regulator_config.allow_push_to_limit
351+
}
352+
}
353+
}
315354
}
316355
}
317356
}
@@ -454,15 +493,15 @@ async def async_upload_study(self, study: Study):
454493
"styles": study.styles,
455494
"results": [{
456495
"name": result.name,
457-
"geoJsonOverlay": {
496+
"geoJsonOverlay": result.geo_json_overlay and {
458497
"data": result.geo_json_overlay.data,
459498
"sourceProperties": result.geo_json_overlay.source_properties,
460499
"styles": result.geo_json_overlay.styles
461-
} if result.geo_json_overlay else None,
462-
"stateOverlay": {
500+
},
501+
"stateOverlay": result.state_overlay and {
463502
"data": result.state_overlay.data,
464503
"styles": result.state_overlay.styles
465-
} if result.state_overlay else None,
504+
},
466505
"sections": [{
467506
"type": section.type,
468507
"name": section.name,

0 commit comments

Comments
 (0)