Release History​
| Version | Released |
|---|---|
| 1.1.0 | 30 September 2025 |
| 1.0.1 | 19 September 2025 |
| 1.0.0 | 27 August 2025 |
| 0.29.0 | 05 June 2025 |
| 0.28.0 | 28 April 2025 |
| 0.27.0 | 24 April 2025 |
| 0.26.1 | 03 April 2025 |
| 0.26.0 | 02 April 2025 |
| 0.25.0 | 04 March 2025 |
| 0.24.1 | 23 January 2025 |
| 0.24.0 | 21 January 2025 |
| 0.23.0 | 18 October 2024 |
| 0.22.0 | 30 May 2024 |
| 0.21.0 | 15 May 2024 |
| 0.20.0 | 14 May 2024 |
| 0.19.0 | 08 April 2024 |
| 0.18.0 | 08 April 2024 |
| 0.17.1 | 11 January 2024 |
| 0.17.0 | 22 November 2023 |
| 0.16.0 | 13 September 2023 |
| 0.15.0 | 01 May 2023 |
| 0.14.0 | 07 February 2023 |
| 0.13.0 | 21 October 2022 |
| 0.12.0 | 12 August 2022 |
| 0.11.0 | 09 May 2022 |
| 0.10.0 | 27 April 2022 |
| 0.9.0 | 05 April 2022 |
| 0.8.0 | 03 March 2022 |
| 0.7.0 | 22 September 2021 |
| 0.6.0 | 06 April 2021 |
| 0.5.0 | 01 February 2021 |
| 0.4.0 | 12 January 2021 |
| 0.3.0 | 10 November 2020 |
| 0.2.0 | 08 October 2020 |
| 0.1.0 | 07 September 2020 |
NOTE: This library is not yet stable, and breaking changes should be expected until a 1.0.0 release.
[1.1.0]​
Breaking Changes​
- Discrepancies in the v61 upgrade scripts and the schema creation objects have been fixed. This includes correcting the types of some columns, changing the nullability of some columns and adding missing indexes.
Timestamp.toInstant()andInstant.toTimestamp()have been removed from the public API. If you were using them, you will need to copy the implementation.- The following gRPC fields have been modified to support nulls (they were missed in v1.0.0):
Document.createdDateTimeEquipment.commissionedDateMeasurementValue.timeStampRelayInfo.curveSettingRelayInfo.recloseFast
NetworkCimReaderis now anAutoClosableto clean up local caches used when loading the database. Failure to close the reader simply means the unused memory will be kept indefinitely, rather than being released back to the server, but you may get code analysis errors due to this change.
New Features​
- Added the following new CIM classes:
DateTimeInterval, interval between two date and time points, where the interval includes the start time but excludes end time.ElectronicAddress, electronic address information.TelephoneNumber, telephone number.
- Added the following new CIM extension classes:
ContactDetails, the details required to contact a person or company. These can be accessed/used via aUsagePoint.DirectionalCurrentRelay, a directional current relay is a type of protective relay used in electrical power systems to detect the direction of current flow and operate only when the current exceeds a certain threshold in a specified direction.
- Added new CIM extension enums:
ContactMethodTypePolarizingQuantityType
EquipmentTreeBuilderwill now calculateleaveswhen specified to do so via thecalculateLeavesconstructor parameter.
Enhancements​
BaseService.containshas been marked as anoperator, allowing Kotlin to useinagainst a service. It has also been expanded to support objects in addition to mRIDs.Agreementnow supportsvalidityInterval, the date and time interval the agreement is valid (from going into effect to termination).StreetDetailnow supports extensionbuildingNumber, the number of the building.TownDetailnow supportscountry, the name of the country.- The
compareUnorderedValueCollectionmethods inBaseServiceComparatorandPropertyOmparereshave been relaxed to take anyCollecitonrather than only accepting aList.
Fixes​
- Fixed a bug in the LV feeder assignment when processing sites in the current state of the network. This prevented LV feeders on switches (rather than the transformer) from being assigned to the current state energising feeder.
- Indexes have been fixed in the database schema. Many were missing due to not calling
super, so the method of adding indexes has been reworked to prevent this in the future. CurrentStateEvent.timestampnow correctly clears the timestamp if you have anulltimestamp.
Notes​
- None.
[1.0.1]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- None.
Fixes​
- Fixed a bug in the LV feeder assignment when processing sites in the current state of the network. This prevented LV feeders on switches (rather than the transformer) from being assigned to the current state energising feeder.
Notes​
- None.
[1.0.0]​
Breaking Changes​
- Renamed the package to
com.zepben.ewb. You will need to update all your importscom.zepben.evolve.*->com.zepben.ewb.*. This also updates the maven artifact:<dependency>
<groupId>com.zepben</groupId>
<artifactId>ewb-sdk</artifactId>
</dependency> - Relocated the following classes into the Zepben extensions area, marking them as [ZBEX]:
DistanceRelay:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.EvChargingUnit:cim.iec61970.infiec61970.wires.generation.production->cim.extensions.iec61970.base.generation.production.Loop:cim.iec61970.infiec61970.feeder->cim.extensions.iec61970.base.feeder.LvFeeder:cim.iec61970.infiec61970.feeder->cim.extensions.iec61970.base.feeder.PowerDirectionKind:cim.iec61970.infiec61970.protection->cim.extensions.iec61970.base.protection.ProtectionKind:cim.iec61970.infiec61970.protection->cim.extensions.iec61970.base.protection.ProtectionRelayFunction:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.ProtectionRelayScheme:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.ProtectionRelaySystem:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.RelayInfo:cim.iec61968.infiec61968.infassetinfo->cim.extensions.iec61968.assetinfo.RelaySetting:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.Site:cim.iec61970.base.core->cim.extensions.iec61970.base.core.TransformerCoolingType:cim.iec61970.base.wires->cim.extensions.iec61970.base.wires.TransformerEndRatedS:cim.iec61970.base.wires->cim.extensions.iec61970.base.wires.VectorGroup:cim.iec61970.base.wires->cim.extensions.iec61970.base.wires.VoltageRelay:cim.iec61970.base.protection->cim.extensions.iec61970.base.protection.WindingConnection:cim.iec61970.base.wires.winding->cim.iec61970.base.wires.
- Relocated the following classes that were in the wrong packages:
Pole:cim.iec61968.assets->cim.iec61968.infiec61968.infassets.StreetlightLampKind:cim.iec61968.assets->cim.iec61968.infiec61968.infassets.- All classes in the incorrectly located
cim.iec61970.base.wires.generation.production->cim.iec61970.base.generation.production.
- The protobuf implementation has the following changes, which will only have an impact if you are using protobuf directly:
- Updated the values of the following enums to conform to Protobuf standard naming:
BatteryControlModeBatteryStateKindCustomerKindDiagramStyleEndDeviceFunctionKindFeederDirectionIncludedEnergizedContainersIncludedEnergizingContainersLogLevelLogSourceNetworkStateOrientationKindPhaseCodePhaseShuntConnectionKindPotentialTransformerKindPowerDirectionKindProtectionKindRegulatingControlModeKindSinglePhaseKindStreetlightLampKindSVCControlModeSwitchActionSynchronousMachineKindTransformerConstructionKindTransformerCoolingTypeTransformerFunctionKindUnitSymbolVectorGroupWindingConnectionWireMaterialKind
- Renumbered the protobuf fields for:
AcLineSegmentControlDiagramTransformerEnd
- Updated the values of the following enums to conform to Protobuf standard naming:
- Renamed the following enum values:
PowerDirectionKind.UNKNOWN_DIRECTION->PowerDirectionKind.UNKNOWNRegulatingControlModeKind.UNKNOWN_CONTROL_MODE->RegulatingControlModeKind.UNKNOWNTransformerCoolingType.UNKNOWN_COOLING_TYPE->TransformerCoolingType.UNKNOWNWindingConnection.UNKNOWN_WINDING->WindingConnection.UNKNOWN
- Added
TransformerFunctionKind.UNKNOWNto allow distinction between an unknown function, and a function that is not covered by the enum (i.e.other). This addition has changed the order of the enum values, withothernow being the last entry, instead of the first. NetworkConsumerClientno longer uses the protobufIncludedEnergizedContainers,IncludedEnergizingContainersandNetworkStateenums directly, it now uses SDK versions of these enums. To use these enums you will need to update your imports, and use the simplified versions of the enum values:IncludedEnergizedContainersfrom packagecom.zepben.ewb.streaming.get.EXCLUDE_ENERGIZED_CONTAINERS->NONE.INCLUDE_ENERGIZED_FEEDERS->FEEDERS.INCLUDE_ENERGIZED_LV_FEEDERS->LV_FEEDERS.
IncludedEnergizingContainersfrom packagecom.zepben.ewb.streaming.get.EXCLUDE_ENERGIZING_CONTAINERS->NONE.INCLUDE_ENERGIZING_FEEDERS->FEEDERS.INCLUDE_ENERGIZING_SUBSTATIONS->SUBSTATIONS.
NetworkStatefrom packagecom.zepben.ewb.services.network.ALL_NETWORK_STATE->ALL.NORMAL_NETWORK_STATE->NORMAL.CURRENT_NETWORK_STATE->CURRENT.
- The
evolve-conndependency has been incorporated into the SDK with the following package changes:com.zepben.auth->com.zepben.ewb.authcom.zepben.evolve.conn->com.zepben.ewb.conn
- The following CIM fields have been made nullable. Note if previously accessing these fields you will now have to handle them potentially being null.
- Analog.positiveFlowIn
- Document.*
- EnergyConsumer.grounded
- EnergySource.isExternalGrid
- IdentifiedObject.name
- IdentifiedObject.description
- IdentifiedObject.numDiagramObjects
- Meter.companyMeterId
- NameType.description
- Pole.classification
- PowerSystemResource.numControls
- RegulatingCondEq.controlEnabled
- ShuntCompensator.grounded
- StreetAddress.postalCode
- StreetAddress.poBox
- StreetDetail.*
- SynchronousMachine.earthing
- TapChanger.controlEnabled
- TransformerEnd.grounded
- UsagePoint.isVirtual
New Features​
- Added
com.zepben.ewb.issuespackage includingIssuesLog,IssueTrackerandIssueTrackerGroupfor tracking issues.
Enhancements​
- Upgrade ewb-grpc to 1.0.0 to support customer level load results.
Fixes​
- Fixed bug that would cause a null pointer exception when processing metrics job sources with a null metadata timestamp
- Marked some extensions properties and classes with [ZBEX] that were missing them (might still be more). In addition to the ones moved into the extensions
package:
PhaseCode.YPhaseCode.YNPowerElectronicsConnection.inverterStandardPowerElectronicsConnection.sustainOpOvervoltLimitPowerElectronicsConnection.stopAtOverFreqPowerElectronicsConnection.stopAtUnderFreqPowerElectronicsConnection.invVoltWattRespModePowerElectronicsConnection.invWattRespV1PowerElectronicsConnection.invWattRespV2PowerElectronicsConnection.invWattRespV3PowerElectronicsConnection.invWattRespV4PowerElectronicsConnection.invWattRespPAtV1PowerElectronicsConnection.invWattRespPAtV2PowerElectronicsConnection.invWattRespPAtV3PowerElectronicsConnection.invWattRespPAtV4PowerElectronicsConnection.invVoltVarRespModePowerElectronicsConnection.invVarRespV1PowerElectronicsConnection.invVarRespV2PowerElectronicsConnection.invVarRespV3PowerElectronicsConnection.invVarRespV4PowerElectronicsConnection.invVarRespQAtV1PowerElectronicsConnection.invVarRespQAtV2PowerElectronicsConnection.invVarRespQAtV3PowerElectronicsConnection.invVarRespQAtV4PowerElectronicsConnection.invReactivePowerModePowerElectronicsConnection.invFixReactivePowerPowerTransformerEnd.ratingsRegulatingControl.ratedCurrentSensor.relayFunctionsUsagePoint.approvedInverterCapacity
- QueryNetworkStateService will now correctly report processing errors in responses.
Notes​
- None.
[0.29.0]​
Breaking Changes​
- You can no longer register a
StepActionWithContextValuewithTraversal.ifStoppingorTraversal.ifNotStopping, you must useTraversal.addStepActioninstead. - Added a new
debugLoggingandnameparameters to the constructor of the following traces. The helper functions inTracingalso have these parameters, which defaults tonullandnetworkTrace, meaning anyone using these wrappers will be unaffected by the change:AssignToFeedersAssignToLvFeedersClearDirectionFindSwerEquipmentPhaseInferrerRemovePhasesSetDirectionSetPhases
NetworkStateOperatorshas a new abstractdescription. If you are creating custom operators you will need to add it.
New Features​
- You can now pass a logger to all
Tracingmethods andTestNetworkBuilder.buildto enable debug logging for the traces it runs. The debug logging will include the results of all queue and stop condition checks, and each item that is stepped on.
Enhancements​
NetworkTracenow supports starting from a knownNetworkTraceStep.Path. This allows you to force a trace to start in a particular direction, or to continue a follow-up trace from a detected stop point.- Support disabling certificate verification in SDK connection helpers
Fixes​
QueryNetworkStateService.reportBatchStatusnow correctly sends theEmptyresponse.- Phases are now correctly assigned to the LV side of an LV2 transformer that is in parallel with a previously energised LV1 transformer.
Notes​
- None.
[0.28.0]​
Enhancements​
- Upgrade ewb-grpc to 0.36.0 to provide mapbox vector tile proto.
[0.27.0]​
Breaking Changes​
- None.
New Features​
- Added relationships between
AssetandPowerSystemResourcewhich enables linkingEquipmenttoPole:Asset.powerSystemResourcesPowerSystemResource.assets
Enhancements​
- Updated to ewb-grpc 0.35.0. This brings with it upgrades to the latest protobuf (4.30.2) and gRPC (1.71.0) versions.
Fixes​
- NetworkCimWriter, DiagramCimWriter, and CustomerCimWriter are now public so can be used downstream.
AssignToFeedersandAssignToLvFeederswill now associatePowerElectronicUnitswith theirpowerElectronicsConnectionFeeder/LvFeeder.
Notes​
-
None.
-
Updated to evolve-grpc 0.27.0.
-
Updated super-pom to version 0.33.0
-
Added
connectWithIdentity()for connecting using Azure Managed Identities. -
Added
getMetadatatoCustomerConsumerClient,DiagramConsumerClient, andNetworkConsumerClient. This returns aServiceInfocontainingDataSourceand version information of the connected service.
Enhancements​
- Update docusaurus version and the configuration.
Fixes​
- None.
Notes​
- None.
[0.26.1]​
Fixes​
NetworkTrace/Traversalnow correctly respectscanStopOStartwhen providing multiple start items.
[0.26.0]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- Added support to
TestNetworkBuilderfor:withClamp- Adds a clamp to the previously addedAcLineSegmentwithCut- Adds a cut to the previously addedAcLineSegmentconnectTo- Connects the previously added item, rather than having to specify it again inconnect.
Fixes​
- The follow fixes were added to Traversal and NetworkTrace:
canStopAtStartItemnow works for branching traversals.- Traversal start items are added to the queue before traversal starts, so that the start items honour the queue type order.
- Stop conditions on the
NetworkTracenow are checked based on a step type, likeQueueConditiondoes, rather than by checkingcanActionItem. CutandClampare now correctly supported inSetDirectionandDirectionCondition.NetworkTracenow handles starting onCut,Clamp, andAcLineSegmentand their terminals in a explicit / sensible way.NetworkTraceStepPathProvidernow correctly handles:- Next paths when starting on a
Clampterminal. - Traversing AcLineSegments with single cuts or clamps.
- Next paths when starting on a
- Added missing
@JvmOverloadsannotations to theTestNetworkBuilder. - Fixes from ewb-conn-jvm 0.12.1:
- JWTAuthenticator will now handle JwkExceptions and return 403 Unauthenticated responses.
- JWTAuthenticator will now pass through unhandled exceptions to the caller rather than wrapping them in 500 errors.
Exceptions now need to be handled by the caller of
authenticate().
Notes​
- None.
[0.25.0]​
Breaking Changes​
- Traversal / Tracing API has been completely rewritten.
Traversalhas a different public API andBranchRecursiveTraversalno longer exists. All traces that used to be used via theTracing.*factory functions should be migrated to use the newNetworkTraceclass instantiated from the factory functions incom.zepben.evolve.services.network.tracing.networktrace.Tracing. TheNetworkTraceshould cover all existing use cases while being easier to use and read. See the documentation for usage details. SetDirectionnow correctly applies theBOTHdirection on all parts of the loop again, so if you were relying on the broken intermediate state, you will need to update your code.RemovePhasesnow stops at open points like theSetPhasescounterpart. If you were relying on the bug to remove phases through open points you will now need to start additional traces from the other side of the open points to maintain this behaviour.SetDirectionnow correctly sets directions for networks withBusbarSection.RemoveDirectionhas been removed. It did not work reliably with dual fed networks with loops. You now need to clear direction using the newClearDirectionand reapply directions where appropriate usingSetDirection.FindWithUsagePointswas deemed too use-case specific for the SDK and has been removed.- Removal of deprecated
Terminal.tracedPhasesproperty. UseTerminal.normalPhasesandTerminal.currentPhasesinstead. - The following change have been made to
SqliteTable:- It will only find columns defined in Kotlin classes, Java is no longer supported.
- Its constructor is now internal.
- It now inherits from the new
SqlTable. - It is now in module
com.zepben.evolve.database.sqlite.common.
- The following change have been made to
Column:- Its package has changed from
com.zepben.evolve.database.sqlite.cim.tablestocom.zepben.evolve.database.sql. - Its constructor is now internal.
- Its package has changed from
- All references to the following have been renamed in
com.zepben.evolve.database. This includes full or partial copies in the names of functions, parameters and descriptions/documentation:savehas been renamed towrite, so the writers now write, rather than save.loadhas been renamed toread, so the readers now read, rather than load.
- Database readers and writers no longer have the container of the data they will read/write passed to the constructor. They now have this passed to the
readorwritemethod. - The following classes and methods are now internal:
BaseServiceReader,BaseServiceWriter,BaseCollectionReader,BaseCollectionWriter,BaseEntryWriter,CimReader,CimWriter,CustomerCimReader,CustomerCimWriter,CustomerServiceReader,CustomerServiceWriter,DiagramCimReader,DiagramCimWriter,DiagramServiceReader,DiagramServiceWriter,MetadataCollectionReader,MetadataCollectionWriter,MetadataEntryReader,MetadataEntryWriter,MetricsEntryWriter,MetricsWriter,NetworkServiceReader,NetworkServiceWriter,- Extension methods in
com.zepben.evolve.database.sqlite.extensions(e.g.ResultSet.getNullableDouble)
- The following classes now have internal constructors:
BaseDatabaseWriter,CimDatabaseReader,CimDatabaseWriter,CimDatabaseTables,BaseDatabaseTables,CustomerDatabaseTables,DiagramDatabaseTables,NetworkDatabaseTables,MetricsDatabaseTables
- Removed
Class.getFieldExtextension function. InjectionJob.metadataproperty is no longer a nullable type and is now a readonly val.- Moved the following classes and methods from
com.zepben.evolve.database.sqlite.commontocom.zepben.evolve.database.sql:BaseDatabaseTablesBaseDatabaseWriterBaseEntryWriterMissingTableConfigException
- Moved
MetricsDatabaseTablesandMetricsDatabaseWritertocom.zepben.evolve.database.postgres.metrics. MetricsDatabaseWriternow only supports connections to existing Postgres databases with a metrics schema already in-place. Evolve App Server will be responsible to create and update this schema.- For this reason,
METRICShas been removed from the enumcom.zepben.evolve.database.paths.DatabaseType.
- For this reason,
AcLineSegmentsupports adding a maximum of 2 terminals. Mid-span terminals are no longer supported and models should migrate to usingClamp.Clampsupports only adding a single terminal.Cutsupports adding a maximum of 2 terminals.- Direction aware helpers in
Conditionthat didn't use theFeederDirectionStateOperationshave been removed, with the remaining helpers now takingNetworkStateOperatorsas a receiver. NetworkStateOperatorsimplements a new sub-interfaceConnectivityStateOperators.
New Features​
- Added
ClearDirectionthat clears feeder directions. - Added new
FeederDirection.CONNECTORvalue forConnectorequipment that are modelled only with a single terminal. - Created a new
SqlTablethat doesn't support creating schema creation statements by default.- Created a new
PostgresTableto model tables in Postgres.
- Created a new
Enhancements​
- The following enhancements have been made to the
TestNetworkBuilder:- You can now add sites via
addSite. - You can now add busbar sections natively with
fromBusbarSectionandtoBusbarSection. - The prefix for generated mRIDs for "other" equipment can be specified with the
defaultMridPrefixargument infromOtherandtoOther. - The action block for
fromOthernow has a receiver of the created type, rather than the genericConductingEquipment.
- You can now add sites via
- You can now start the
AssignToFeedertrace from a specifiedTerminalrather than all feeder heads. - When processing feeder assignments, all LV feeders belonging to a dist substation site will now be considered energized when the site is energized by a feeder.
- Major speed improvements have been made for
RemovePhaseswhen dealing with large networks with many nested loops. SetDirectionnow supports networks withBusbarSectionand will apply theFeederDirection.CONNECTORvalue to their terminals.- Added
connectionTestTimeoutMsfield toGrpcBuildArgswith a default value of5000. This timeout is only applied to requests made in the initial connection tests. - Updated to ewb-grpc 0.34.1:
- Changed AddJumperEvent to not use reserved words.
UpdateNetworkStateService.setCurrentStatesno longer blocks while waiting foronSetCurrentStatescallbacks when handling theonCompletedrequest. This only effects the gRPC threads.QueryNetworkStateClient.reportBatchStatuscan be used to send status responses for batches returned from the service viaQueryNetworkStateClient.getCurrentStates.- Tracing models with
CutandClampare now supported via the new tracing API.
Fixes​
RemovePhasesnow stops at open points like theSetPhasescounterpart.AssignToFeederandAssignToLvFeederwill no longer trace from start terminals that belong to open switches.- When finding
LvFeedersin theSitewe will now excludeLvFeedersthat start with an openSwitch - You can now pass GrpcBuildArgs to the
connect*helper functions when connecting to EWB. SeeGrpcBuildArgsfor options.
[0.24.1]​
Breaking Changes​
- Added
connectionTestTimeoutMsfield toGrpcBuildArgswith a default value of5000. This timeout is only applied to requests made in the initial connection tests. - Updated to ewb-grpc 0.34.1:
- Changed AddJumperEvent to not use reserved words.
Fixes​
- GrpcChannelBuilder's initial connectivity test no longer fails due to a lack of permissions on a subset of services.
- Updated to latest SDK:
- AddJumperEvent from and to changed to fromConnection and toConnection
- AddJumperEvent now uses correct protobuf classes when converting
- RemoveJumperEvent now uses correct protobuf classes when converting
[0.24.0]​
Breaking Changes​
- Database readers and writes for each
BaseServiceno longer accept aMetadataCollection, and will instead use the collection of the provided service. AcLineSegment.perLengthSequenceImpedancehas been corrected toperLengthImpedance. This has been done in a non-breaking way, however the public resolverResolvers.perLengthSequenceImpedanceis nowResolvers.perLengthImpedance, correctly reflecting the CIM relationship.- Removed
getCurrentEquipmentForFeederimplementation forNetworkConsumeras its functionality is now incorporated ingetEquipmentForContainers.
New Features​
- Network state services for updating and querying network state events via gRPC.
- Client functionality for updating and querying network states via gRPC service stub.
BaseServicenow contains aMetadataCollectionto tightly couple the metadata to the associated service.- Added
Services, a new class which contains a copy of eachBaseServicesupported by the SDK. - Added
connectWithAccessTokenInsecure()for connecting to a gRPC service using an access token without SSL/TLS. - Added
connectWithAccessToken()for connecting to a gRPC service using an access token with SSL/TLS. - Added the following new CIM classes:
AssetFunction, the function performed by an asset.BatteryControl, a new class which describes behaviour specific to controlling aBatteryUnit.Clamp: A Clamp is a galvanic connection at a line segment where other equipment is connected. A Clamp does not cut the line segment. A Clamp is ConductingEquipment and has one Terminal with an associated ConnectivityNode. Any other ConductingEquipment can be connected to the Clamp ConnectivityNode. NOT CURRENTLY FULLY SUPPORTED BY TRACINGControlledAppliance, a new class representing the identity of the appliance controlled by a specificEndDeviceFunction.Cut: A cut separates a line segment into two parts. The cut appears as a switch inserted between these two parts and connects them together. As the cut is normally open there is no galvanic connection between the two line segment parts. But it is possible to close the cut to get galvanic connection. The cut terminals are oriented towards the line segment terminals with the same sequence number. Hence the cut terminal with sequence number equal to 1 is oriented to the line segment's terminal with sequence number equal to 1. The cut terminals also act as connection points for jumpers and other equipment, e.g. a mobile generator. To enable this, connectivity nodes are placed at the cut terminals. Once the connectivity nodes are in place any conducting equipment can be connected at them. NOT CURRENTLY FULLY SUPPORTED BY TRACINGEndDeviceFunction, the function performed by an end device such as a meter, communication equipment, controllers, etc.PanDemandResponseFunction, a new class which containsEndDeviceFunctionKindand the identity of theControlledApplianceof this function.PerLengthPhaseImpedance, a new class used for representing the impedance of individual wires on an AcLineSegment.PhaseImpedanceData, a data class with a link toPerLengthPhaseImpedance, for capturing the phase impedance data of an individual wire.StaticVarCompensator, a new class representing a facility for providing variable and controllable shunt reactive power.
- Added new enums:
BatteryControlModeEndDeviceFunctionKindSVCControlMode
Enhancements​
- Added
ctPrimaryandminTargetDeadbandtoRegulatingContrl. - Added an unordered collection comparator.
- Added the energized relationship for the current state of network between
FeederandLvFeeder. - Updated
NetworkConsumer'sgetEquipmentForContainers,getEquipmentContainersandgetEquipmentForLoopto allow requesting normal, current or all equipments. - gRPC now supports
FeederDirection.CONNECTOR.
Fixes​
- None.
Notes​
CutandClamphave been added to the model, but no processing for them has been added to the tracing, so results will not be what you expect.
[0.23.0]​
Breaking Changes​
- Updated to latest evolve-grpc major version.
- Removed unused AuthType enum.
- Removed unused kotlinx-serialization-json dependency.
- Updated to latest ewb-conn, and hence the signature of these helper functions have changed:
Connect.connectWithSecret:issuerDomainhas been renamed toissuer;
Connect.connectWithPassword:issuerDomainhas been renamed toissuer;
- Renamed
TablePowerElectronicsUnittoTablePowerElectronicsUnits. - CIM object removal functions no longer support
null. e.g. You must pass a validTerminaltoConductingEquipment.removeTerminalrather than a nullable object. DiagramObject.getPointno longer throws anIndexOutOfRangeexception for an invalid sequence number, and returnsnullto match other functions of this type.- Removed the
PowerTransformer.getRatingoverload which took a rating value. You can still get a rating via itsTransformerCoolingType. - Removed
PowerTransformer.forEachRatingwhich looped over the collection with an index that made no sense. Please loop overPowerTransformer.sRatingsinstead. EquipmenttoEquipmentContainerlinks for LV feeders are no longer written to the database, they should never have been.- Refactored
EwbDataFilePaths: - The
EwbDataFilePathsclass has been refactored into an interface to enhance flexibility and abstraction. - A new class,
LocalEwbDataFilePaths, has been introduced to specifically handle the resolution of database paths for the local file system. Switch.ratedCurrenthas been converted to adouble(used to be aninteger). Type safe languages will need to be updated to support floating point arithmatic/syntax.- Deprecated
TracedPhases, however the internal constructor property has been removed.Terminal.normalPhasesandTerminal.currentPhasesshould be used instead ofTerminal.tracedPhasesgoing forward. JWTAuthoriser.authoriseno longer accepts a permissions claims field, instead it will attempt to retrieve claims from the "permissions" field if it exists in the token, or the "roles" field if the "permissions" field doesn't exist.JWTAuthenticatorhas a new signature to accept a list of trusted domains rather than a single domain, and aJWTMultiIssuerVerifierBuilderrather than aUrlJwkProvider.Auth0AuthHandlerhas a new signature and no longer accepts apermissionsFieldto pass ontoJWTAuthoriser.authorise. (See above change toJWTAuthoriser.authorise)AuthRoute.routeFactoryhas a new signature. Now accepts a list ofTrustedIssuer's in place of aurlJwkProviderandissuer.- Removed obsolete
SwitchStateClientand correspondingSwitchStateUpdatewhich only communicated with a server implementation that logged the functionality was not implemented.
New Features​
- A file named after the ID of an ingestion job is now created when running
MetricsDatabaseWriter.save(). For this feature to take effect, amodelPathmust be provided when constructing theMetricsDatabaseWriter. - You can now remove the following by index:
PositionPointfrom aLocation.DiagramObjectPointfrom aDiagramObject.RelaySettingfrom aProtectionRelayFunction.
- Data Model change:
- Add
phaseCodevariable toUsagePoint - Added new classes:
CurveCurveDataEarthFaultCompensatorGroundingImpedancePetersenCoilReactiveCapabilityCurveRotatingMachineSynchronousMachine
- Add
- Added
OpenDssReportBatchand a newfailureOpenDSS report type to the hosting capacity API. - Updated grpc to support
InterventionConfigand initial implementation ofSwitchState. JWTAuthenticatornow supports authenticating tokens from multiple different issues via the use ofJWTMultiIssuerVerifierBuilder.JWTMultiIssuerVerifierBuilderwill create a JWTVerifier based on theiss(issuer) of the token provided togetVerifier(). The returned JWTVerifier will also validate that the audience claim matches therequiredAudiencesupplied to theJWTMultiIssuerVerifierBuilder.TrustedIssuernow supports lazy fetching ofTrustedIssuer.providerDetailsby accepting a lambda that takes an issuer domain and returns aProviderDetails.
Enhancements​
- Added feature list in documentation.
- Changed
NetworkContainerMetricsto a delegate type to assist in writing metrics creators:NetworkContainerMetrics::plus(key: String, amount: Number): Increases a metric by a certain value. If the metric doesn't exist yet, it is automatically created and set to zero before being increased. A negative value may be used foramountto decrease the metric.NetworkContainerMetrics::inc(key: String): Equivalent toNetworkContainerMetrics.plus(key, 1.0)NetworkContainerMetrics::set(key: String, value: Int): Allows setting a metric using an integer rather than a double-precision float:metrics[TotalNetworkContainer]["metric-name"] = 3
GrpcChannelBuildertests the connectivity of newly created channels before returning them. This is done by callinggetMetadata()against all known services. The channel is returned after the first successful response. Any connectivity errors will be propagated to the user. If no connectivity errors are encountered but no successful responses is received from the known services, aGrpcConnectionExceptionis thrown.
Fixes​
- Update superpom for dokka plugin upgrade so maven central deploy works again.
Notes​
- None.
[0.22.0]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- Added
specialNeedtoCustomerto capture any special needs of the customer, e.g. life support.
Fixes​
- None.
Notes​
- None.
[0.21.0]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- Added
designTemperatureanddesignRatingtoConductorto capture limitations in the conductor based on the network design and physical surrounds of the conductor.
Fixes​
- Use latest version of ewb-conn for fix to issuer key in auth configuration endpoint
Notes​
- None.
[0.20.0]​
Breaking Changes​
- This is the last release using an artifact ID of
evolve-sdk, future releases will be made asewb-sdk. - Removed
EwbDatabaseType. UseDatabaseTypeinstead. - The filename of the
results cachedatabase has been changed toresults-cachefromresults_cache. Any existingresults cachedatabase files will need to be renamed toresults-cacheto continue to be used. - Moved the following modules under
com.zepben.evolve.database.sqlitetocom.zepben.evolve.database.sqlite.cim:customerdiagrammetadatanetworktablesupgrade
- Moved (with some renaming) the following classes from
com.zepben.evolve.database.sqlite.commontocom.zepben.evolve.database.sqlite.cim:BaseServiceReaderBaseServiceWriterBaseDatabaseReaderasCimDatabaseReaderBaseDatabaseTablesasCimDatabaseTablesBaseDatabaseWriterasCimDatabaseWriterBaseCimReaderasCimReaderBaseCimWriterasCimWriter
- Moved
TableVersiontocom.zepben.evolve.database.sqlite.common. Instances for CIM and metrics are incom.zepben.evolve.database.sqlite.cim.tablesandcom.zepben.evolve.database.sqlite.metrics.tablesrespectively.
New Features​
- Added
EwbDataFilePathsfor working with files and folders used by EWB. - Added tables for metrics database (
MetricsDatabaseTables) and model for ingestion job (IngestionJob).- Using
MetricsDatabaseWriter, A singleIngestionJobmay be saved to the database along with its metrics and job sources.
- Using
- Added
METRICSto theDatabaseTypeenum.
Enhancements​
- None.
Fixes​
- None.
Notes​
- None.
[0.19.0]​
Enhancements​
- Update super-pom to 0.36.0 for lucene and ktor dependencies.
[0.18.0]​
Breaking Changes​
- Updated to super-pom version 0.34.x.
IdentifiedObject.addNamehas been refactored to take in aNameTypeand aString. This is doing the same thing under the hood as previousaddName()function, but simplifies the input by lowering the amount of objects that needed to be created prior to adding names. Example usage change:obj.addName(nameType, "name", obj))orobj.addName(nameType.getOrAddName("name", obj))becomesobj.addName(nameType, "name")addName()/removeName()related function for bothIdentifiedObjectandNameTypewill now also perform the same function on the other object type. i.e. Removing a name from the identified object will remove it from the name type and vice versa. Same interaction is also applied to adding a name.- Removed
ProtectionEquipment. - Change of inheritance:
CurrentRelay→ProtectionEquipment. becomesCurrentRelay→ProtectionRelayFunction. - Removed symmetric relation
ProtectionEquipment↔ProtectedSwitch. - Renamed
CurrentRelayInfotoRelayInfo.- The override
assetInfo: RelayInfo?has been moved fromCurrentRelayto its new parent class,ProtectionRelayFunction. - Renamed
RelayInfo.removeDelaytoRelayInfo.removeDelayAt. The original method name has been repurposed to remove a delay by its value rather than its index.
- The override
- Reworked values for enumerable type
ProtectionKind. - Removed
IdentifiedObject.removeNamesFromTypes(). UseIdentifiedObject.clearNames()instead. - Removed
DiagramServiceInstanceCacheandNetworkServiceInstanceCache. - The database has been split into three databases, which will change the imports of most related classes:
- The existing database containing the network model (
*-network-model.sqlite) with classes in thenetworkpackage. - A new database containing the customer information (
*-customers.sqlite) with classes in thecustomerpackage. - A new database containing the diagrams (
*-diagrams.sqlite) with classes in thediagrampackage.
- The existing database containing the network model (
- The database split has resulted in the database classes also being split, e.g.
DatabaseReaderis nowNetworkDatabaseReader,CustomerDatabaseReaderandDiagramDatabaseReader. - Renamed the following tables (and their associated indexes):
battery_unittobattery_unitsphoto_voltaic_unittophoto_voltaic_unitspower_electronics_connectiontopower_electronics_connectionspower_electronics_connection_phasetopower_electronics_connection_phasespower_electronics_wind_unittopower_electronics_wind_unitstransformer_star_impedancetotransformer_star_impedances
- The
UpgradeRunneris no longer used by the database readers. You must now call it directly if you want a database to upgrade. This change has been put in place due to the splitting of the database.
New Features​
- Added
getNames(IdentifiedObject)toNameTypeto retrieve all names associated with theNameTypethat belongs to anIdentifiedObject. - Added
getNames(NameType)andgetNames(String)toIdentifiedObjectso user can retrieve all names for a givenNameTypeof theIdentifiedObject - Added new classes and fields to support advanced modelling of protection relays:
SeriesCompensator: A series capacitor or reactor or an AC transmission line without charging susceptance.Ground: A point where the system is grounded used for connecting conducting equipment to ground.GroundDisconnector: A manually operated or motor operated mechanical switching device used for isolating a circuit or equipment from ground.ProtectionRelayScheme: A scheme that a group of relay functions implement. For example, typically schemes are primary and secondary, or main and failsafe.ProtectionRelayFunction: A function that a relay implements to protect equipment.ProtectionRelaySystem: A relay system for controllingProtectedSwitches.RelaySetting: The threshold settings for a given relay.VoltageRelay: A device that detects when the voltage in an AC circuit reaches a preset voltage.DistanceRelay: A protective device used in power systems that measures the impedance of a transmission line to determine the distance to a fault, and initiates circuit breaker tripping to isolate the faulty section and safeguard the power system.RelayInfo.recloseFast: True if recloseDelays are associated with a fast Curve, False otherwise.RegulatingControl.ratedCurrent: The rated current of associated CT in amps for a RegulatingControl.
Enhancements​
- Added missing collection methods for
RelayInfo.recloseDelays(RelayInfowas previously namedCurrentRelayInfo):RelayInfo.getDelay(sequenceNumber: Int): Double?RelayInfo.forEachDelay(action: (sequenceNumber: Int, delay: Double) -\> Unit)RelayInfo.removeDelay(delay: Double?): Boolean- The original method with this name has been renamed to
RelayInfo.removeDelayAt(index: Int): Double?.
- The original method with this name has been renamed to
- Cleaned up code using IntelliJ code inspection. Some typos in documentation have also been fixed.
- Added missing
@JvmOverloadsfor the constructors of the following CIM classes:NoLoadTest,OpenCircuitTest,PowerTransformerInfo,ShortCircuitTest,ShuntCompensatorInfo,SwitchInfo,TransformerEndInfo,TransformerTankInfo,Pole,Streetlight,TapChangerControl,TransformerStarImpedance,BatteryUnit,PhotoVoltaicUnit,PowerElectronicsWindUnit, andEvChargingUnit. - Added helper properties
t1,t2, andt3toConductingEquipmentwhich get the first, second, and third terminal respectively. ANullPointerExceptionis thrown if there is no such terminal (e.g. evaluatingbr.t3for a breakerbrthat has only two terminals).
Fixes​
- Fixed transitive bug that made a database round-trip test fail on Windows due to an issue in
sqlitejdbc.dll.
Notes​
- None.
[0.17.1]​
Breaking Changes​
- None.
New Features​
- Allow setting gRPC
maxInboundMessageSizeviaGrpcChannelBuilder.build.
Enhancements​
- None.
Fixes​
- Accept larger protobuf messages up to 20MB in size by default.
Notes​
- None.
[0.17.0]​
Breaking Changes​
- None.
New Features​
- Updated to evolve-grpc 0.26.0.
- Updated super-pom to version 0.30.0
- Added
connectWithIdentity()for connecting using Azure Managed Identities.
Enhancements​
- Update docusaurus version and the configuration.
Fixes​
- None.
Notes​
- None.
[0.16.0]​
Breaking Changes​
- Deprecated old style accessors in favour of Kotlin accessors for
SinglePhaseKind. To use the new function make the folloiwng modification to your code:- Kotlin:
spk.value()->spk.valuespk.maskIndex()->spk.maskIndexspk.bitMask()->spk.bitMask
- Java:
spk.value()->spk.getValue()spk.maskIndex()->spk.getMaskIndex()spk.bitMask()->spk.getBitMask()
- Kotlin:
SetDirection.run(NetworkService)will no longer set directions for feeders with a head terminal on an open switch. It is expected these feeders are either placeholder feeders with no meaningful equipment, or are energised from another feeder which will set the directions from the other end.
New Features​
- PowerTransformerEnd now supports multiple ratings based on cooling types attached to the transformer. Use new
addRatingandgetRatingmethods. - Added new classes:
- TapChangerControl
- EvChargingUnit
- RegulatingControl
- Added new fields:
- Equipment.commissionedDate
- UsagePoint
- ratedPower
- approvedInverterCapacity
- ProtectionEquipment
- directable
- powerDirection
- CurrentRelayInfo.recloseDelays
- DER register fields on PowerElectronicsConnection
- Added new enums
- PowerDirectionKind
- RegulatingControlModeKind
- TransformerCoolingType
Enhancements​
- Performance enhancement for
ConnectedEquipmentTracewhen traversing elements with single terminals. - Added support for LV2 below SWER transformers.
- Improved logging when saving a database.
- The
TestNetworkBuilderhas been enhanced with the following features:- You can now set the ID's without having to create a customer 'other' creator.
- Added Kotlin wrappers for
.fromOtherand.toOtherthat allow you to pass a class type rather than a creator. e.g..toOther<Fuse>()instead of.toOther(::Fuse)or.toOther( { Fuse(it) } ). - Added inbuilt support for
PowerElectronicsConnectionandEnergyConsumer - The
to*andconnectfunctions can specify the connectivity node mRID to use. This will only be used if the terminals are not already connected.
- Added
+and-operators toPhaseCodeandSinglePhaseKind. TraversalQueuenow hasaddAllmethods taking either a collection or varargs, which by default will just calladdfor each item, but can be overridden if there is anaddAllavailable on the underlying queue implementation.Traversalhas two new helper methods:ifNotStopping: Adds a step action that is only called if the traversal is not stopping on the item.ifStopping: Adds a step action that is only called if the traversal is stopping on the item.
Fixes​
- Asking for the traced phases as a phase code when there are no nominal phases no longer throws.
- Feeder directions are now stopped at substation transformers in the same way as assigning equipment incase the feeder has no breaker, or the start point is not inline.
Notes​
- Deprecated setting
ratedSon PowerTransformerEnd.
[0.15.0]​
Breaking Changes​
- The CIM consumer clients (network, diagram and customer) have had the following changes:
- Implemented the
AutoCloseableinterface. Existing applications that use any of the clients, but do not provide a gRPC stub directly to those clients, should be refactored to close the client in order to shut down theExecutorServicethat is created under the covers. - You can provide an optional
ExecutorServicewhen creating a client, which is used to monitor the gRPC stub. If one is provided, it will be shutdown when the client is closed.
- Implemented the
- Removed support for
RecloseSequences. This functionality will be re-added to the model in later versions.
New Features​
- Added
getCustomersForContainertoCustomerConsumerClientwhich allows fetching all theCustomers for a givenEquipmentContainer - Added
getDiagramObjectstoDiagramConsumerClientwhich allows fetching all theDiagramObjects matching a given mRID.
Enhancements​
- None.
Fixes​
- Stopped the NetworkConsumerClient from resolving the equipment of an EquipmentContainer when resolving references. Equipment for containers must always be explicitly requested by the client.
Notes​
- None.
[0.14.0]​
Breaking Changes​
- Removed
GrpcChannelFactory. The connect methods in theConnectobject should be used instead.GrpcChannelBuildermay be used if more customisation is required (e.g. TLS client authentication). - Renamed
FeederDirection.hastoFeederDirection.contains, which can be used via its operator versionin. e.g.BOTH.has(DOWNSTREAM)can be replaced withBOTH.contains(DOWNSTREAM)orDOWNSTREAM in BOTH - Removed deprecated function
NetworkConsumerClient.getFeeder. - Renamed function 'breadFirstSupplier' to 'breadthFirstSupplier' in 'BasicQueue' class.
New Features​
- Added EquivalentNetworkUtils class that contains utility methods to add equivalent networks to the edges of gRPC requested network services.
- Added methods for connecting to the gRPC service in a utility object named
Connect:Connect.connectInsecure: Used to connect to a gRPC service that does not use SSL/TLS.Connect.connectTls: Used to connect to a gRPC service that uses SSL/TLS, without user authentication.Connect.connectWithSecret: Used to connect to a gRPC service that uses SSL/TLS, using the OAuth 2.0 client credential flow.Connect.connectWithPassword: Used to connect to a gRPC service that uses SSL/TLS, using the OAuth 2.0 password grant flow.
- Added support for current transformers and power transformers with the following classes in
com.zepben.evolve.cim.*:- In
com.zepben.evolve.cim.iec61968.infiec61968.infassetinfo:CurrentTransformerInfo: Properties of current transformer asset.PotentialTransformerInfo: Properties of potential transformer asset.
- In
com.zepben.evolve.cim.iec61968.infiec61968.infcommon:Ratio: Fraction specified explicitly with a numerator and denominator, which can be used to calculate the quotient.
- In
com.zepben.evolve.cim.iec61970.base.auxiliaryequipment:CurrentTransformer: Instrument transformer used to measure electrical qualities of the circuit that is being protected and/or monitored.PotentialTransformer: Instrument transformer (also known as Voltage Transformer) used to measure electrical qualities of the circuit that is being protected and/or monitored.PotentialTransformerKind: The construction kind of the potential transformer. (Enum)Sensor: This class describes devices that transform a measured quantity into signals that can be presented at displays, used in control or be recorded.
- In
- Added
PowerTransformer().getEnd(Terminal), which gets aPowerTransformerEndby theTerminalit's connected to. - Added the following functions to
ConnectedEquipmentTracefor creating traces that work onConductingEquipment, and ignore phase connectivity, instead considering things to be connected if they share aConnectivityNode:newNormalDownstreamEquipmentTrace: Creates a trace that traverses in the downstream direction using the normal state of the network.newNormalUpstreamEquipmentTrace: Creates a trace that traverses in the upstream direction using the normal state of the network.newCurrentDownstreamEquipmentTrace: Creates a trace that traverses in the downstream direction using the current state of the network.newCurrentUpstreamEquipmentTrace: Creates a trace that traverses in the upstream direction using the current state of the network.
- Added support for protection equipment with the following classes, enums, and fields:
SwitchInfo: Switch datasheet information.ProtectionEquipment: An electrical device designed to respond to input conditions in a prescribed manner and after specified conditions are met to cause contact operation or similar abrupt change in associated electric control circuits, or simply to display the detected condition.CurrentRelay: A device that checks current flow values in any direction or designated direction.CurrentRelayInfo: Current relay datasheet information.RecloseSequence: A reclose sequence (open and close) is defined for each possible reclosure of a breaker.ProtectionKind: The kind of protection being provided by this protection equipment.ProtectedSwitch::breakingCapacity: The maximum fault current in amps a breaking device can break safely under prescribed conditions of use.Switch::ratedCurrent: The maximum continuous current carrying capacity in amps governed by the device material and construction. The attribute shall be a positive value.Breaker::inTransitTime: The transition time from open to close in seconds.
Enhancements​
- Added
FeederDirection.notoperator function.
Fixes​
NetworkService.removeforLvFeederfunction fixed (previously added instead).- Added confirmation of removal to the remove component test.
- Fixed bug where limited connected traces with
maximumSteps = 1could include equipment 2 steps away when using a direction. - Made
typecolumn ofpotential_transformersnon-null. - AssignToFeeders now correctly assigns AuxiliaryEquipment.
- AssignToLvFeeders now correctly assigns AuxiliaryEquipment.
- AssignToFeeders now correctly assigns ProtectionEquipment.
- AssignToLvFeeders now correctly assigns ProtectionEquipment.
Notes​
- None.
[0.13.0]​
Breaking Changes​
- Replaced
Equipment().currentFeederswithEquipment().currentContainers, which yields aCollection<EquipmentContainer>instead of aCollection<Feeder>. - Changed the
AssignToFeederstrace to stop at and exclude LV equipment, which should now be added to the newLvFeederobject. - Renamed
Tracing().assignEquipmentContainerToFeederstoTracing().assignEquipmentToFeeders - Changed the minimum supported database version to v43.
New Features​
- Added support for YYN single phase transformers when determining phases.
- Added
LvFeeder, a branch of LV network starting at a distribution substation and continuing until the end of the LV network. - Added the following optional arguments to
NetworkConsumerClient().getEquipment(For)Container(s):includeEnergizingContainers: Specifies whether to include equipment from containers energizing the ones listed inmRIDs. This is of the enum typeIncludedEnergizingContainers, which has three possible values:EXCLUDE_ENERGIZING_CONTAINERS: No additional effect (default).INCLUDE_ENERGIZING_FEEDERS: Include HV/MV feeders that power LV feeders listed inmRIDs.INCLUDE_ENERGIZING_SUBSTATIONS: In addition toINCLUDE_ENERGIZING_FEEDERS, include substations that energize a HV/MV feeder listed inmRIDsor included viaINCLUDE_ENERGIZING_FEEDERS.
includeEnergizedContainers: Specifies whether to include equipment from containers energized by the ones listed inmRIDs. This is of the enum typeIncludedEnergizedContainers, which has three possible values:EXCLUDE_ENERGIZED_CONTAINERS: No additional effect (default).INCLUDE_ENERGIZED_FEEDERS: Include HV/MV feeders powered by substations listed inmRIDs.INCLUDE_ENERGIZED_LV_FEEDERS: In addition toINCLUDE_ENERGIZED_FEEDERS, include LV feeders that are energizes by a HV/MV feeder listed inmRIDsor included viaINCLUDE_ENERGIZED_FEEDERS.
- Added
FindSwerEquipmentclass which can be used for finding the SWER equipment in aNetworkServiceorFeeder.
Enhancements​
- None.
Fixes​
- Failure when reading in database tables will now cause a short-circuit failure when all tables are loaded rather than after post load processing.
- Corrected function that calculates the equivalent impedance of a transformer from the results of a short circuit test.
Notes​
- None.
[0.12.0]​
Breaking Changes​
- Changed
TestNetworkBuilderto have a public constructor and removedstartWith*functions. ChangeTestNetworkBuilder.startWith*toTestNetworkBuilder().from*(kotlin), ornew TestNetworkBuilder().from*(java). - Changed
TestNetworkBuilder.fromOtherandTestNetworkBuilder.toOtherto take a creator, rather than an instance. - Modified
ConnectedEquipmentTracein the following ways:- Moved from package
com.zepben.evolve.services.network.tracingtocom.zepben.evolve.services.network.tracing.connectivity. - Changed to process a
ConnectedEquipmentStep, rather thanConductingEquipmentdirectly.ConnectedEquipmentStepstores both theConductingEquipment, plus the number of steps taken from the starting object. - Changed the return types from
BassicTraversal<ConductingEquipment>toConnectedEquipmentTraversalwhich has a helper method for starting the trace directly fromConductingEquipment - Updated to use
ConnectedEquipmentStepTrackerwhich allows revisitingConductingEquipmentif a shorter path is found.
- Moved from package
New Features​
- Added
LimitedConnectedEquipmentTrace, which can be used to trace fromConductingEquipmentlimiting by the number of steps, and optionally, feeder direction.
Enhancements​
TestNetworkBuilder.build()will now assign equipment to feeders if feeders were added to the network.
Fixes​
TreeNode().sortWeightno longer throws an error when evaluated on nodes for equipment without terminals.PhaseStepTrackernow reports strict subsets of visited phases as visited.
Notes​
- None.
[0.11.0]​
Breaking Changes​
- Made
Terminalmethodsconnectanddisconnectinternal as they were always meant to be. If you have been incorrectly using them, you will need to swap to using the methods fromNetworkServiceinstead.
New Features​
- None.
Enhancements​
- Added
connectedTerminalsandotherTerminalshelper methods toTerminal.
Fixes​
- None.
Notes​
- None.
[0.10.0]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- None.
Fixes​
SetPhasesnow supports setting backwards through XN/XY transformers.
Notes​
- None.
[0.9.0]​
Breaking Changes​
- None.
New Features​
- None.
Enhancements​
- Phases are now set through transformers allowing for phase changes. Only valid phase mappings are currently supported. If a valid mapping has been missed, please contact Zepben.
- You can now translate
TracedPhasesto aPhaseCodeif the individual phases make sense. - Added
PhaseCodehelper methodsforEach,map,anyandall.
Fixes​
SetDirectionnow correctly handlesSwitchinstances without phases.SetPhasesno longer removes phases when there is an LV loop with mixed single and 3-phase.
Notes​
- None.
[0.8.0]​
Breaking Changes​
- Changed the
FindWithUsagePointstrace to handle changes to the LV aggregation via virtualUsagePointinstances. - Updated database version.
TownDetailfields are now nullable.- Renamed
PhaseDirectiontoFeederDirection:INrenamed toUPSTREAMOUTrenamed toDOWNSTREAM
- Separated feeder direction from phase.
- Direction has been removed from
TracedPhasesand is now accessed directly off theTerminal. - Direction has been removed from
PhaseStatusand is now accessed viaDirectionStatus.
- Direction has been removed from
- The following
Terminalfields are now Kotlin properties rather than accessor functions:connectivityNodeIdisConnectednormalPhasescurrentPhases
PhaseCode.singlePhasesis now a Kotlin read-only property rather than an accessor function.
New Features​
- Added the following CIM classes/enums:
TransformerConstructionKindTransformerFunctionKindStreetDetail
- Added
TestNetworkBuilderwhich can be used to create simple test networks.
Enhancements​
- Added fields to
PowerTransformerto defineconstructionKindandfunction. - Added fields to
StreetAddressto definepoBoxandstreetDetail. - Added fields to
EnergySourceto allow representation of a higher-level power grid connection modelled as a slack bus. - Reworked phase connectivity to better handle unknown primary phases (X/Y).
Fixes​
- Column names fixed for
TableBaseVoltages.NOMINAL_VOLTAGE,TableRemoteSources.MEASUREMENT_MRID, andTableControls.CONTROL_MRID- database upgrade path provided. - Relaxed the constraint on
power_electronics_connection_mrid(no longer unique) in the following tables:battery_unitphoto_voltaic_unitpower_electronics_wind_unitpower_electronics_connection_phase
Notes​
- None.
[0.7.0]​
Breaking Changes​
NetworkHierarchyhas been updated to use CIM classes.getFeederhas been deprecated. Prefer the use of the more genericgetEquipmentContainer.getIdentifiedObjectnow returns aNoSuchElementExceptionerror if the requested object does not exist rather than anullsuccessful result.- All
CimConsumerClientimplementations have been changed to control a single service rather than one per call. NetworkConsumerClienthas been updated to use the async stub internally and has received a significant performance boost. This only has an impact if you are passing the stub directly to the client rather than a channel.- All SDK methods that retrieve objects with references will now request the network hierarchy first to provide a consistent result, regardless of call order.
- Primitive values on CIM classes are now nullable to allow differentiation between missing and zero values.
- Fixed typo in
NetworkServiceComparator. Was previouslyNetworkServiceCompatatorOptions. - Changed
DiagramObject.styleto be a string and removedDiagramObjectStyleenum. - Updated to use v0.15.0 gRPC protocols.
- Moved
ConnectivityResultfrom packagecom.zepben.evolve.services.network.tracingtocom.zepben.evolve.services.network.tracing.connectivity.
New Features​
- Added normal and current version of the connected equipment trace. See
Tracingfor details. - Added a generic API call,
getEquipmentContainer, for populating theEquipmentof anEquipmentContainer. - Added API calls for getting loops.
- Added
RunStreamingexamples to the tests, which can be used to talk to a real server. - Added the following CIM classes:
EquivalentBranchEquivalentEquipmentNoLoadTestOpenCircuitTestShortCircuitTestShuntCompensatorInfoTransformerTest
- Objects that belong to a parent object will now be automatically assigned if the parent is null when added. e.g. a
Terminalwith noConductingEquipmentwill be automatically associated to anyConductingEquipmentto which it is added. - Added a helper function to
Breakerto identify if it is the head of aFeeder. - Added
isVirtualandconnectionCategorytoUsagePoint - Created new traces for tracing connectivity using
ConnectivityResult. These are available viaTracing.
Enhancements​
NetworkHierarchynow contains circuits and loops.- Speed of
BaseService.gethas been improved when an explict type is not provided. getIdentifiedObjectscan now take aSequenceof mRIDs in addition to anIterablefor performance reasons.GrpcChannelnow attempts to clean up channels that fail to shut down.
Fixes​
getIdentifiedObjectsnow adds unknown mRIDs to the failed collection.- Fixed an error in the typing for
GrpcResultthat allowed you to set a value tonullwithout specifying a nullable type. - Fixed errors in the decoding fromm protobuf of optional reference mRIDs that were not assigned.
- Corrected string conversion of
ServiceDifferenceswithNameTypedifferences.
Notes​
- None.
[0.6.0]​
Breaking Changes​
GrpcChannelFactory.create()now returns aGrpcChannel, which is a wrapper around aChannelorManagedChannel. This should only be breaking for Java users.BatteryUnitratedEandstoredEare nowLonginstead ofDouble.- The package for
DownstreamTreehas been changed from*.tracingto*.tracing.tree, you will need to reimport. DownstreamTree.TreeNodehas been moved to a top level class in the*.tracing.treepackage.- Converted the remaining tracing classes to Kotlin. This will require fixing of many getter calls to include a
get*from Java and removal of the function call in Kotlin etc.
New Features​
-
New class
GrpcChannelthat can be used in try-with-resources blocks when communicating with a Grpc server. -
NetworkConsumerClient has 4 new functions:
-
For fetching equipment for an EquipmentContainer
getEquipmentForContainer(service: NetworkService, mrid: String)
-
For fetching current equipment for a Feeder
getCurrentEquipmentForFeeder(service: NetworkService, mrid: String)
-
For fetching equipment for an OperationalRestriction
getEquipmentForRestriction(service: NetworkService, mrid: String)
-
For fetching terminals for a ConnectivityNode
getTerminalsForConnectivityNode(service: NetworkService, mrid: String)
-
-
NetworkConsumerClient.get_feeder()now resolves all references, and thus you can expect to receive a Feeder with all equipment and their associations populated. -
New class
SwitchStateClientthat allows you to set the current state of switches via a gRPC service. -
BaseService has two new functions which allow retrieving the UnresolvedReferences for an mRID by either
toMridorfrom.mRID:- getUnresolvedReferencesTo(mRID: String): Sequence<UnresolvedReference<,>>
- getUnresolvedReferencesFrom(mRID: String): Sequence<UnresolvedReference<,>>
-
Added the following classes:
LoadBreakSwitchTransformerEndInfoTransformerTankInfoTransformerStarImpedanceNameNameType
-
New class
JwtCredentialsadded to support managing OAuth2 refresh tokens from Auth0. To be using with the gRPC Consumer and Producer clients which now also acceptJwtCredentialsor otherCallCredentialsat initialisation to apply to the stub.
Enhancements​
- Added some better testing mechanism for database upgrades.
- Instantiating database reader / writer classes is now faster. (Mainly benefits tests)
Fixes​
Resolvers.powerElectronicsConnection(powerElectronicsUnit: PowerElectronicsUnit).Resolvers.powerElectronicsConnection(powerElectronicsConnectionPhase: PowerElectronicsConnectionPhase)Resolvers.powerElectronicsUnit(powerElectronicsConnection: PowerElectronicsConnection)Resolvers.powerElectronicsConnectionPhase(powerElectronicsConnection: PowerElectronicsConnection)now all have their reverse resolver assigned.
Notes​
- Name and NameType classes enable the ability to give IdentifiedObjects multiple names.
[0.5.0]​
Breaking Changes​
None.
New Features​
- Added the following classes:
BatteryUnitBusbarSectionPhotoVoltaicUnitPowerElectronicsConnectionPowerElectronicsConnectionPhasePowerElectronicsWindUnit
Enhancements​
- None.
Fixes​
- None.
Notes​
- None.
[0.4.0]​
Breaking Changes​
- Updated logic for the PhaseInferrer. When trying to fix missing phases it will first check if it has nominal phase data available and use it before trying to infer the phase.
- The
AssignToFeederswas changed to assign allConductingEquipmenton thenormalHeadTerminalside (inclusive) stopping at open points, head equipment for other feeders and substation transformers. - You can no longer run
AssignToFeedersdirectly on a feeder. getIdentifiedObjectsin the consumer clients now returns aGrpcResultof aMultiObjectResult, which includes the map of objects added plus a new fieldfailedwhich is the set of mRIDs that were not added to the service because another object with the samemRIDalready existed.getFeederinNetworkConsumerClientnow returns aGrpcResultas pergetIdentifiedObjectsaddFromPbnow return nullable types. They will return null when adding to the service returnsfalse.NetworkProtoToCim.toCim(ConnectivityNode)will no longer update an existing ConnectivityNode if it already exists in the service. This brings the serialisation into line with all othertoCim()functions, however means that deserialising the sameConnectivityNodemultiple times will now fail rather than merging theConnectivityNodes.Equipmentis now added to aFeedereven if the phasing is broken. Side effect of this is un-ganged normal switching will no longer assign feeders correctly.- Packages have been reworked, you will need to update your imports.
- Removed obsolete
PositionPointParser. - Improved connectivity when using XY phasing.
- Default value for transformerUtilisation property in PowerTransformer class was updated from 0.0 to NaN.
- Added PowerTransformerInfo class.
- Updated PowerTransformer's assetInfo property to hold instance of PowerTransformerInfo class.
New Features​
- None.
Enhancements​
- Updated
Feederto allow for updating thenormalHeadTerminalif the feeder has no equipment assigned. - Added transformer utilisation property to PowerTransformer class
- PhaseInferrer now supports Neutral phase.
Fixes​
- None.
Notes​
- None.
[0.3.0]​
Breaking Changes​
tryGrpcno longer throws. Helper methods have been added toGrpcResultproviding convenient ways of maintaining the previous functionality.
New Features​
- Added
getFeederhelper to theNetworkConsumerClient. - Added
customeranddiagramconsumer clients. - Added
MetadataCollectionallowing you to specifyDataSourceinformation.
Enhancements​
- The gRPC consumer and producer clients now share a common base class.
- Added primaryVoltage property to PowerTransformer for convenience.
Fixes​
- Fixed null annotations on
ConnectivityResult.
Notes​
- None.
[0.2.0]​
Breaking Changes​
ConnectivityResultis now immutable.
New Features​
- None.
Enhancements​
- Tweaked error handling in the
putpackage.
Fixes​
- Database upgrade now takes its backup before changing the version table to change sets.
RemovePhasesnow supports SWER.FindWithUsagePointsnow supports first terminal sequence numbers greater than one.
Notes​
- None.
[0.1.0]​
Initial release containing the Zepben CIM profile, database [de]serialisation, protobuf [de]serialisation, network model tracing, and gRPC producer clients.