From 67dafed36f0cbff4d3cca0331cb0b0408b8d2eb7 Mon Sep 17 00:00:00 2001 From: Kamil MARUT Date: Mon, 18 May 2026 13:56:06 +0200 Subject: [PATCH] feat: handle p and q measurement modification in battery Signed-off-by: Kamil MARUT --- pom.xml | 2 +- .../BatteryModificationEntity.java | 4 ++++ .../BatteryModificationTest.java | 22 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e39ab396..a47eb8798 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ gridsuite org.gridsuite:network-modification-server - 0.81.0 + 0.82.0-SNAPSHOT diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BatteryModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BatteryModificationEntity.java index 2dd7fc9ee..83af648e8 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BatteryModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BatteryModificationEntity.java @@ -151,6 +151,10 @@ public BatteryModificationInfos toModificationInfos() { .stepUpTransformerX(toAttributeModification(getStepUpTransformerX())) .reactiveCapabilityCurve(toAttributeModification(getReactiveCapabilityCurve())) .reactiveCapabilityCurvePoints(DTOUtils.toReactiveCapabilityCurvePointsModificationInfos(getReactiveCapabilityCurvePoints())) + .pMeasurementValue(toAttributeModification(getPMeasurementValue())) + .pMeasurementValidity(toAttributeModification(getPMeasurementValidity())) + .qMeasurementValue(toAttributeModification(getQMeasurementValue())) + .qMeasurementValidity(toAttributeModification(getQMeasurementValidity())) // properties .properties(CollectionUtils.isEmpty(getProperties()) ? null : getProperties().stream() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java index da04d9d2a..5ca9efbab 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java @@ -13,6 +13,8 @@ import com.powsybl.iidm.network.ReactiveLimitsKind; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.BatteryShortCircuit; +import com.powsybl.iidm.network.extensions.Measurement; +import com.powsybl.iidm.network.extensions.Measurements; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.NetworkModificationsResult; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -40,6 +42,10 @@ class BatteryModificationTest extends AbstractInjectionModificationTest { private static final String PROPERTY_NAME = "property-name"; private static final String PROPERTY_VALUE = "property-value"; + private static final Double MEASUREMENT_P_VALUE = 10.0; + private static final Boolean MEASUREMENT_P_VALID = false; + private static final Double MEASUREMENT_Q_VALUE = 0.5; + private static final Boolean MEASUREMENT_Q_VALID = true; @Override protected Network createNetwork(UUID networkUuid) { @@ -68,6 +74,10 @@ protected ModificationInfos buildModification() { .stepUpTransformerX(new AttributeModification<>(0.2, OperationType.SET)) .participate(new AttributeModification<>(true, OperationType.SET)) .reactiveCapabilityCurve(new AttributeModification<>(true, OperationType.SET)) + .pMeasurementValue(new AttributeModification<>(MEASUREMENT_P_VALUE, OperationType.SET)) + .pMeasurementValidity(new AttributeModification<>(MEASUREMENT_P_VALID, OperationType.SET)) + .qMeasurementValue(new AttributeModification<>(MEASUREMENT_Q_VALUE, OperationType.SET)) + .qMeasurementValidity(new AttributeModification<>(MEASUREMENT_Q_VALID, OperationType.SET)) .properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build())) .build(); } @@ -116,6 +126,7 @@ protected void assertAfterNetworkModificationCreation() { assertNotNull(batteryShortCircuit); assertEquals(0.1, batteryShortCircuit.getDirectTransX()); assertEquals(0.2, batteryShortCircuit.getStepUpTransformerX()); + assertMeasurements(modifiedBattery); } @Override @@ -415,4 +426,15 @@ void testBatteryShortCircuitAttributesModification() throws Exception { assertThat(createdModification).recursivelyEquals(batteryModificationInfos); testNetworkModificationsCount(getGroupId(), 2); } + + private void assertMeasurements(Battery battery) { + Measurements measurements = (Measurements) battery.getExtension(Measurements.class); + assertNotNull(measurements); + Collection activePowerMeasurements = measurements.getMeasurements(Measurement.Type.ACTIVE_POWER).stream().toList(); + Collection reactivePowerMeasurements = measurements.getMeasurements(Measurement.Type.REACTIVE_POWER).stream().toList(); + assertThat(activePowerMeasurements).isNotEmpty(); + assertThat(reactivePowerMeasurements).isNotEmpty(); + assertThat(activePowerMeasurements).allMatch(m -> m.getValue() == MEASUREMENT_P_VALUE && m.isValid() == MEASUREMENT_P_VALID); + assertThat(reactivePowerMeasurements).allMatch(m -> m.getValue() == MEASUREMENT_Q_VALUE && m.isValid() == MEASUREMENT_Q_VALID); + } }