From 831e3a3221229f346875a760c9f08b493889251d Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Wed, 22 Jan 2025 17:32:06 +0100 Subject: [PATCH 1/6] Use ValidationUtils for ThermalGrids --- CHANGELOG.md | 1 + .../participant/hp/HpAgentFundamentals.scala | 34 +++++-------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a39a785c0..687660a7c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Introduce ThermalDemandWrapper [#1049](https://github.com/ie3-institute/simona/issues/1049) - Added Marius Staudt to list of reviewers [#1057](https://github.com/ie3-institute/simona/issues/1057) - Throw exception if the slack node is not directly conected to a transformer. [#525](https://github.com/ie3-institute/simona/issues/525) +- Use ValidationUtils for ThermalGrids [#1117](https://github.com/ie3-institute/simona/issues/1117) ### Changed - Adapted to changed data source in PSDM [#435](https://github.com/ie3-institute/simona/issues/435) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index 534126b986..0b55667466 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -7,10 +7,8 @@ package edu.ie3.simona.agent.participant.hp import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.datamodel.models.result.system.{ - HpResult, - SystemParticipantResult, -} +import edu.ie3.datamodel.models.result.system.{HpResult, SystemParticipantResult} +import edu.ie3.datamodel.utils.validation.{ThermalUnitValidationUtils, ValidationUtils} import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals @@ -18,35 +16,19 @@ import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.hp.HpAgent.neededServices -import edu.ie3.simona.agent.participant.statedata.BaseStateData.{ - FlexControlledData, - ParticipantModelBaseStateData, -} -import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ - InputModelContainer, - WithHeatInputContainer, -} -import edu.ie3.simona.agent.participant.statedata.{ - BaseStateData, - ParticipantStateData, -} +import edu.ie3.simona.agent.participant.statedata.BaseStateData.{FlexControlledData, ParticipantModelBaseStateData} +import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{InputModelContainer, WithHeatInputContainer} +import edu.ie3.simona.agent.participant.statedata.{BaseStateData, ParticipantStateData} import edu.ie3.simona.agent.state.AgentState import edu.ie3.simona.agent.state.AgentState.Idle import edu.ie3.simona.config.SimonaConfig.HpRuntimeConfig import edu.ie3.simona.event.notifier.NotifierConfig -import edu.ie3.simona.exceptions.agent.{ - AgentInitializationException, - InconsistentStateException, - InvalidRequestException, -} +import edu.ie3.simona.exceptions.agent.{AgentInitializationException, InconsistentStateException, InvalidRequestException} import edu.ie3.simona.io.result.AccompaniedSimulationResult import edu.ie3.simona.model.participant.HpModel.{HpRelevantData, HpState} import edu.ie3.simona.model.participant.{FlexChangeIndicator, HpModel} import edu.ie3.simona.model.thermal.ThermalGrid -import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{ - FlexRequest, - FlexResponse, -} +import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{FlexRequest, FlexResponse} import edu.ie3.simona.ontology.messages.services.WeatherMessage.WeatherData import edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble @@ -456,6 +438,8 @@ trait HpAgentFundamentals s"Unable to initialize heat pump agent '${inputModel.electricalInputModel.getUuid}' without thermal grid model." ) case WithHeatInputContainer(_, thermalGrid) => + + ThermalUnitValidationUtils.check(thermalGrid) /* Build the actual heat pump model */ HpModel( inputModel.electricalInputModel, From ef6958be17c88bdd6d7b46e806039c9c78a95d77 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Wed, 22 Jan 2025 17:47:33 +0100 Subject: [PATCH 2/6] spotless --- .../participant/hp/HpAgentFundamentals.scala | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index 0b55667466..a146f3d59b 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -7,8 +7,14 @@ package edu.ie3.simona.agent.participant.hp import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.datamodel.models.result.system.{HpResult, SystemParticipantResult} -import edu.ie3.datamodel.utils.validation.{ThermalUnitValidationUtils, ValidationUtils} +import edu.ie3.datamodel.models.result.system.{ + HpResult, + SystemParticipantResult, +} +import edu.ie3.datamodel.utils.validation.{ + ThermalUnitValidationUtils, + ValidationUtils, +} import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals @@ -16,19 +22,35 @@ import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.hp.HpAgent.neededServices -import edu.ie3.simona.agent.participant.statedata.BaseStateData.{FlexControlledData, ParticipantModelBaseStateData} -import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{InputModelContainer, WithHeatInputContainer} -import edu.ie3.simona.agent.participant.statedata.{BaseStateData, ParticipantStateData} +import edu.ie3.simona.agent.participant.statedata.BaseStateData.{ + FlexControlledData, + ParticipantModelBaseStateData, +} +import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ + InputModelContainer, + WithHeatInputContainer, +} +import edu.ie3.simona.agent.participant.statedata.{ + BaseStateData, + ParticipantStateData, +} import edu.ie3.simona.agent.state.AgentState import edu.ie3.simona.agent.state.AgentState.Idle import edu.ie3.simona.config.SimonaConfig.HpRuntimeConfig import edu.ie3.simona.event.notifier.NotifierConfig -import edu.ie3.simona.exceptions.agent.{AgentInitializationException, InconsistentStateException, InvalidRequestException} +import edu.ie3.simona.exceptions.agent.{ + AgentInitializationException, + InconsistentStateException, + InvalidRequestException, +} import edu.ie3.simona.io.result.AccompaniedSimulationResult import edu.ie3.simona.model.participant.HpModel.{HpRelevantData, HpState} import edu.ie3.simona.model.participant.{FlexChangeIndicator, HpModel} import edu.ie3.simona.model.thermal.ThermalGrid -import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{FlexRequest, FlexResponse} +import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{ + FlexRequest, + FlexResponse, +} import edu.ie3.simona.ontology.messages.services.WeatherMessage.WeatherData import edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble @@ -438,7 +460,6 @@ trait HpAgentFundamentals s"Unable to initialize heat pump agent '${inputModel.electricalInputModel.getUuid}' without thermal grid model." ) case WithHeatInputContainer(_, thermalGrid) => - ThermalUnitValidationUtils.check(thermalGrid) /* Build the actual heat pump model */ HpModel( From ae854dc30c5ee8358bbac16d1f67d5b24723c28c Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Wed, 22 Jan 2025 17:56:22 +0100 Subject: [PATCH 3/6] use ValidationUtils not ThermalValidationUtils --- .../simona/agent/participant/hp/HpAgentFundamentals.scala | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index a146f3d59b..086f85fb14 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -11,10 +11,7 @@ import edu.ie3.datamodel.models.result.system.{ HpResult, SystemParticipantResult, } -import edu.ie3.datamodel.utils.validation.{ - ThermalUnitValidationUtils, - ValidationUtils, -} +import edu.ie3.datamodel.utils.validation.ValidationUtils import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals @@ -460,7 +457,7 @@ trait HpAgentFundamentals s"Unable to initialize heat pump agent '${inputModel.electricalInputModel.getUuid}' without thermal grid model." ) case WithHeatInputContainer(_, thermalGrid) => - ThermalUnitValidationUtils.check(thermalGrid) + ValidationUtils.check(thermalGrid) /* Build the actual heat pump model */ HpModel( inputModel.electricalInputModel, From 8aa5c7c5056c891ed8f93a8d2855341431b9b401 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Thu, 6 Mar 2025 12:44:56 +0100 Subject: [PATCH 4/6] move ValidationUtils to GridProvider --- .../simona/agent/participant/hp/HpAgentFundamentals.scala | 1 - src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index f42bf2c69f..9fd5f5adc1 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -457,7 +457,6 @@ trait HpAgentFundamentals s"Unable to initialize heat pump agent '${inputModel.electricalInputModel.getUuid}' without thermal grid model." ) case WithHeatInputContainer(_, thermalGrid) => - ValidationUtils.check(thermalGrid) /* Build the actual heat pump model */ HpModel( inputModel.electricalInputModel, diff --git a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala index 8777c1a3e9..262d499df1 100644 --- a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala +++ b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala @@ -100,8 +100,12 @@ object GridProvider extends LazyLogging { new FileNamingStrategy(), ) .asScala - .map(thermalGrid => thermalGrid.bus() -> thermalGrid) + .map { thermalGrid => + ValidationUtils.check(thermalGrid) + thermalGrid.bus() -> thermalGrid + } .toMap + case None => throw new RuntimeException( "CSVGridSource requires csv params to be set!" From c5c2679ed4af3fb1295f2303f2ad51c59433b278 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Thu, 6 Mar 2025 13:18:17 +0100 Subject: [PATCH 5/6] remove imports --- .../participant/hp/HpAgentFundamentals.scala | 32 ++++--------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index 9fd5f5adc1..13813a5cd6 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -7,11 +7,7 @@ package edu.ie3.simona.agent.participant.hp import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.datamodel.models.result.system.{ - HpResult, - SystemParticipantResult, -} -import edu.ie3.datamodel.utils.validation.ValidationUtils +import edu.ie3.datamodel.models.result.system.{HpResult, SystemParticipantResult} import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals @@ -19,35 +15,19 @@ import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.hp.HpAgent.neededServices -import edu.ie3.simona.agent.participant.statedata.BaseStateData.{ - FlexControlledData, - ParticipantModelBaseStateData, -} -import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ - InputModelContainer, - WithHeatInputContainer, -} -import edu.ie3.simona.agent.participant.statedata.{ - BaseStateData, - ParticipantStateData, -} +import edu.ie3.simona.agent.participant.statedata.BaseStateData.{FlexControlledData, ParticipantModelBaseStateData} +import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{InputModelContainer, WithHeatInputContainer} +import edu.ie3.simona.agent.participant.statedata.{BaseStateData, ParticipantStateData} import edu.ie3.simona.agent.state.AgentState import edu.ie3.simona.agent.state.AgentState.Idle import edu.ie3.simona.config.RuntimeConfig.HpRuntimeConfig import edu.ie3.simona.event.notifier.NotifierConfig -import edu.ie3.simona.exceptions.agent.{ - AgentInitializationException, - InconsistentStateException, - InvalidRequestException, -} +import edu.ie3.simona.exceptions.agent.{AgentInitializationException, InconsistentStateException, InvalidRequestException} import edu.ie3.simona.io.result.AccompaniedSimulationResult import edu.ie3.simona.model.participant.HpModel.{HpRelevantData, HpState} import edu.ie3.simona.model.participant.{FlexChangeIndicator, HpModel} import edu.ie3.simona.model.thermal.ThermalGrid -import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{ - FlexRequest, - FlexResponse, -} +import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{FlexRequest, FlexResponse} import edu.ie3.simona.ontology.messages.services.WeatherMessage.WeatherData import edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble From ef4ce9b8e2703770573b05eeed9b585581f70bd2 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Thu, 6 Mar 2025 13:24:55 +0100 Subject: [PATCH 6/6] fmt --- .../participant/hp/HpAgentFundamentals.scala | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index 13813a5cd6..d99b8f4e8e 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -7,7 +7,10 @@ package edu.ie3.simona.agent.participant.hp import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.datamodel.models.result.system.{HpResult, SystemParticipantResult} +import edu.ie3.datamodel.models.result.system.{ + HpResult, + SystemParticipantResult, +} import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals @@ -15,19 +18,35 @@ import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.hp.HpAgent.neededServices -import edu.ie3.simona.agent.participant.statedata.BaseStateData.{FlexControlledData, ParticipantModelBaseStateData} -import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{InputModelContainer, WithHeatInputContainer} -import edu.ie3.simona.agent.participant.statedata.{BaseStateData, ParticipantStateData} +import edu.ie3.simona.agent.participant.statedata.BaseStateData.{ + FlexControlledData, + ParticipantModelBaseStateData, +} +import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ + InputModelContainer, + WithHeatInputContainer, +} +import edu.ie3.simona.agent.participant.statedata.{ + BaseStateData, + ParticipantStateData, +} import edu.ie3.simona.agent.state.AgentState import edu.ie3.simona.agent.state.AgentState.Idle import edu.ie3.simona.config.RuntimeConfig.HpRuntimeConfig import edu.ie3.simona.event.notifier.NotifierConfig -import edu.ie3.simona.exceptions.agent.{AgentInitializationException, InconsistentStateException, InvalidRequestException} +import edu.ie3.simona.exceptions.agent.{ + AgentInitializationException, + InconsistentStateException, + InvalidRequestException, +} import edu.ie3.simona.io.result.AccompaniedSimulationResult import edu.ie3.simona.model.participant.HpModel.{HpRelevantData, HpState} import edu.ie3.simona.model.participant.{FlexChangeIndicator, HpModel} import edu.ie3.simona.model.thermal.ThermalGrid -import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{FlexRequest, FlexResponse} +import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{ + FlexRequest, + FlexResponse, +} import edu.ie3.simona.ontology.messages.services.WeatherMessage.WeatherData import edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble