Release History
Version | Released |
---|---|
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.1 | 22 August 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.
[0.24.1]
Breaking Changes
- Added
connectionTestTimeoutMs
field toGrpcBuildArgs
with 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
BaseService
no longer accept aMetadataCollection
, and will instead use the collection of the provided service. AcLineSegment.perLengthSequenceImpedance
has been corrected toperLengthImpedance
. This has been done in a non-breaking way, however the public resolverResolvers.perLengthSequenceImpedance
is nowResolvers.perLengthImpedance
, correctly reflecting the CIM relationship.- Removed
getCurrentEquipmentForFeeder
implementation forNetworkConsumer
as 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.
BaseService
now contains aMetadataCollection
to tightly couple the metadata to the associated service.- Added
Services
, a new class which contains a copy of eachBaseService
supported 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 containsEndDeviceFunctionKind
and the identity of theControlledAppliance
of 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:
BatteryControlMode
EndDeviceFunctionKind
SVCControlMode
Enhancements
- Added
ctPrimary
andminTargetDeadband
toRegulatingContrl
. - Added an unordered collection comparator.
- Added the energized relationship for the current state of network between
Feeder
andLvFeeder
. - Updated
NetworkConsumer
'sgetEquipmentForContainers
,getEquipmentContainers
andgetEquipmentForLoop
to allow requesting normal, current or all equipments. - gRPC now supports
FeederDirection.CONNECTOR
.
Fixes
- None.
Notes
Cut
andClamp
have 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
:issuerDomain
has been renamed toissuer
;
Connect.connectWithPassword
:issuerDomain
has been renamed toissuer
;
- Renamed
TablePowerElectronicsUnit
toTablePowerElectronicsUnits
. - CIM object removal functions no longer support
null
. e.g. You must pass a validTerminal
toConductingEquipment.removeTerminal
rather than a nullable object. DiagramObject.getPoint
no longer throws anIndexOutOfRange
exception for an invalid sequence number, and returnsnull
to match other functions of this type.- Removed the
PowerTransformer.getRating
overload which took a rating value. You can still get a rating via itsTransformerCoolingType
. - Removed
PowerTransformer.forEachRating
which looped over the collection with an index that made no sense. Please loop overPowerTransformer.sRatings
instead. Equipment
toEquipmentContainer
links for LV feeders are no longer written to the database, they should never have been.- Refactored
EwbDataFilePaths
: - The
EwbDataFilePaths
class 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.ratedCurrent
has 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.normalPhases
andTerminal.currentPhases
should be used instead ofTerminal.tracedPhases
going forward. JWTAuthoriser.authorise
no 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.JWTAuthenticator
has a new signature to accept a list of trusted domains rather than a single domain, and aJWTMultiIssuerVerifierBuilder
rather than aUrlJwkProvider
.Auth0AuthHandler
has a new signature and no longer accepts apermissionsField
to pass ontoJWTAuthoriser.authorise
. (See above change toJWTAuthoriser.authorise
)AuthRoute.routeFactory
has a new signature. Now accepts a list ofTrustedIssuer
's in place of aurlJwkProvider
andissuer
.- Removed obsolete
SwitchStateClient
and correspondingSwitchStateUpdate
which 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, amodelPath
must be provided when constructing theMetricsDatabaseWriter
. - You can now remove the following by index:
PositionPoint
from aLocation
.DiagramObjectPoint
from aDiagramObject
.RelaySetting
from aProtectionRelayFunction
.
- Data Model change:
- Add
phaseCode
variable toUsagePoint
- Added new classes:
Curve
CurveData
EarthFaultCompensator
GroundingImpedance
PetersenCoil
ReactiveCapabilityCurve
RotatingMachine
SynchronousMachine
- Add
- Added
OpenDssReportBatch
and a newfailure
OpenDSS report type to the hosting capacity API. - Updated grpc to support
InterventionConfig
and initial implementation ofSwitchState
. JWTAuthenticator
now supports authenticating tokens from multiple different issues via the use ofJWTMultiIssuerVerifierBuilder
.JWTMultiIssuerVerifierBuilder
will create a JWTVerifier based on theiss
(issuer) of the token provided togetVerifier()
. The returned JWTVerifier will also validate that the audience claim matches therequiredAudience
supplied to theJWTMultiIssuerVerifierBuilder
.TrustedIssuer
now supports lazy fetching ofTrustedIssuer.providerDetails
by accepting a lambda that takes an issuer domain and returns aProviderDetails
.
Enhancements
- Added feature list in documentation.
- Changed
NetworkContainerMetrics
to 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 foramount
to 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
GrpcChannelBuilder
tests 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, aGrpcConnectionException
is 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
specialNeed
toCustomer
to 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
designTemperature
anddesignRating
toConductor
to 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
. UseDatabaseType
instead. - The filename of the
results cache
database has been changed toresults-cache
fromresults_cache
. Any existingresults cache
database files will need to be renamed toresults-cache
to continue to be used. - Moved the following modules under
com.zepben.evolve.database.sqlite
tocom.zepben.evolve.database.sqlite.cim
:customer
diagram
metadata
network
tables
upgrade
- Moved (with some renaming) the following classes from
com.zepben.evolve.database.sqlite.common
tocom.zepben.evolve.database.sqlite.cim
:BaseServiceReader
BaseServiceWriter
BaseDatabaseReader
asCimDatabaseReader
BaseDatabaseTables
asCimDatabaseTables
BaseDatabaseWriter
asCimDatabaseWriter
BaseCimReader
asCimReader
BaseCimWriter
asCimWriter
- Moved
TableVersion
tocom.zepben.evolve.database.sqlite.common
. Instances for CIM and metrics are incom.zepben.evolve.database.sqlite.cim.tables
andcom.zepben.evolve.database.sqlite.metrics.tables
respectively.
New Features
- Added
EwbDataFilePaths
for working with files and folders used by EWB. - Added tables for metrics database (
MetricsDatabaseTables
) and model for ingestion job (IngestionJob
).- Using
MetricsDatabaseWriter
, A singleIngestionJob
may be saved to the database along with its metrics and job sources.
- Using
- Added
METRICS
to theDatabaseType
enum.
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.addName
has been refactored to take in aNameType
and 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 bothIdentifiedObject
andNameType
will 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
CurrentRelayInfo
toRelayInfo
.- The override
assetInfo: RelayInfo?
has been moved fromCurrentRelay
to its new parent class,ProtectionRelayFunction
. - Renamed
RelayInfo.removeDelay
toRelayInfo.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
DiagramServiceInstanceCache
andNetworkServiceInstanceCache
. - 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 thenetwork
package. - A new database containing the customer information (
*-customers.sqlite
) with classes in thecustomer
package. - A new database containing the diagrams (
*-diagrams.sqlite
) with classes in thediagram
package.
- The existing database containing the network model (
- The database split has resulted in the database classes also being split, e.g.
DatabaseReader
is nowNetworkDatabaseReader
,CustomerDatabaseReader
andDiagramDatabaseReader
. - Renamed the following tables (and their associated indexes):
battery_unit
tobattery_units
photo_voltaic_unit
tophoto_voltaic_units
power_electronics_connection
topower_electronics_connections
power_electronics_connection_phase
topower_electronics_connection_phases
power_electronics_wind_unit
topower_electronics_wind_units
transformer_star_impedance
totransformer_star_impedances
- The
UpgradeRunner
is 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)
toNameType
to retrieve all names associated with theNameType
that belongs to anIdentifiedObject
. - Added
getNames(NameType)
andgetNames(String)
toIdentifiedObject
so user can retrieve all names for a givenNameType
of 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 controllingProtectedSwitch
es.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
(RelayInfo
was 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
@JvmOverloads
for 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
, andt3
toConductingEquipment
which get the first, second, and third terminal respectively. ANullPointerException
is thrown if there is no such terminal (e.g. evaluatingbr.t3
for a breakerbr
that 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
maxInboundMessageSize
viaGrpcChannelBuilder.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.value
spk.maskIndex()
->spk.maskIndex
spk.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
addRating
andgetRating
methods. - 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
ConnectedEquipmentTrace
when traversing elements with single terminals. - Added support for LV2 below SWER transformers.
- Improved logging when saving a database.
- The
TestNetworkBuilder
has 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
.fromOther
and.toOther
that 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
PowerElectronicsConnection
andEnergyConsumer
- The
to*
andconnect
functions can specify the connectivity node mRID to use. This will only be used if the terminals are not already connected.
- Added
+
and-
operators toPhaseCode
andSinglePhaseKind
. TraversalQueue
now hasaddAll
methods taking either a collection or varargs, which by default will just calladd
for each item, but can be overridden if there is anaddAll
available on the underlying queue implementation.Traversal
has 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
ratedS
on PowerTransformerEnd.
[0.15.0]
Breaking Changes
- The CIM consumer clients (network, diagram and customer) have had the following changes:
- Implemented the
AutoCloseable
interface. 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 theExecutorService
that is created under the covers. - You can provide an optional
ExecutorService
when 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
getCustomersForContainer
toCustomerConsumerClient
which allows fetching all theCustomer
s for a givenEquipmentContainer
- Added
getDiagramObjects
toDiagramConsumerClient
which allows fetching all theDiagramObject
s 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 theConnect
object should be used instead.GrpcChannelBuilder
may be used if more customisation is required (e.g. TLS client authentication). - Renamed
FeederDirection.has
toFeederDirection.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 aPowerTransformerEnd
by theTerminal
it's connected to. - Added the following functions to
ConnectedEquipmentTrace
for 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.not
operator function.
Fixes
NetworkService.remove
forLvFeeder
function fixed (previously added instead).- Added confirmation of removal to the remove component test.
- Fixed bug where limited connected traces with
maximumSteps = 1
could include equipment 2 steps away when using a direction. - Made
type
column ofpotential_transformers
non-null. - AssignToFeeders now correctly assigns AuxiliaryEquipment.
- AssignToLvFeeders now correctly assigns AuxiliaryEquipment.
- AssignToFeeders now correctly assigns ProtectionEquipment.
- AssignToLvFeeders now correctly assigns ProtectionEquipment.
Notes
- None.
v0.13.0
Breaking Changes
- Replaced
Equipment().currentFeeders
withEquipment().currentContainers
, which yields aCollection<EquipmentContainer>
instead of aCollection<Feeder>
. - Changed the
AssignToFeeders
trace to stop at and exclude LV equipment, which should now be added to the newLvFeeder
object. - Renamed
Tracing().assignEquipmentContainerToFeeders
toTracing().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 inmRIDs
or 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 inmRIDs
or included viaINCLUDE_ENERGIZED_FEEDERS
.
- Added
FindSwerEquipment
class which can be used for finding the SWER equipment in aNetworkService
orFeeder
.
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.
v0.12.0
Breaking Changes
- Changed
TestNetworkBuilder
to have a public constructor and removedstartWith*
functions. ChangeTestNetworkBuilder.startWith*
toTestNetworkBuilder().from*
(kotlin), ornew TestNetworkBuilder().from*
(java). - Changed
TestNetworkBuilder.fromOther
andTestNetworkBuilder.toOther
to take a creator, rather than an instance. - Modified
ConnectedEquipmentTrace
in the following ways:- Moved from package
com.zepben.evolve.services.network.tracing
tocom.zepben.evolve.services.network.tracing.connectivity
. - Changed to process a
ConnectedEquipmentStep
, rather thanConductingEquipment
directly.ConnectedEquipmentStep
stores both theConductingEquipment
, plus the number of steps taken from the starting object. - Changed the return types from
BassicTraversal<ConductingEquipment>
toConnectedEquipmentTraversal
which has a helper method for starting the trace directly fromConductingEquipment
- Updated to use
ConnectedEquipmentStepTracker
which allows revisitingConductingEquipment
if a shorter path is found.
- Moved from package
New Features
- Added
LimitedConnectedEquipmentTrace
, which can be used to trace fromConductingEquipment
limiting 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().sortWeight
no longer throws an error when evaluated on nodes for equipment without terminals.PhaseStepTracker
now reports strict subsets of visited phases as visited.
Notes
- None.
v0.12.0
Breaking Changes
- Changed
TestNetworkBuilder
to have a public constructor and removedstartWith*
functions. ChangeTestNetworkBuilder.startWith*
toTestNetworkBuilder().from*
(kotlin), ornew TestNetworkBuilder().from*
(java). - Changed
TestNetworkBuilder.fromOther
andTestNetworkBuilder.toOther
to take a creator, rather than an instance. - Modified
ConnectedEquipmentTrace
in the following ways:- Moved from package
com.zepben.evolve.services.network.tracing
tocom.zepben.evolve.services.network.tracing.connectivity
. - Changed to process a
ConnectedEquipmentStep
, rather thanConductingEquipment
directly.ConnectedEquipmentStep
stores both theConductingEquipment
, plus the number of steps taken from the starting object. - Changed the return types from
BassicTraversal<ConductingEquipment>
toConnectedEquipmentTraversal
which has a helper method for starting the trace directly fromConductingEquipment
- Updated to use
ConnectedEquipmentStepTracker
which allows revisitingConductingEquipment
if a shorter path is found.
- Moved from package
New Features
- Added
LimitedConnectedEquipmentTrace
, which can be used to trace fromConductingEquipment
limiting 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().sortWeight
no longer throws an error when evaluated on nodes for equipment without terminals.PhaseStepTracker
now reports strict subsets of visited phases as visited.
Notes
- None.
v0.11.0
Breaking Changes
- Made
Terminal
methodsconnect
anddisconnect
internal as they were always meant to be. If you have been incorrectly using them, you will need to swap to using the methods fromNetworkService
instead.
New Features
- None.
Enhancements
- Added
connectedTerminals
andotherTerminals
helper methods toTerminal
.
Fixes
- None.
Notes
- None.
v0.10.0
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
SetPhases
now supports setting backwards through XN/XY transformers.
Notes
- None.
v0.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
TracedPhases
to aPhaseCode
if the individual phases make sense. - Added
PhaseCode
helper methodsforEach
,map
,any
andall
.
Fixes
SetDirection
now correctly handlesSwitch
instances without phases.SetPhases
no longer removes phases when there is an LV loop with mixed single and 3-phase.
Notes
- None.
v0.8.0
Breaking Changes
- Changed the
FindWithUsagePoints
trace to handle changes to the LV aggregation via virtualUsagePoint
instances. - Updated database version.
TownDetail
fields are now nullable.- Renamed
PhaseDirection
toFeederDirection
:IN
renamed toUPSTREAM
OUT
renamed toDOWNSTREAM
- Separated feeder direction from phase.
- Direction has been removed from
TracedPhases
and is now accessed directly off theTerminal
. - Direction has been removed from
PhaseStatus
and is now accessed viaDirectionStatus
.
- Direction has been removed from
- The following
Terminal
fields are now Kotlin properties rather than accessor functions:connectivityNodeId
isConnected
normalPhases
currentPhases
PhaseCode.singlePhases
is now a Kotlin read-only property rather than an accessor function.
New Features
- Added the following CIM classes/enums:
TransformerConstructionKind
TransformerFunctionKind
StreetDetail
- Added
TestNetworkBuilder
which can be used to create simple test networks.
Enhancements
- Added fields to
PowerTransformer
to defineconstructionKind
andfunction
. - Added fields to
StreetAddress
to definepoBox
andstreetDetail
. - Added fields to
EnergySource
to 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_unit
photo_voltaic_unit
power_electronics_wind_unit
power_electronics_connection_phase
Notes
- None.
v0.7.0
Breaking Changes
NetworkHierarchy
has been updated to use CIM classes.getFeeder
has been deprecated. Prefer the use of the more genericgetEquipmentContainer
.getIdentifiedObject
now returns aNoSuchElementException
error if the requested object does not exist rather than anull
successful result.- All
CimConsumerClient
implementations have been changed to control a single service rather than one per call. NetworkConsumerClient
has 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.style
to be a string and removedDiagramObjectStyle
enum. - Updated to use v0.15.0 gRPC protocols.
- Moved
ConnectivityResult
from packagecom.zepben.evolve.services.network.tracing
tocom.zepben.evolve.services.network.tracing.connectivity
.
New Features
- Added normal and current version of the connected equipment trace. See
Tracing
for details. - Added a generic API call,
getEquipmentContainer
, for populating theEquipment
of anEquipmentContainer
. - Added API calls for getting loops.
- Added
RunStreaming
examples to the tests, which can be used to talk to a real server. - Added the following CIM classes:
EquivalentBranch
EquivalentEquipment
NoLoadTest
OpenCircuitTest
ShortCircuitTest
ShuntCompensatorInfo
TransformerTest
- Objects that belong to a parent object will now be automatically assigned if the parent is null when added. e.g. a
Terminal
with noConductingEquipment
will be automatically associated to anyConductingEquipment
to which it is added. - Added a helper function to
Breaker
to identify if it is the head of aFeeder
. - Added
isVirtual
andconnectionCategory
toUsagePoint
- Created new traces for tracing connectivity using
ConnectivityResult
. These are available viaTracing
.
Enhancements
NetworkHierarchy
now contains circuits and loops.- Speed of
BaseService.get
has been improved when an explict type is not provided. getIdentifiedObjects
can now take aSequence
of mRIDs in addition to anIterable
for performance reasons.GrpcChannel
now attempts to clean up channels that fail to shut down.
Fixes
getIdentifiedObjects
now adds unknown mRIDs to the failed collection.- Fixed an error in the typing for
GrpcResult
that allowed you to set a value tonull
without specifying a nullable type. - Fixed errors in the decoding fromm protobuf of optional reference mRIDs that were not assigned.
- Corrected string conversion of
ServiceDifferences
withNameType
differences.
Notes
- None.
v0.6.0
Breaking Changes
GrpcChannelFactory.create()
now returns aGrpcChannel
, which is a wrapper around aChannel
orManagedChannel
. This should only be breaking for Java users.BatteryUnit
ratedE
andstoredE
are nowLong
instead ofDouble
.- The package for
DownstreamTree
has been changed from*.tracing
to*.tracing.tree
, you will need to reimport. DownstreamTree.TreeNode
has been moved to a top level class in the*.tracing.tree
package.- 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
GrpcChannel
that 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
SwitchStateClient
that 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
toMrid
orfrom.mRID
:- getUnresolvedReferencesTo(mRID: String): Sequence<UnresolvedReference<,>>
- getUnresolvedReferencesFrom(mRID: String): Sequence<UnresolvedReference<,>>
Added the following classes:
LoadBreakSwitch
TransformerEndInfo
TransformerTankInfo
TransformerStarImpedance
Name
NameType
New class
JwtCredentials
added to support managing OAuth2 refresh tokens from Auth0. To be using with the gRPC Consumer and Producer clients which now also acceptJwtCredentials
or otherCallCredentials
at 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.
v0.5.0
Breaking Changes
None.
New Features
- Added the following classes:
BatteryUnit
BusbarSection
PhotoVoltaicUnit
PowerElectronicsConnection
PowerElectronicsConnectionPhase
PowerElectronicsWindUnit
Enhancements
- None.
Fixes
- None.
Notes
- None.
v0.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
AssignToFeeders
was changed to assign allConductingEquipment
on thenormalHeadTerminal
side (inclusive) stopping at open points, head equipment for other feeders and substation transformers. - You can no longer run
AssignToFeeders
directly on a feeder. getIdentifiedObjects
in the consumer clients now returns aGrpcResult
of aMultiObjectResult
, which includes the map of objects added plus a new fieldfailed
which is the set of mRIDs that were not added to the service because another object with the samemRID
already existed.getFeeder
inNetworkConsumerClient
now returns aGrpcResult
as pergetIdentifiedObjects
addFromPb
now 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 sameConnectivityNode
multiple times will now fail rather than merging theConnectivityNode
s.Equipment
is now added to aFeeder
even 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
Feeder
to allow for updating thenormalHeadTerminal
if the feeder has no equipment assigned. - Added transformer utilisation property to PowerTransformer class
- PhaseInferrer now supports Neutral phase.
Fixes
- None.
Notes
- None.
v0.3.0
Breaking Changes
tryGrpc
no longer throws. Helper methods have been added toGrpcResult
providing convenient ways of maintaining the previous functionality.
New Features
- Added
getFeeder
helper to theNetworkConsumerClient
. - Added
customer
anddiagram
consumer clients. - Added
MetadataCollection
allowing you to specifyDataSource
information.
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.
v0.2.0
Breaking Changes
ConnectivityResult
is now immutable.
New Features
- None.
Enhancements
- Tweaked error handling in the
put
package.
Fixes
- Database upgrade now takes its backup before changing the version table to change sets.
RemovePhases
now supports SWER.FindWithUsagePoints
now supports first terminal sequence numbers greater than one.
Notes
- None.
v0.1.0
Initial release containing the Zepben CIM profile, database [de]serialisation, protobuf [de]serialisation, network model tracing, and gRPC producer clients.