Release History
| Version | Released |
|---|---|
| 1.0.4 | 14 November 2025 |
| 1.0.3 | 29 August 2025 |
| 1.0.0 | 28 August 2025 |
| 0.48.0 | 10 July 2025 |
| 0.47.1 | 13 May 2025 |
| 0.47.0 | 08 May 2025 |
| 0.46.0 | 24 April 2025 |
| 0.45.0 | 26 March 2025 |
| 0.44.0 | 24 January 2025 |
| 0.43.1 | 06 January 2025 |
| 0.43.0 | 05 January 2025 |
| 0.42.0 | 02 December 2024 |
| 0.41.2 | 25 October 2024 |
| 0.41.1 | 23 October 2024 |
| 0.41.0 | 21 October 2024 |
| 0.40.0 | 20 September 2024 |
| 0.39.0 | 23 June 2024 |
| 0.38.0 | 14 May 2024 |
| 0.37.4 | 02 October 2024 |
| 0.37.0 | 14 November 2023 |
| 0.36.0 | 29 September 2023 |
| 0.35.0 | 06 September 2023 |
| 0.34.0 | 24 October 2022 |
| 0.33.0 | 24 October 2022 |
| 0.32.0 | 29 August 2022 |
| 0.29.0 | 14 June 2022 |
| 0.28.0 | 07 June 2022 |
| 0.27.0 | 03 March 2022 |
| 0.26.0 | 07 December 2021 |
| 0.25.0 | 23 September 2021 |
| 0.24.0 | 20 August 2021 |
| 0.23.0 | 16 August 2021 |
| 0.22.0 | 12 February 2021 |
| 0.21.0 | 17 December 2020 |
| 0.20.0 | 14 December 2020 |
| 0.19.0 | 14 December 2020 |
| 0.18.0 | 14 December 2020 |
| 0.17.0 | 11 December 2020 |
| 0.16.0 | 11 December 2020 |
| 0.15.0 | 27 November 2020 |
| 0.14.0 | 27 November 2020 |
| 0.13.0 | 17 November 2020 |
| 0.12.0 | 17 November 2020 |
| 0.11.0 | 04 November 2020 |
| 0.10.0 | 02 November 2020 |
| 0.9.0 | 02 November 2020 |
| 0.8.0 | 30 October 2020 |
| 0.7.0 | 30 October 2020 |
| 0.6.0 | 29 October 2020 |
| 0.5.0 | 29 October 2020 |
NOTE: This library is not yet stable, and breaking changes should be expected until a 1.0.0 release.
[1.0.4]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- Fix an ImportError being raised when calling
Conductor.is_underground() TypeErrors occurring inStepActions will no longer silently pass
Notes
- None.
[1.0.3]
Fixes
- Moved ZepbenTokenAuth to use python dataclasses instead of
zepben.ewb.dataclassy, existing code should work as is.
[1.0.0]
Breaking Changes
- Removed support for Python 3.9. Upgrade your Python environment to at least 3.10.
- Renamed the package to
zepben.ewb. You will need to update all your importszepben.evolve.*->zepben.ewb.*. This also updates the pypi artifact tozepben.ewb. - Renamed
length_from_t1_or_0tolength_from_t1_or_0. - 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. NetworkConsumerClientandSyncNetworkConsumerClientno longer use 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 packagezepben.ewb.streaming.get.EXCLUDE_ENERGIZED_CONTAINERS->NONE.INCLUDE_ENERGIZED_FEEDERS->FEEDERS.INCLUDE_ENERGIZED_LV_FEEDERS->LV_FEEDERS.
IncludedEnergizingContainersfrom packagezepben.ewb.streaming.get.EXCLUDE_ENERGIZING_CONTAINERS->NONE.INCLUDE_ENERGIZING_FEEDERS->FEEDERS.INCLUDE_ENERGIZING_SUBSTATIONS->SUBSTATIONS.
NetworkStatefrom packagezepben.ewb.services.network.ALL_NETWORK_STATE->ALL.NORMAL_NETWORK_STATE->NORMAL.CURRENT_NETWORK_STATE->CURRENT.
- The
zepben.authdependency has been incorporated into the SDK with the following package change:zepben.auth->zepben.ewb.auth. You can also import these directly fromzepben.ewb.
SqliteTablenow subclassesSqlTable.- 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.positiveFlowInDocument.*EnergyConsumer.groundedEnergySource.isExternalGridIdentifiedObject.nameIdentifiedObject.descriptionIdentifiedObject.numDiagramObjectsMeter.companyMeterIdNameType.descriptionPole.classificationPowerSystemResource.numControlsRegulatingCondEq.controlEnabledShuntCompensator.groundedStreetAddress.postalCodeStreetAddress.poBoxStreetDetail.*SynchronousMachine.earthingTapChanger.controlEnabledTransformerEnd.groundedUsagePoint.isVirtual
New Features
- Created a new
SqlTablethat doesn't support creating schema creation statements by default.
Enhancements
EquipmentTreeBuilderwill now calculateleaveswhen specified to do so.
Fixes
- 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
- using
EquipmentTreeBuildermore then once per interpreter will no longer cause therootsto contain more objects then it should due to_rootsbeing a class var - Errors when initiating gRPC connections will now properly be propagated to users.
Notes
- None.
[0.48.0]
Breaking Changes
- Updated to new Tracing API. All old traces will need to be re-written with the new API.
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.FeederDirectionStateOperationshave been reworked to takeNetworkStateOperatorsas a parameter.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.Cutsupports adding a maximum of 2 terminals.NetworkTraceTrackernow uses asetto track visited objects, if you were using unhashable objects this will need to be addressed.- Added a new
debug_loggingandnameparameters to the constructor of the following traces. The helper functions inTracingalso have these parameters, which defaults toNoneandnetwork_trace, 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.StepActionwill now raise an exception ifapplyis overridden. override_applyinstead, or pass the function to__init__
New Features
- Added
ClearDirectionthat clears feeder directions. - 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
- Tracing models with
CutandClampare now supported via the new tracing API. - Added support to
TestNetworkBuilderfor:with_clamp- Adds a clamp to the previously addedAcLineSegmentwith_cut- Adds a cut to the previously addedAcLineSegmentconnect_to- Connects the previously added item, rather than having to specify it again inconnect.- You can now add sites to the
TestNetworkBuilderviaaddSite. - You can now add busbar sections natively with
from_busbar_sectionandto_busbar_section - The prefix for generated mRIDs for "other" equipment can be specified with the
default_mrid_prefixargument infrom_otherandto_other.
- 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.
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.Traversal.is_stopping/Traversal.is_not_stoppingnow acceptStepActionand any child classes, including those subclassingStepActionWithContextValue
Fixes
- When finding
LvFeedersin theSitewe will now excludeLvFeedersthat start with an openSwitch AssignToFeederandAssignToLvFeederwill no longer trace from start terminals that belong to open switches- The follow fixes were added to Traversal and NetworkTrace:
can_stop_on_start_itemnow 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 checkingcan_action_item. CutandClampare now correctly supported inSetDirectionandDirectionCondition.NetworkTracenow handles starting onCut,Clamp, andAcLineSegmentand their terminals in a explicit / sensible way.NetworkTracePathProvidernow correctly handles next paths when starting on aClampterminal.
NetworkTrace/Traversalnow correctly respectscan_stop_on_start_itemwhen providing multiple start items.AssignToFeeders/AssignToLvFeedersnow finds back-fed equipment correctlyAssignToFeedersandAssignToLvFeederswill now associatePowerElectronicUnitswith theirpowerElectronicsConnectionFeeder/LvFeeder.- Phases are now correctly assigned to the LV side of an LV2 transformer that is in parallel with a previously energised LV1 transformer.
- Added missing default network state operators (NORMAL) if you are calling
SetDirection.rundirectly.
Notes
- None.
[0.47.1]
Fixes
- Only resolve PowerSystemResource -> Asset relationship in one direction when calling
get_equipment_containerto stop deadlock. - MultiObjectResult now exposes result types inheriting from IdentifiedObject to allow better type completion
[0.47.0]
Fixes
- Downgrade protobuf and gRPC deps to fix SyncNetworkConsumerClient
[0.46.0]
Breaking Changes
- None.
New Features
- Added relationships between
AssetandPowerSystemResourcewhich enables linkingEquipmenttoPole:Asset.powerSystemResourcesPowerSystemResource.assets
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.45.0]
Breaking Changes
- None.
New Features
- Added support for the following
CurrentStateEventtypes:AddCutEvent.RemoveCutEvent.AddJumperEvent.RemoveJumperEvent.
Enhancements
QueryNetworkStateClient.reportBatchStatuscan be used to send status responses for batches returned from the service viaQueryNetworkStateClient.getCurrentStates.
Fixes
- Specify typing_extensions as a dependency to fix support for Python 3.9 and 3.10
Notes
- None.
[0.44.0]
Breaking Changes
- None.
New Features
- Added the following new CIM classes:
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 TRACINGCut: 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 TRACING
- Added FeederDirection.CONNECTOR, to be used by BusbarSections for their direction to differentiate from BOTH.
Enhancements
- Updated
NetworkConsumerClient'sget_equipment_for_container/s,get_equipment_container,get_equipment_for_loopandget_all_loopsto allow requesting normal, current or all equipments.
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.43.1]
Fixes
- SinglePhaseKind will now be processed correctly when translating from protobuf.
[0.43.0]
Breaking Changes
- Renamed
UpdateNetworkStateClient.SetCurrentStatesRequesttoCurrentStateEventBatch. You will need to update any uses, but the class members are the same. - Removed
ProcessingPausedcurrent state response message as this functionality won't be supported. QueryNetworkStateClient.get_current_statesnow returns aCurrentStateEventBatchrather than just the events themselves.QueryNetworkStateService.on_get_current_statesmust now return a stream ofCurrentStateEventBatchrather than just the events themselves.AcLineSegment.per_length_sequence_impedancehas been corrected toper_length_impedance. This has been done in a non-breaking way, however the public resolverResolvers.per_length_sequence_impedanceis nowResolvers.per_length_impedance, correctly reflecting the CIM relationship.- Removed
get_current_equipment_for_feederimplementation forNetworkConsumerClientas its functionality is now incorporated inget_equipment_for_container.
New Features
- Added
BatchNotProcessedcurrent state response. This is used to indicate a batch has been ignored, rather than just returning aBatchSuccessful. QueryNetworkStateServicenow supportsreportBatchStatus, which requires two new constructor callbacks:on_current_states_status- A callback triggered when the response status of an event returned viaon_get_current_statesis received from the client.on_processing_error- A function that takes a message and optional cause. Called whenon_current_states_statusraises an exception, or theSetCurrentStatesResponseis for an unknown event status.
- Added
PanDemandResponseFunction, a new class which containsEndDeviceFunctionKindand the identity of theControlledApplianceof this function. - Added
BatteryControl, a new class which describes behaviour specific to controlling aBatteryUnit. - Added
StaticVarCompensatora new class representing a facility for providing variable and controllable shunt reactive power. - Added
ControlledAppliancea new class representing the identity of the appliance controlled by a specificEndDeviceFunction. - Added
PerLengthPhaseImpedancea new class used for representing the impedance of individual wires on an AcLineSegment. - Added
PhaseImpedanceDataa data class with a link toPerLengthPhaseImpedance, for capturing the phase impedance data of an individual wire. - Added new enums:
BatteryControlModeEndDeviceFunctionKindSVCControlMode
Enhancements
- All
StateEventFailureclasses now have amessageincluded to give more context to the error. - Added
ct_primaryandmin_target_deadbandtoRegulatingContrl. - Added collection of
BatteryControltoBatteryUnit - Added collection of
EndDeviceFunctionKindtoEndDevice - Added an unordered collection comparator.
- Added the energized relationship for the current state of network between
FeederandLvFeeder. - Updated
NetworkConsumerClientget_equipment_for_container/sto allow requesting normal, current or all equipments.
Fixes
- None.
Notes
- None.
[0.42.0]
Breaking Changes
- Database readers and writes for each
BaseServiceno longer accept aMetadataCollection, and will instead use the collection of the provided service. BaseServiceandMetadataCollectionare no longer dataclassy dataclasses. This will only affect you if you were making use of the auto generated constructors to pass initial values (which didn't always work as expected anyway)- Network state services for updating and querying network state events via gRPC.
- Client functionality for updating and querying network states via gRPC service stub.
New Features
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 a new connection method
connect_with_tokenwhich allows you to connect to the EWB using an access token.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.41.2]
Fixes
- Don't use typing_extensions for Optional import (fixes import of library on Python >3.12)
[0.41.1]
Breaking Changes
- Restrict installation to supported Python versions 3.9 -> 3.12.
[0.41.0]
Breaking Changes
- None.
New Features
- Data Model change:
- Add
phaseCodevariable toUsagePoint - Added new classes:
CurveCurveDataEarthFaultCompensatorGroundingImpedancePetersenCoilReactiveCapabilityCurveRotatingMachineSynchronousMachine
- Add
- Added
designTemperatureanddesignRatingtoConductorto capture limitations in the conductor based on the network design and physical surrounds of the conductor. - Added
specialNeedtoCustomerto capture any special needs of the customer, e.g. life support.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.37.4]
Notes
- Update to support requests up to version 3.0.0 (exclusive)
- Update to corresponding zepben.auth library for requests support
[0.40.0]
Breaking Changes
- 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. - Database table classes now return a
Generatorrather than aListor their index collections. This will have no impact if you are just looping over the result, but it will have an impact if you have inherited your own tables. EquipmenttoEquipmentContainerlinks for LV feeders are no longer written to the database, they should never have been.- Converted the following classes to use
@dataclassfromdataclassesinstead ofdataclassy:PositionPointTownDetailStreetDetailStreetAddressNameDiagramObjectPointRelaySettingTransformerEndRatedSResistanceReactanceDataSource
- All private collections inside our CIM objects that index objects by mrid now raise
KeyErrorrather thanValueErrorif you try and remove an object from an empty collection. - Rationalised accessors for the private collections inside our CIM objects, which has added and/or removed some functions. If you were using one of the removed
functions, there should be another that can give close/equivalent operation. The most notable change is the accessors should now be throwing exceptions
correctly, rather than returning
Nonein some circumstances and throwing in others.Location:get_pointnow throws when provided an invalidsequence_numberrather than returningNone.- Updated error message for providing an incorrect
sequence_numbertoinsert_point.
RelayInfo:get_delayandremove_delay_atnow throw when provided an invalidindexrather than returningNone.- Updated error message for providing an incorrect
indextoadd_delay.
Sensor:- Type information for
get_relay_functionhas been updated to indicate the return value is not optional, as the function throws if themridis unknown.
- Type information for
ConductingEquipment:- Updated error message for providing a
Terminalwith an incorrectsequence_numbertoadd_terminal.
- Updated error message for providing a
IdentifiedObject:get_namenow throws when provided an invalidname_typeornamerather than returningNone.get_namesnow throws when provided an invalidname_typerather than returningNoneif it had no names, or anEmptyListif it had names, but none of the requested type.
DiagramObject:- Updated error message for providing an incorrect
sequence_numbertoinsert_point.
- Updated error message for providing an incorrect
ProtectionRelayFunction:- Updated error message for providing an incorrect
sequence_numbertoadd_threshold. - Type information for
get_thresholdhas been updated to indicate the return value is not optional, as the function throws if thesequence_numberis unknown. - Type information for
remove_thresholdhas been updated to indicate thethresholdto remove is not optional. - Updated error message for providing an incorrect
indextoadd_time_limit. remove_time_limit_by_time_limitwas renamed toremove_time_limit.remove_time_limitwas renamed toremove_time_limit_atand now throws when provided an invalidindexrather than returningNone.- Type information for the following functions have been updated to indicate the return value is not optional, as the functions throw if the
mridis unknown:get_sensorget_protected_switchget_scheme
- Updated error message for providing an incorrect
ProtectionRelayScheme:- Type information for
get_functionhas been updated to indicate the return value is not optional, as the function throws if themridis unknown.
- Type information for
ProtectionRelaySystem:- Type information for
get_schemehas been updated to indicate the return value is not optional, as the function throws if themridis unknown.
- Type information for
PowerTransformerEnd:- Updated error message for providing a
PowerTransformerEndwith an incorrectend_numbertoadd_end. get_rating_by_rated_shas been removed.get_rating_by_cooling_typehas been renamed toget_ratingand now throws when provided an invalidcooling_typerather than returningNone.- The parameters for
add_ratinghave been reordered, andcooling_typenow defaults toUNKNOWN_COOLING_TYPE. add_transformer_end_rated_snow takes a copy of the providedtransformer_end_rated_srather than adding the object directly into the collection.remove_rating_by_cooling_typenow throws when provided an invalidcooling_typerather than returningNone.
- Updated error message for providing a
ProtectedSwitch:- Type information for
get_relay_functionhas been updated to indicate the return value is not optional, as the function throws if themridis unknown.
- Type information for
RegulatingControl:- Type information for
get_regulating_cond_eqhas been updated to indicate the return value is not optional, as the function throws if themridis unknown.
- Type information for
New Features
- Support zepben.auth 0.12.0 which brings support for auth against EWB servers backed by EntraID.
Enhancements
- Added the following accessors/helpers to our CIM objects:
Location.for_each_pointRelayInfo.for_each_pointIdentifiedObject.has_nameDiagramObject.for_each_pointDiagramObject.remove_point_by_sequence_numberProtectionRelayFunction.for_each_thresholdProtectionRelayFunction.remove_threshold_atProtectionRelayFunction.for_each_time_limit
- Added missing
num_controlsfield toPowerSystemResource.
Fixes
- Added missing type information to the following
NameTypefunctions:get_or_add_name,remove_nameandremove_names
Notes
- Updated to support zepben.protobuf 0.27.0. This has actually been supported since 0.38.0, however the released version was not captured in the dependencies.
[0.39.0]
Breaking Changes
- None.
New Features
- Added
EwbDataFilePathsclass for working with the EWB various database files
Enhancements
- Added feature list to documentation.
Fixes
- Updated zepben.auth to 0.11.1 to fix incorrect audience processing when requesting tokens with Entra.
Notes
- None.
[0.38.0]
Breaking Changes
- This is the last release using an artifact name of
zepben.evolve, future releases will be made aszepben.ewb. connect_with_secret()andconnect_with_password()will no longer create aZepbenTokenFetcherdirectly from kwargs.IdentifiedObject.addNamehas been refactored to take in astrand aNameType. This is doing the same thing under the hood as previousadd_name()function, but simplifies the input by lowering the amount of objects that needed to be created prior to adding names. Example usage change:obj.add_name(nameType, "name", obj))orobj.add_name(nameType.getOrAddName("name", obj))becomesobj.add_name("name", nameType)add_name()/remove_name()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
CurrentRelay.relay_infohas been moved fromCurrentRelayto its new parent class,ProtectionRelayFunction. - Renamed
RelayInfo.remove_delaytoRelayInfo.remove_delay_at. 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.
New Features
- Added support for passing the grpc channel configuration options to the
GrpcChannelBuilder. - Added
get_names(IdentifiedObject)toNameTypeto retrieve all names associated with theNameTypethat belongs to anIdentifiedObject. - Added
get_names(NameType)andget_names(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.reclose_fast: True if reclose_delays are associated with a fast Curve, False otherwise.RegulatingControl.rated_current: The rated current of associated CT in amps for a RegulatingControl.
Enhancements
GrpcChannelBuildertests the connectivity of newly created channels before returning them to the user. 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 response is received from the known services, aGrpcConnectionExceptionis thrown.
Fixes
SetDirectionnow traces through non-substation transformers.Feeder.normal_head_terminalcan now be freely updated when theFeederhas no equipment assigned to it.PotentialTransformernow recognised as a valid identified object type when deserializing gRPC messages.
Notes
- Default grpc channel message size is now 20MB.
[0.37.0]
Breaking Changes
-
- Updated to evolve-grpc 0.26.0.
New Features
- PowerTransformerEnd now supports multiple ratings based on cooling types attached to the transformer. Use new
add_ratingandget_ratingmethods.- See notes section for deprecation information of
rated_s.
- See notes section for deprecation information of
- Added new classes:
- TapChangerControl
- EvChargingUnit
- RegulatingControl
- Added new fields:
- Equipment.commissioned_date
- UsagePoint
- rated_power
- approved_inverter_capacity
- ProtectionEquipment
- directable
- power_direction
- CurrentRelayInfo.reclose_delays
- DER register fields on PowerElectronicsConnection
- Added new enums
- PowerDirectionKind
- RegulatingControlModeKind
- TransformerCoolingType
Enhancements
- Update docusaurus and its configuration.
Fixes
- None.
Notes
- Setting PowerTransformerEnd.rated_s directly has been deprecated. You should now use
add_ratingandget_ratingto set arated_salongside a definedTransformerCoolingTypeif one is known. By default thecoolingTypewill beUNKNOWN.
[0.36.0]
Breaking Changes
- None.
New Features
- Support using Azure Entra ID as an auth provider
- Added support for connecting to EWB utilising Azure managed identities. Use the new function
connect_with_identity()
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.35.0]
Breaking Changes
-
Renamed the module for
GrpcChannelBuilderfromchannel_buildertogrpc_channel_builder. -
GrpcChannelBuilder().make_securenow takes filenames instead of bytestrings. The order of the parameters has also been changed:private_keynow comes aftercertificate_chain.- This changes also applies to any TLS parameters in
connect_*functions.
- This changes also applies to any TLS parameters in
-
GrpcChannelBuilder().socket_addresshas been renamed tofor_address. -
GrpcChannelBuilder().token_fetcherhas been renamed towith_token_fetcher. -
Refactored
AuthTokenPluginto a separate module. -
Removed deprecated
connectandconnect_asyncfunctions. They have been replaced with several simpler functions, e.g.connect_with_password. -
Changed
connect_with_secretandconnect_with_passwordparameters:- The address of the authentication config is now specified with a single parameter:
conf_address. - Added optional parameters
verify_confandverify_auth, which are passed through torequests.getandrequests.putwhen fetching the authentication config and requesting access tokens respectively. cais replaced withca_filename, which can be set to the filename of a CA to use when verifying the certificate of the gRPC service.
- The address of the authentication config is now specified with a single parameter:
-
Refactored
TreeNodeclass to its own submodule:zepben.evolve.services.network.tracing.tree.tree_node. -
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.get_feeder. -
Refactored the following
Switchdescendant classes to their own submodules inzepben.evolve.model.cim.iec61970.base.wires:Breakermoved tobreakerDisconnectormoved todisconnectorFusemoved tofuseJumpermoved tojumperLoadBreakSwitchmoved toload_break_switchProtectedSwitchmoved toprotected_switchReclosermoved torecloser
Note that
from zepben.evolve import <ClassName>will still work as usual for all of the above classes. -
DatabaseReader().loadis now an asynchronous function. -
The addition of the
mridandconnectivity_node_mridarguments to theTestNetworkBuilderfunctions has changed the position of theactionargument. If you are using positional arguments you will need to addaction=before your actions if you do not specify your own mRIDs. -
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
- Added support for current transformers and power transformers with the following classes in
zepben.evolve.cim.*:- In
zepben.evolve.cim.iec61968.infiec61968.infassetinfo:CurrentTransformerInfo: Properties of current transformer asset.PotentialTransformerInfo: Properties of potential transformer asset.
- In
zepben.evolve.cim.iec61968.infiec61968.infcommon:Ratio: Fraction specified explicitly with a numerator and denominator, which can be used to calculate the quotient.
- In
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().get_end_by_terminal, which gets aPowerTransformerEndby theTerminalit's connected to. - Added the following functions to
connected_equipment_trace.pyfor creating traces that work onConductingEquipment, and ignore phase connectivity, instead considering things to be connected if they share aConnectivityNode:new_normal_downstream_equipment_trace: Creates a trace that traverses in the downstream direction using the normal state of the network.new_normal_upstream_equipment_trace: Creates a trace that traverses in the upstream direction using the normal state of the network.new_current_downstream_equipment_trace: Creates a trace that traverses in the downstream direction using the current state of the network.new_current_upstream_equipment_trace: 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.ProtectionKind: The kind of protection being provided by this protection equipment.ProtectedSwitch().breaking_capacity: The maximum fault current in amps a breaking device can break safely under prescribed conditions of use.ProtectedSwitch().operated_by_protection_equipment: The collection ofProtectionEquipmentoperating theProtectedSwitch.Switch().rated_current: The maximum continuous current carrying capacity in amps governed by the device material and construction. The attribute shall be a positive value.Breaker().in_transit_time: The transition time from open to close in seconds.
- Added
getCustomersForContainertoCustomerConsumerClientwhich allows fetching all theCustomers for a givenEquipmentContainer - Added
getDiagramObjectstoDiagramConsumerClientwhich allows fetching all theDiagramObjects matching a given mRID. Traversalhas two new helper methods:if_not_stopping: Adds a step action that is only called if the traversal is not stopping on the item.if_stopping: Adds a step action that is only called if the traversal is stopping on the item.
Enhancements
trackeris now a field inTraversal, rather than its subclasses.- The constructor for
BranchRecursiveTraversalnow defaults theprocess_queuefield todepth_first(). TreeNodeis now more closely aligned with its Kotlin version:TreeNode().parentis now a read-only property.TreeNode().childrenhas been added as a read-only property that yields each child node.TreeNode().sort_weighthas been added as a read-only property that returns the sort weight of the node.
- All
Trackerclasses can now be copied using thecopymethod. - Added
FeederDirection.__not__operator function. - Performance enhancement for
connected_equipment_trace.pywhen traversing elements with single terminals. - Added support for LV2 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.
Fixes
StreetDetail.to_cimnow references the protobuf -> CIM translation function for theStreetDetailprotobuf type.PerLengthImpedance.to_cimnow references the protobuf -> CIM translation function for thePerLengthImpedanceprotobuf type.ZepbenTokenFetchernow includes the refresh token in token refresh requests.- Fixed connectivity traces.
- Fixed bug where running a limited connected equipment trace with
maximum_steps=1included equipment two steps away from the starting equipment iffeeder_directionis set. - Each stop condition of a traversal is now checked on each step, regardless if a previous one in the internal list has returned
True. - Add
normal_upstream_trace,current_upstream_trace, andphase_inferrerto__all__inzepben.evolve.services.network.tracing.tracing. - Added missing
runmethod forDownstreamTree. - Added missing
TreeNodeTracker. - Classes in the
zepben.evolve.services.network.tracing.tree.*submodules may now be importedfrom zepben.evolve. - Add
normal_upstream_trace,current_upstream_trace, andphase_inferrerto__all__inzepben.evolve.services.network.tracing.tracing. - Stopped the NetworkConsumerClient from resolving the equipment of an EquipmentContainer when resolving references. Equipment for containers must always be explicitly requested by the client.
- 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
- None.
[0.34.0]
This is a re-release to ensure we're using a released version of zepben.protobuf. There is no notable difference to 0.33.0.
[0.33.0]
Breaking Changes
- Renamed the following classes to be consistent with the JVM implementation:
TraversaltoBasicTraversalBaseTraversaltoTraversalTrackertoBasicTrackerBaseTrackertoTracker
- Renamed the following functions to be consistent with the JVM implementation:
Traversal.tracetoTraversal.runTerminal.get_other_terminalstoTerminal.other_terminals
- Replaced
Equipment().current_feederswithEquipment().current_containers, which yieldsEquipmentContainer's insteadFeeder's. - Changed the
AssignToFeederstrace to stop at and exclude LV equipment, which should now be added to the newLvFeederobject. - In the
services.network.tracing.tracingmodule, renamedassign_equipment_container_to_feederstoassign_equipment_to_feeders. - Database versions prior to v43 are no longer supported.
New Features
- 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().get_equipment(_for)_container(s):include_energizing_containers: 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.
include_energized_containers: 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 the method
NetworkConsumerClient().get_equipment_for_containers, which is similar toNetworkConsumerClient().get_equipment_for_containerbut acts on multiple containers. - Added
FindSwerEquipmentclass which can be used for finding the SWER equipment in aNetworkServiceorFeeder.
Enhancements
- None.
Fixes
PhaseCode.num_phasesnow correctly returns the number of single phases in a phase code.- Fixed issue where
PowerTransformer().endswas sometimes incorrectly ordered after Protobuf-to-CIM translation.
Notes
- None.
[0.32.0]
Breaking Changes
- Renamed the following classes to be consistent with the JVM implementation:
TraversaltoBasicTraversalBaseTraversaltoTraversalTrackertoBasicTrackerBaseTrackertoTracker
- Renamed the following functions to be consistent with the JVM implementation:
Traversal.tracetoTraversal.runTerminal.get_other_terminalstoTerminal.other_terminals
New Features
- None
Enhancements
- Improved performance for bus branch creation.
- Added the following functions to be consistent with the JVM implementation:
Terminal.connected_terminals
Fixes
PhaseStepTrackernow reports strict subsets of visited phases as visited.- Base voltages are no longer pulled from switches when creating nodes in
BusBranchNetworkCreator
Notes
- None.
[0.29.0]
Breaking Changes
- None
New Features
- None
Enhancements
- Updated zepben.protobuf which includes version 1.46.3 of grpcio and grpcio-tools, plus version 4.21.1 of protobuf, enabling support for M1 macs and significant performance improvements.
Fixes
- None
Notes
- None.
[0.28.0]
Breaking Changes
queue_nextfunctions now take an item and aTraversal, and they now hold the responsibility of adding the next items to the traversal's queue.- Removed
get_connectivityandget_connected_equipmentfromconnectivity_result.py. Useconnected_terminalsandconnected_equipmentinstead. - Moved
PhaseSelectordefinition totypes.py.
New Features
- Allow specification of timeout for CimConsumerClients
- Added the following traces to process a
NetworkService, which can be accessed via thetracingpackage:SetPhasesRemovePhasesSetDirectionRemoveDirectionPhaseInferrer
- Added new
connect_tls()helper function for connecting to TLS secured EWB with no auth. - Added new
connect_with_secret()helper function for connecting to a secure EWB server with a client id and secret.
Enhancements
- BusBranchNetworkCreator logic updated so that the factory methods for topological_branches, equivalent_branches, and power_transformers get the topological nodes passed in as arguments sorted by feeder_direction.
Fixes
connect_with_password()now worksSetPhasesnow supports setting backwards through XN/XY transformers.TestNetworkBuildernow assigns equipment to feeders if there are any feeders present.
Notes
- None.
[0.27.0]
Breaking Changes
- Removed CIM gRPC producers.
- Added support for
EquivalentBranchesinBusBranchNetworkCreator. TownDetailfields are now nullable.- Simplified
connectandconnect_asyncby refactoring optional settings (e.g. password authentication) to other functions. These functions are now deprecated. - Use asyncio for gRPC from the newest update of
grpcioandgrpcio-tool. - 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
- Renamed
NetworkService.add_connectivitynodetoNetworkService.add_connectivity_node
New Features
- Implemented database module for persisting to sqlite database.
- Added
PhaseCodes:s1s2
- Added
SinglePhaseKinds:s1s1Ns12s12Ns2s2N
- Added the following CIM classes/enums:
TransformerConstructionKindTransformerFunctionKindStreetDetail
- Added the following
PowerTransformerfields:construction_kind: TransformerConstructionKindfunction: TransformerFunctionKind
- Added the following
StreetAddressfields:po_box: strstreet_detail: Optional[StreetDetail]
- Added the following
EnergySourcefields:is_external_grid: boolr_min: Optional[float]rn_min: Optional[float]r0_min: Optional[float]x_min: Optional[float]xn_min: Optional[float]x0_min: Optional[float]r_max: Optional[float]rn_max: Optional[float]r0_max: Optional[float]x_max: Optional[float]xn_max: Optional[float]x0_max: Optional[float]
- Added
TestNetworkBuilderwhich can be used to create simple test networks.
Enhancements
- Reworked phase connectivity to better handle unknown primary phases (X/Y).
- You can now get a
PhaseCoderepresentation from traced phases if it is valid.
Fixes
- Updated gRPC to fix support for latest LetsEncrypt certificates.
Notes
- None.
[0.26.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.25.0]
Breaking Changes
- Added
secureflag toconnect()andconnect_async()that defaults to False. This flag needs to be True when a secure connection is required or credentials are used.
New Features
- Added CIM class
ShuntCompensatorInfo
Enhancements
- None.
Fixes
- Fixed bug that would cause bus-branch creation mappings to be shared between bus-branch creation result instances.
connect()andconnect_async()will now use the OS CA bundle by default if nocais specified.
Notes
- None.
[0.24.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.23.0]
Breaking Changes
Location.pointsno longer provides an enumerated generator over PositionPoints.NetworkHierarchyhas been updated to use CIM classes.get_feederhas been deprecated. Prefer the use of the more genericget_equipment_container.get_identified_objectnow returns aValueErrorerror if the requested object does not exist rather than anullsuccessful result.- Renamed
get_terminals_for_connectivitynodetoget_terminals_for_connectivity_nodeinNetworkConsumerClient. - Renamed
valuetoobjectsinMultiObjectResult. - All
CimConsumerClientimplementations have been changed to control a single service rather than one per call. - All SDK methods that retrieve objects with references will now request the network hierarchy first to provide a consistent result, regardless of call order.
- Changed
DiagramObject.styleto be a string and removedDiagramObjectStyleenum. - Updated to use v0.15.0 gRPC protocols.
New Features
- Added the following CIM classes:
BusbarSectionEquivalentBranchEquivalentEquipmentNameNameTypeNoLoadTestLoadBreakSwitchOpenCircuitTestShortCircuitTestTransformerEndInfoTransformerStarImpedanceTransformerTankInfoTransformerTest
- Example simple bus branch network added in
zepben.evolve.examples.simple_bus_branch. - Helper factory methods for AcLineSegment, Junction (Bus), PowerTransformer, EnergySource, and EnergyConsumer added to
NetworkServiceand available throughzepben.evolve.services.network.network_extensions. - Added utility function to generate bus-branch models from a NetworkService.
- Passing token for authorization of connection to authenticated gRPC server.
- Added API calls for getting loops.
- Added
isVirtualandconnectionCategorytoUsagePoint
Enhancements
- [tests] cim_creators.py created with similar hypothesis derived functionality to pb_creators, and can be used to quickly build fake data for testing.
NetworkHierarchynow contains circuits and loops.- You can now pass object instances rather than just mRID's to service functions used to populate those objects (e.g.
get_equipment_for_container).
Fixes
get_identified_objectsnow adds unknown mRIDs to the failed collection.- Fixed typing issues on all services.
- Circuits now correctly link to loops when received via gRPC.
Notes
- None.
[0.22.0]
Breaking Changes
- ConnectivityResult init signature has slight changes to simplify use.
- Removed NetworkProtoToCim. Use NetworkService.add_from_pb directly instead.
- UUID is no longer a supported type for
IdentifiedObject.mRID, use a string representation instead. get_unresolved_reference_mridshas now been replaced byget_unresolved_references_fromandget_unresolved_references_to, which returnUnresolvedReferences
New Features
- AssignToFeeders and AssociatedTerminalTrace are now available for use.
- PowerTransformerInfo class added. A PowerTransformer may have a PowerTransformerInfo as its asset_info.
BaseServicenow has two mappings overUnresolvedReference, via the to_mrid and the from objects mrid, and two functions have been added:get_unresolved_references_from(mrid): Allows fetching all UnresolvedReferences frommridget_unresolved_references_to(mrid): Allows fetching all UnresolvedReferences pointing tomrid
- NetworkConsumerClient has 4 new functions:
-
For fetching equipment for an EquipmentContainer
get_equipment_for_container(service: NetworkService, mrid: str)
-
For fetching current equipment for a Feeder
get_current_equipment_for_feeder(service: NetworkService, mrid: str)
-
For fetching equipment for an OperationalRestriction
get_equipment_for_restriction(service: NetworkService, mrid: str)
-
For fetching terminals for a ConnectivityNode
get_terminals_for_connectivity_node(service: NetworkService, mrid: str)
-
NetworkConsumerClient.get_feeder()now resolves all references, and thus you can expect to receive a Feeder with all equipment and their associations populated.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.21.0]
Breaking Changes
- Re-ordered the internal modules. If you were previously importing from something other than the top-level module (zepben.evolve), it's likely these imports will no longer work. You should change all your imports to only import from zepben.evolve.
New Features
- Added MeasurementProducerClient for streaming measurements. Currently experimental and API will definitely change.
Enhancements
- Added PowerTransformerInfo class to be used as asset_info for PowerTransformers.
Fixes
- None.
Notes
- None.
[0.20.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.19.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.18.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- CimProducerClient and subclasses now works as expected - error_handlers are now able to be passed in.
Notes
- None.
[0.17.0]
Breaking Changes
- Renamed top level package from
zepben.cimbendtozepben.evolve
[0.16.0]
Breaking Changes
- connect and connect_async no longer yield a [Sync]WorkbenchConnection, which has been deprecated, and now yield a gRPC Channel, which can be used to create the new consumer/producer clients listed below.
New Features
-
The gRPC api now matches evolve-sdk-jvm (with some additions). Notably, there are consumer clients and producer clients, and each have an asyncio compatible version and a synchronous version (prefixed with Sync). Each version exposes the same API.
New consumer client classes:
NetworkConsumerClientandSyncNetworkConsumerClientCustomerConsumerClientandSyncCustomerConsumerClientDiagramConsumerClientandSyncDiagramConsumerClient
New producer client classes:
NetworkProducerClientandSyncNetworkProducerClientCustomerProducerClientandSyncCustomerProducerClientDiagramProducerClientandSyncDiagramProducerClientProducerClient- A wrapper around the above 3 clients to support sending to each service simultaneously.
Enhancements
- Aligned with evolve-sdk-jvm.
Fixes
- Lots.
Notes
- Some tracing functionality is still missing compared to the jvm sdk.
[0.15.0]
Breaking Changes
- connect() and connect_async() now return a gRPC
Channelrather than a [Sync]WorkbenchConnection which is now deprecated. Instead you should use thisChannelto create a subclass of theCimConsumerClientorCimProducerClient. (see new features).
New Features
- Consumer and Producer gRPC streaming APIs have been enhanced. All gRPC based streaming should be done through the following classes:
NetworkConsumerClientNetworkProducerClientDiagramConsumerClientDiagramProducerClientCustomerConsumerClientCustomerProducerClientAll consumers implementget_identified_object()andget_identified_objects()NetworkConsumerClient also hasget_network_hierarchy(),get_feeder(),retrieve_network(). See their pydoc for more info.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.14.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.13.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.12.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.11.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.10.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.9.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.8.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.7.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.6.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[0.5.0]
Initial github release of the evolve protobuf and gRPC definitions.