- None.
- None.
- None.
- None.
- None.
- None.
- None.
- None.
AcLineSegment.wire_info_for_phasewill no longer throw an exception if anAcLineSegmenthas nophasesspecified.
- None.
- Updated
SetDirectionto correctly use the@singledispatchmethodregistrationruninstead of the oldrun_terminal. Simply replace yourrun_terminalcall withrun. EquipmentTreeBuilder.rootsis now adictkeyed by thestart_itemrather than aGenerator. This allows better lookup of root items when you are looking for an explicit items tree.- Renamed
PanDemandResponseFunctionconstructor argumentappliances->applianceto match the class property. - Deprecated the following side-hustle shadowy names for
PowerSystemResource.asset_info, just useasset_infodirectly:Conductor.wire_infoCurrentTransformer.current_transformer_infoPotentialTransformer.potential_transformer_infoPowerTransformer.power_transformer_infoProtectionRelayFunction.relay_infoShuntCompensator.shunt_compensator_infoSwitch.switch_info
- The
ShuntCompensator.groundingTerminalmust now:- Belong to the
ShuntCompensator. Assigning aTerminaltoShuntCompensator.groundingTerminalwill now set the terminalsconductingEquipmentto theShuntCompensatorif it isn't set, and throw anIllegalArgumentExceptionif it is assigned to a differentConductingEquipment. - Be in the
ShuntCompensator.terminalscollection, and will be added automatically if it is missing on assignment, which in turn will update thesequenceNumberof theTerminalif it is0. - Have phases
N.
- Belong to the
- Phase paths through a
ShuntCompensatornow add paths for mismatched phases between the grounding and normal terminals. This works in the same way as thePowerTransformer. This will only impact traces that are tracking the included phase paths, and will allow traces that previously stopped at theShuntCompensatorto continue. You should use the newstopOnShuntCompensatorGroundcondition to maintain current behaviour. NameTypeandNamenow require constructor args to be supplied as kwargs only.GrpcClientnow requires astubto be passed into its constructor as a kw only arg.BaseServicefunctions__contains__,get,addandremovehave replaced theiridentified_objectparameters withidentifiable: Identifiable.BaseServicemembers and functions that used to referenceIdentifiedObjectnow useIdentifiableinstead.MultiObjectResult.objectsis now adict[str, Identifiable]. This will cause problems if you are explicitly expecting anIdentifiedObjectto be returned via a consumer client call without any further type narrowing.- Private function
CimConsumerClient.extract_identified_objectshas been renamed toextract_identifiables. ReferenceDifferencememberssourceandtarget_valuenow referenceIdentifiable.- Renamed the following gRPC messages and attributes to support identifiable objects that don't descend from
IdentifiedObject(such asDataSet):- In the
ccprotos:CustomerConsumer.getIdentifiedObjects->CustomerConsumer.getIdentifiablesGetIdentifiedObjectsRequest->GetIdentifiablesRequestGetIdentifiedObjectsResponse->GetIdentifiablesResponseGetIdentifiablesResponse.identified_objects->GetIdentifiablesResponse.identifiablesCustomerIdentifiedObject->CustomerIdentifiableCustomerIdentifiable.identified_object->CustomerIdentifiable.identifiableGetCustomersForContainerResponse.identified_object->GetCustomersForContainerResponse.identifiable
- In the
dcprotos:DiagramConsumer.getIdentifiedObjects->DiagramConsumer.getIdentifiablesGetIdentifiedObjectsRequest->GetIdentifiablesRequestGetIdentifiedObjectsResponse->GetIdentifiablesResponseGetIdentifiablesResponse.identified_objects->GetIdentifiablesResponse.identifiablesDiagramIdentifiedObject->DiagramIdentifiableDiagramIdentifiable.identified_object->DiagramIdentifiable.identifiableGetDiagramObjectsResponse.identified_object->GetDiagramObjectsResponse.identifiable
- In the
ncprotos:NetworkConsumer.getIdentifiedObjects->NetworkConsumer.getIdentifiablesGetIdentifiedObjectsRequest->GetIdentifiablesRequestGetIdentifiedObjectsResponse->GetIdentifiablesResponseGetIdentifiablesResponse.identified_objects->GetIdentifiablesResponse.identifiablesNetworkIdentifiedObject->NetworkIdentifiableNetworkIdentifiable.identified_object->NetworkIdentifiable.identifiableGetEquipmentForContainersResponse.identified_object->GetEquipmentForContainersResponse.identifiableGetEquipmentForRestrictionResponse.identified_object->GetEquipmentForRestrictionResponse.identifiable
- In the
- Added
Conditions.stopOnShuntCompensatorGround, a new condition to prevent tracing through aShuntCompensatorusing its grounding terminal. - Added
Identifiableinterface which definesmrid. - Anything implementing
Identifiablecan now be added to aBaseService. NameTypeandNamenow implementIdentifiable. Their mRID will be set to<name>and<name>-<type.name>-<identified_object.mrid>.- Promoted
BaseServiceReader,BaseServiceWriter,BaseCimReader,BaseCollectionReader,BaseCollectionWriter, andBaseServiceReaderto the public API. - Added
customerIdentifiableto replacecustomer_identified_objectwith support forIdentifiableobject types in the future. - Added
diagramIdentifiableto replacediagram_identified_objectwith support forIdentifiableobject types in the future. - Added
networkIdentifiableto replacenetwork_identified_objectwith support forIdentifiableobject types in the future. - Added the following functions to all
CimConsumerClientdescendants:get_identifiablewhich replaces the now deprecatedget_identified_object.get_identifiableswhich replaces the now deprecatedget_identified_objects.
- Added sequence unpacking support for
UnresolvedReferenceandObjectDifference. SetDirection.runnow supportsConductingEquipment.- Fixed types on all overrides for
PowerSystemResource.asset_info, removing the need to shadow them with type specific variants. - You can now pass a list of
TransformerEndRatedSto thePowerTransformerEndconstructor via theratingsargument. - Updated all
Callabletype signatures for callables with unused return values to acceptAnyinstead ofNone. The return is still unused, but requiringNoneraises types errors if anything is actually returned. IdentifiedObject,NameandNameTypenow extendsIdentifiable.BaseServiceComparatorwill now compare allIdentifiableobjects that have been added, not justIdentifiedObjectobjects.
- Fixed the packing and unpacking of timestamps for
Agreement.validity_intervalin gRPC messages. Fix also ensures all other timestamps correctly supportNonewhen optional. - Fixed an error in
PhaseCodewhen addingNONEwhich previously resulted inNONEinstead of the existingPhaseCode. BaseService.__contains__`` will now returnfalsewhen passed anIdentifiablethat is not in the service, instead of raising aKeyError`- Clearing the names from an
IdentifiedObjectwith no names no longer raises aTypeError.
- Deprecated the
customer_identified_objectfunction, please use the replacementcustomer_identifiable. - Deprecated the
diagram_identified_objectfunction, please use the replacementdiagram_identifiable. - Deprecated the
network_identified_objectfunction, please use the replacementnetwork_identifiable. - Deprecated the following functions on all
CimConsumerClientdescendants:get_identified_objectwhich has been replaced withget_identifiable.get_identified_objectswhich has been replaced withget_identifiables.
- The following gRPC fields have been modified to support nulls (they were missed in v1.0.0):
Document.created_date_timeEquipment.commissioned_dateMeasurementValue.time_stampRelayInfo.curve_settingRelayInfo.reclose_fast
- Removed
TracedPhases.Terminal.normalPhasesandTerminal.currentPhasesshould be used instead ofTerminal.tracedPhasesgoing forward. (missed in 0.48.0)
- Added the following new CIM classes:
DateTimeInterval, interval between two date and time points, where the interval includes the start time but excludes end time.ElectronicAddress, electronic address information.TelephoneNumber, telephone number.HvCustomer- [ZBEX] anEquipmentContainerfor high voltage customer assets.LvSubstation- [ZBEX] anEquipmentContainerto represent distribution transformer sites, with associations toFeederandLvFeederAcLineSegmentPhase- Details about an individual phase of anAcLineSegment.
- Added the following new CIM extension classes:
ContactDetails, the details required to contact a person or company. These can be accessed/used via aUsagePoint.DirectionalCurrentRelay, a directional current relay is a type of protective relay used in electrical power systems to detect the direction of current flow and operate only when the current exceeds a certain threshold in a specified direction.
- Added new CIM extension enums:
ContactMethodTypePolarizingQuantityType
- Added new properties to the model:
PricingStructure.code- User allocated key for a pricing structure.ShuntCompensator.grounding_terminal- [ZBEX] The terminal connecting to grounded network.WireInfo- extra properties for conductors:size_descriptionstrand_countcore_strand_countinsulatedinsulation_materialinsulation_thickness
- Added new enum
WireInsulationKindwith extensions. - Added helper function
AcLineSegment.wire_info_for_phase()for retrieving theWireInfofor a given phase of a conductor. - Added helper function
EquipmentContainer.edge_terminals()for retrieving all terminals on the edge of anEquipmentContainer. - Added support to filter NetworkHierarchy responses when calling
NetworkConsumerClient.get_network_hierarchy(). A client can now choose what hierarchy containers should be populated in the response. - Added
AcLineSegment.wire_info_for_phase(phase: SinglePhaseKind)to retrieve theWireInfoassociated with a given phase of a conductor.
-
BaseService.containshas been been expanded to support objects in addition to mRIDs.
Agreementnow supportsvalidity_interval, the date and time interval the agreement is valid (from going into effect to termination).StreetDetailnow supports extensionbuilding_number, the number of the building.TownDetailnow supportscountry, the name of the country.ngen()now directly acceptsdict()s and will return a generator of thevalues()orNoneifcollection is None
- Reordered the feeder equipment and direction assignment on database read to prevent parallel feeders from tracing back into the zone substation.
NetworkDatabaseTables,CustomerDatabaseTables,DiagramDatabaseTablesandBaseEntryWritercan now be imported fromzepben.ewband are officially regarded as public.
- None.
- Updated
EwbDataFilePathsto be an abstract class that supports variants. AddedLocalEwbDataFilePathswhich is a local file system implementation ofEwbDataFilePaths, and should be used in place of the oldEwbDataFilePaths. CopyableUUIDhas been removed, and replaced with a newgenerate_idfunction.- All
IdentifiedObjectclasses now require anmridto be passed to the constructor, it will no longer be generated by default. This brings the Python SDK into alignment with the JVM SDK. You can use the newgenerate_idfunction if you can't provide a more meaningful mRID.
- None.
- Bumped
hypothesisversion for tests to latest (6.138.2), fixed examples generating large numbers of results causing tests to run extremely slow. - Bumped every other dependency to the latest version aside from dataclassy.
- You can now opt out of the post read processing in the database readers using the optional
preform_after_read_processingparameter.
- Moved ZepbenTokenAuth to use python dataclasses instead of
zepben.ewb.dataclassy, existing code should work as is. TypeErrors occurring inStepActions will no longer silently pass- Drop python 3.9 from list of test envs in tox
- Fix an ImportError being raised when calling
Conductor.is_underground()
- None.
- Fix an ImportError being raised when calling
Conductor.is_underground() TypeErrors occurring inStepActions will no longer silently pass
- Moved ZepbenTokenAuth to use python dataclasses instead of
zepben.ewb.dataclassy, existing code should work as is.
- Releases 1.0.1 and 1.0.2 were skipped due to CI issues.
- 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
- Created a new
SqlTablethat doesn't support creating schema creation statements by default.
EquipmentTreeBuilderwill now calculateleaveswhen specified to do so.
- 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.
- None.
- 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__
- 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.
- 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
- 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.
- None.
- 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
- Downgrade protobuf and gRPC deps to fix SyncNetworkConsumerClient
- None.
- Added relationships between
AssetandPowerSystemResourcewhich enables linkingEquipmenttoPole:Asset.powerSystemResourcesPowerSystemResource.assets
- None.
- None.
- None.
- None.
- Added support for the following
CurrentStateEventtypes:AddCutEvent.RemoveCutEvent.AddJumperEvent.RemoveJumperEvent.
QueryNetworkStateClient.reportBatchStatuscan be used to send status responses for batches returned from the service viaQueryNetworkStateClient.getCurrentStates.
- Specify typing_extensions as a dependency to fix support for Python 3.9 and 3.10
- None.
GrpcChannelBuilder.build()now accepts atimeout_secondsargument. This is the timeout used for each connection attempt so the total amount of time the connection test may take to fail can be greater thantimeout_seconds.
- 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.
- Updated
NetworkConsumerClient'sget_equipment_for_container/s,get_equipment_container,get_equipment_for_loopandget_all_loopsto allow requesting normal, current or all equipments.
- GrpcChannelBuilder's initial connectivity test no longer fails due to a lack of permissions on a subset of services.
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.
- SinglePhaseKind will now be processed correctly when translating from protobuf.
- 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.
- 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
- 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.
- None.
- None.
- 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.
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.
- None.
- None.
- None.
- Don't use typing_extensions for Optional import (fixes import of library on Python >3.12)
- Restrict installation to supported Python versions 3.9 -> 3.12.
- None.
- 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.
- None.
- None.
- None.
- Update to support requests up to version 3.0.0 (exclusive)
- Update to corresponding zepben.auth library for requests support
- 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
- Support zepben.auth 0.12.0 which brings support for auth against EWB servers backed by EntraID.
- 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.
- Added missing type information to the following
NameTypefunctions:get_or_add_name,remove_nameandremove_names
- 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.
- None.
- Added
EwbDataFilePathsclass for working with the EWB various database files
- Added feature list to documentation.
- Updated zepben.auth to 0.11.1 to fix incorrect audience processing when requesting tokens with Entra.
- None.
- 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.
- 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.
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.
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.
- Default grpc channel message size is now 20MB.
- Updated to evolve-grpc 0.26.0.
- 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
- Added support for
getMetadata()gRPC calls onCustomerConsumerClient,DiagramConsumerClient, andNetworkConsumerClient.
- Update docusaurus and its configuration.
- None.
- 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.
- None.
- 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()
- None.
- None.
- None.