diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 0bb60b6..77772e2 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,6 @@ # ProtoBuf Release Notes -## 0.0.7-dev - 2024-06-18 +## 0.0.7-dev - 2024-06-19 ### Dependencies @@ -9,6 +9,8 @@ ### Refactoring +- Fault messages as set of events, rather than single event with multiple status + (PR #63 by @chicco785) - Refactor `Fault` messages to support measurement and measurement timestamp reference (PR #62 by @chicco785) diff --git a/docs/fault.proto.md b/docs/fault.proto.md index a888055..1af0763 100644 --- a/docs/fault.proto.md +++ b/docs/fault.proto.md @@ -83,20 +83,20 @@ This message is modeled after [CIM PhaseCode](https://zepben.github.io/evolve/do | `PHASE_CODE_XYN` | 25 | Two unknown non-neutral phases plus neutral. | -## Enum: FaultStatus +## Enum: FaultEventType -**FQN**: zaphiro.grid.v1.FaultStatus +**FQN**: zaphiro.grid.v1.FaultEventType -The collection of Fault Status defined so far. +The collection of Fault Event Types defined so far. -| Name | Ordinal | Description | -|----------------------------------|---------|----------------------------------------------------------------------------------| -| `FAULT_STATUS_UNSPECIFIED` | 0 | No status defined | -| `FAULT_STATUS_STARTED` | 1 | Fault started | -| `FAULT_STATUS_ENDED_AND_LOCATED` | 2 | Fault was located | -| `FAULT_STATUS_ENDED` | 3 | Fault ended | -| `FAULT_STATUS_UNKNOWN` | 4 | Information available don't allow us to know if the Fault is active or complete | +| Name | Ordinal | Description | +|--------------------------------|---------|----------------------------------------------------------------------------------| +| `FAULT_EVENT_TYPE_UNSPECIFIED` | 0 | No status defined | +| `FAULT_EVENT_TYPE_STARTED` | 1 | Fault started | +| `FAULT_EVENT_TYPE_LOCATED` | 2 | Fault located | +| `FAULT_EVENT_TYPE_ENDED` | 3 | Fault ended | +| `FAULT_EVENT_TYPE_UNKNOWN` | 4 | Information available don't allow us to know if the Fault is active or complete | @@ -163,20 +163,20 @@ class PhaseCode{ PHASE_CODE_XYN } ``` -### FaultStatus Diagram +### FaultEventType Diagram ```mermaid classDiagram direction LR -%% The collection of Fault Status defined so far. +%% The collection of Fault Event Types defined so far. -class FaultStatus{ +class FaultEventType{ <> - FAULT_STATUS_UNSPECIFIED - FAULT_STATUS_STARTED - FAULT_STATUS_ENDED_AND_LOCATED - FAULT_STATUS_ENDED - FAULT_STATUS_UNKNOWN + FAULT_EVENT_TYPE_UNSPECIFIED + FAULT_EVENT_TYPE_STARTED + FAULT_EVENT_TYPE_LOCATED + FAULT_EVENT_TYPE_ENDED + FAULT_EVENT_TYPE_UNKNOWN } ``` ### Fault Diagram @@ -189,6 +189,10 @@ direction LR %% %% This message is modeled after [CIM Fault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/Fault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. %% +%% Faults messages represent events linked to a given fault (identified by the id). From the point of view of storage the sequence of events may be handled in a way that does not map totally to the single event, e.g. by combining multiple events in a single database row. +%% +%% When a fault is detected, an `Fault` message event of type `FAULT_EVENT_TYPE_STARTED` is generated, when a fault is located (and multiple locations can occur for the same fault) and a `Fault` event message of type `FAULT_EVENT_TYPE_LOCATED` is generated. When a fault ends, a `Fault` event message of type `FAULT_EVENT_TYPE_ENDED` is generated. Certain fields of the Fault event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `locationProbability`, `measurementTimestamp`). +%% %% Headers used in rabbitMQ: %% * `id` (string): id of the `Fault` %% * `type` (string): always `Fault` @@ -201,16 +205,17 @@ class Fault { + PhaseConnectedFaultKind kind + PhaseCode phases + int64 updatedAt - + FaultStatus status + + FaultEventType faultEventType + Optional~string~ faultyEquipmentId + Optional~float~ faultCurrent + List~string~ impactedEquipmentIds + List~FaultMeasurement~ usedMeasurementIds + Optional~int64~ measurementTimestamp + + Optional~float~ locationProbability } Fault --> `PhaseConnectedFaultKind` Fault --> `PhaseCode` -Fault --> `FaultStatus` +Fault --> `FaultEventType` Fault --> `FaultMeasurement` ``` @@ -224,6 +229,8 @@ direction LR %% %% This message is modeled after [CIM LineFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/LineFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. %% +%% Certain fields of the `LineFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `lengthFromTerminal1`, `lengthUncertainty`). +%% %% Headers used in rabbitMQ: %% * `id` (string): id of the `Fault` %% * `type` (string): always `LineFault` @@ -233,6 +240,7 @@ direction LR class LineFault { + Fault fault + Optional~float~ lengthFromTerminal1 + + Optional~float~ lengthUncertainty } LineFault --> `Fault` @@ -248,6 +256,8 @@ direction LR %% %% This message is modeled after [CIM EquipmentFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/EquipmentFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. %% +%% Certain fields of the `EquipmentFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `terminalID`). +%% %% Headers used in rabbitMQ: %% * `id` (string): id of the `EquipmentFault` %% * `type` (string): always `LineFault` @@ -284,6 +294,10 @@ Abnormal condition causing current flow through conducting equipment, such as ca This message is modeled after [CIM Fault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/Fault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Faults messages represent events linked to a given fault (identified by the id). From the point of view of storage the sequence of events may be handled in a way that does not map totally to the single event, e.g. by combining multiple events in a single database row. + +When a fault is detected, an `Fault` message event of type `FAULT_EVENT_TYPE_STARTED` is generated, when a fault is located (and multiple locations can occur for the same fault) and a `Fault` event message of type `FAULT_EVENT_TYPE_LOCATED` is generated. When a fault ends, a `Fault` event message of type `FAULT_EVENT_TYPE_ENDED` is generated. Certain fields of the Fault event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `locationProbability`, `measurementTimestamp`). + Headers used in rabbitMQ: * `id` (string): id of the `Fault` * `type` (string): always `Fault` @@ -298,12 +312,13 @@ Headers used in rabbitMQ: | `kind` | 3 | `PhaseConnectedFaultKind` | | The kind of phase fault. | | `phases` | 4 | `PhaseCode` | | The phases participating in the fault. The fault connections into these phases are further specified by the type of fault. | | `updatedAt` | 5 | `int64` | | The date and time at which the fault started/located/ended depending on the Fault Status (Unix msec timestamp). | -| `status` | 6 | `FaultStatus` | | The status of the fault. | +| `faultEventType` | 6 | `FaultEventType` | | The type of the fault event. | | `faultyEquipmentId` | 7 | `string` | Optional | The equipment with the fault. | | `faultCurrent` | 8 | `float` | Optional | The current associated to the fault. | | `impactedEquipmentIds` | 9 | `string` | Repeated | The set of IDs of equipments impacted by the fault. | | `usedMeasurementIds` | 10 | `FaultMeasurement` | Repeated | The set of measurements used to locate the fault. | | `measurementTimestamp` | 11 | `int64` | Optional | The timestamp of the measurements used to compute the fault location. | +| `locationProbability` | 12 | `float` | Optional | The probability associated to the location. (This is relevant because multiple locations can be returned for a fault) | @@ -316,6 +331,8 @@ A fault that occurs on an AC line segment at some point along the length. This message is modeled after [CIM LineFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/LineFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Certain fields of the `LineFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `lengthFromTerminal1`, `lengthUncertainty`). + Headers used in rabbitMQ: * `id` (string): id of the `Fault` * `type` (string): always `LineFault` @@ -327,6 +344,7 @@ Headers used in rabbitMQ: |-----------------------|---------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------| | `fault` | 1 | `Fault` | | The base fault message. | | `lengthFromTerminal1` | 2 | `float` | Optional | The length to the place where the fault is located starting from terminal with sequence number 1 of the faulted line segment. | +| `lengthUncertainty` | 3 | `float` | Optional | The +/- uncertainty on the reported length. | @@ -340,6 +358,8 @@ A fault applied at the terminal, external to the equipment. This class is not us This message is modeled after [CIM EquipmentFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/EquipmentFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Certain fields of the `EquipmentFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `terminalID`). + Headers used in rabbitMQ: * `id` (string): id of the `EquipmentFault` * `type` (string): always `LineFault` diff --git a/go/grid/v1/fault.pb.go b/go/grid/v1/fault.pb.go index 74667dc..be9ed10 100644 --- a/go/grid/v1/fault.pb.go +++ b/go/grid/v1/fault.pb.go @@ -200,58 +200,58 @@ func (PhaseCode) EnumDescriptor() ([]byte, []int) { return file_zaphiro_grid_v1_fault_proto_rawDescGZIP(), []int{1} } -type FaultStatus int32 +type FaultEventType int32 const ( - FaultStatus_FAULT_STATUS_UNSPECIFIED FaultStatus = 0 //No status defined - FaultStatus_FAULT_STATUS_STARTED FaultStatus = 1 //Fault started - FaultStatus_FAULT_STATUS_ENDED_AND_LOCATED FaultStatus = 2 //Fault was located - FaultStatus_FAULT_STATUS_ENDED FaultStatus = 3 //Fault ended - FaultStatus_FAULT_STATUS_UNKNOWN FaultStatus = 4 //Information available don't allow us to know if the Fault is active or complete + FaultEventType_FAULT_EVENT_TYPE_UNSPECIFIED FaultEventType = 0 //No status defined + FaultEventType_FAULT_EVENT_TYPE_STARTED FaultEventType = 1 //Fault started + FaultEventType_FAULT_EVENT_TYPE_LOCATED FaultEventType = 2 //Fault located + FaultEventType_FAULT_EVENT_TYPE_ENDED FaultEventType = 3 //Fault ended + FaultEventType_FAULT_EVENT_TYPE_UNKNOWN FaultEventType = 4 //Information available don't allow us to know if the Fault is active or complete ) -// Enum value maps for FaultStatus. +// Enum value maps for FaultEventType. var ( - FaultStatus_name = map[int32]string{ - 0: "FAULT_STATUS_UNSPECIFIED", - 1: "FAULT_STATUS_STARTED", - 2: "FAULT_STATUS_ENDED_AND_LOCATED", - 3: "FAULT_STATUS_ENDED", - 4: "FAULT_STATUS_UNKNOWN", - } - FaultStatus_value = map[string]int32{ - "FAULT_STATUS_UNSPECIFIED": 0, - "FAULT_STATUS_STARTED": 1, - "FAULT_STATUS_ENDED_AND_LOCATED": 2, - "FAULT_STATUS_ENDED": 3, - "FAULT_STATUS_UNKNOWN": 4, + FaultEventType_name = map[int32]string{ + 0: "FAULT_EVENT_TYPE_UNSPECIFIED", + 1: "FAULT_EVENT_TYPE_STARTED", + 2: "FAULT_EVENT_TYPE_LOCATED", + 3: "FAULT_EVENT_TYPE_ENDED", + 4: "FAULT_EVENT_TYPE_UNKNOWN", + } + FaultEventType_value = map[string]int32{ + "FAULT_EVENT_TYPE_UNSPECIFIED": 0, + "FAULT_EVENT_TYPE_STARTED": 1, + "FAULT_EVENT_TYPE_LOCATED": 2, + "FAULT_EVENT_TYPE_ENDED": 3, + "FAULT_EVENT_TYPE_UNKNOWN": 4, } ) -func (x FaultStatus) Enum() *FaultStatus { - p := new(FaultStatus) +func (x FaultEventType) Enum() *FaultEventType { + p := new(FaultEventType) *p = x return p } -func (x FaultStatus) String() string { +func (x FaultEventType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (FaultStatus) Descriptor() protoreflect.EnumDescriptor { +func (FaultEventType) Descriptor() protoreflect.EnumDescriptor { return file_zaphiro_grid_v1_fault_proto_enumTypes[2].Descriptor() } -func (FaultStatus) Type() protoreflect.EnumType { +func (FaultEventType) Type() protoreflect.EnumType { return &file_zaphiro_grid_v1_fault_proto_enumTypes[2] } -func (x FaultStatus) Number() protoreflect.EnumNumber { +func (x FaultEventType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use FaultStatus.Descriptor instead. -func (FaultStatus) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use FaultEventType.Descriptor instead. +func (FaultEventType) EnumDescriptor() ([]byte, []int) { return file_zaphiro_grid_v1_fault_proto_rawDescGZIP(), []int{2} } @@ -260,17 +260,18 @@ type Fault struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` //The textual id of the fault. - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` //The textual description of the fault. - Kind PhaseConnectedFaultKind `protobuf:"varint,3,opt,name=kind,proto3,enum=zaphiro.grid.v1.PhaseConnectedFaultKind" json:"kind,omitempty"` //The kind of phase fault. - Phases PhaseCode `protobuf:"varint,4,opt,name=phases,proto3,enum=zaphiro.grid.v1.PhaseCode" json:"phases,omitempty"` //The phases participating in the fault. The fault connections into these phases are further specified by the type of fault. - UpdatedAt int64 `protobuf:"varint,5,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` //The date and time at which the fault started/located/ended depending on the Fault Status (Unix msec timestamp). - Status FaultStatus `protobuf:"varint,6,opt,name=status,proto3,enum=zaphiro.grid.v1.FaultStatus" json:"status,omitempty"` //The status of the fault. - FaultyEquipmentId *string `protobuf:"bytes,7,opt,name=faultyEquipmentId,proto3,oneof" json:"faultyEquipmentId,omitempty"` //The equipment with the fault. - FaultCurrent *float32 `protobuf:"fixed32,8,opt,name=faultCurrent,proto3,oneof" json:"faultCurrent,omitempty"` //The current associated to the fault. - ImpactedEquipmentIds []string `protobuf:"bytes,9,rep,name=impactedEquipmentIds,proto3" json:"impactedEquipmentIds,omitempty"` //The set of IDs of equipments impacted by the fault. - UsedMeasurementIds []*FaultMeasurement `protobuf:"bytes,10,rep,name=usedMeasurementIds,proto3" json:"usedMeasurementIds,omitempty"` //The set of measurements used to locate the fault. - MeasurementTimestamp *int64 `protobuf:"varint,11,opt,name=measurementTimestamp,proto3,oneof" json:"measurementTimestamp,omitempty"` // The timestamp of the measurements used to compute the fault location. + Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` //The textual id of the fault. + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` //The textual description of the fault. + Kind PhaseConnectedFaultKind `protobuf:"varint,3,opt,name=kind,proto3,enum=zaphiro.grid.v1.PhaseConnectedFaultKind" json:"kind,omitempty"` //The kind of phase fault. + Phases PhaseCode `protobuf:"varint,4,opt,name=phases,proto3,enum=zaphiro.grid.v1.PhaseCode" json:"phases,omitempty"` //The phases participating in the fault. The fault connections into these phases are further specified by the type of fault. + UpdatedAt int64 `protobuf:"varint,5,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` //The date and time at which the fault started/located/ended depending on the Fault Status (Unix msec timestamp). + FaultEventType FaultEventType `protobuf:"varint,6,opt,name=faultEventType,proto3,enum=zaphiro.grid.v1.FaultEventType" json:"faultEventType,omitempty"` //The type of the fault event. + FaultyEquipmentId *string `protobuf:"bytes,7,opt,name=faultyEquipmentId,proto3,oneof" json:"faultyEquipmentId,omitempty"` //The equipment with the fault. + FaultCurrent *float32 `protobuf:"fixed32,8,opt,name=faultCurrent,proto3,oneof" json:"faultCurrent,omitempty"` //The current associated to the fault. + ImpactedEquipmentIds []string `protobuf:"bytes,9,rep,name=impactedEquipmentIds,proto3" json:"impactedEquipmentIds,omitempty"` //The set of IDs of equipments impacted by the fault. + UsedMeasurementIds []*FaultMeasurement `protobuf:"bytes,10,rep,name=usedMeasurementIds,proto3" json:"usedMeasurementIds,omitempty"` //The set of measurements used to locate the fault. + MeasurementTimestamp *int64 `protobuf:"varint,11,opt,name=measurementTimestamp,proto3,oneof" json:"measurementTimestamp,omitempty"` // The timestamp of the measurements used to compute the fault location. + LocationProbability *float32 `protobuf:"fixed32,12,opt,name=locationProbability,proto3,oneof" json:"locationProbability,omitempty"` // The probability associated to the location. (This is relevant because multiple locations can be returned for a fault) } func (x *Fault) Reset() { @@ -340,11 +341,11 @@ func (x *Fault) GetUpdatedAt() int64 { return 0 } -func (x *Fault) GetStatus() FaultStatus { +func (x *Fault) GetFaultEventType() FaultEventType { if x != nil { - return x.Status + return x.FaultEventType } - return FaultStatus_FAULT_STATUS_UNSPECIFIED + return FaultEventType_FAULT_EVENT_TYPE_UNSPECIFIED } func (x *Fault) GetFaultyEquipmentId() string { @@ -382,6 +383,13 @@ func (x *Fault) GetMeasurementTimestamp() int64 { return 0 } +func (x *Fault) GetLocationProbability() float32 { + if x != nil && x.LocationProbability != nil { + return *x.LocationProbability + } + return 0 +} + type LineFault struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -389,6 +397,7 @@ type LineFault struct { Fault *Fault `protobuf:"bytes,1,opt,name=fault,proto3" json:"fault,omitempty"` //The base fault message. LengthFromTerminal1 *float32 `protobuf:"fixed32,2,opt,name=lengthFromTerminal1,proto3,oneof" json:"lengthFromTerminal1,omitempty"` //The length to the place where the fault is located starting from terminal with sequence number 1 of the faulted line segment. + LengthUncertainty *float32 `protobuf:"fixed32,3,opt,name=lengthUncertainty,proto3,oneof" json:"lengthUncertainty,omitempty"` //The +/- uncertainty on the reported length. } func (x *LineFault) Reset() { @@ -437,6 +446,13 @@ func (x *LineFault) GetLengthFromTerminal1() float32 { return 0 } +func (x *LineFault) GetLengthUncertainty() float32 { + if x != nil && x.LengthUncertainty != nil { + return *x.LengthUncertainty + } + return 0 +} + type EquipmentFault struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -552,8 +568,8 @@ var File_zaphiro_grid_v1_fault_proto protoreflect.FileDescriptor var file_zaphiro_grid_v1_fault_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2f, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x7a, - 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x22, 0xf0, - 0x04, 0x0a, 0x05, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x22, 0xd2, + 0x05, 0x0a, 0x05, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, @@ -566,115 +582,126 @@ var file_zaphiro_grid_v1_fault_proto_rawDesc = []byte{ 0x50, 0x68, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x70, 0x68, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1c, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x11, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x79, 0x45, - 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x11, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x79, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x48, 0x02, - 0x52, 0x0c, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x65, 0x64, 0x45, 0x71, 0x75, - 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x14, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x65, 0x64, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x64, 0x4d, 0x65, 0x61, - 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x75, 0x73, 0x65, 0x64, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x14, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x88, 0x01, - 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x79, 0x45, 0x71, 0x75, 0x69, - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x6d, 0x65, 0x61, + 0x47, 0x0a, 0x0e, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x11, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x79, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x11, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x79, 0x45, 0x71, 0x75, + 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x02, 0x48, 0x02, 0x52, 0x0c, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x65, 0x64, + 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x14, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x65, 0x64, 0x45, 0x71, 0x75, 0x69, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x64, + 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, + 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x75, 0x73, 0x65, 0x64, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x6d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x14, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x22, 0x88, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, - 0x2c, 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x35, 0x0a, - 0x13, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x6c, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x13, 0x6c, 0x65, + 0x70, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x02, 0x48, 0x04, 0x52, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x14, 0x0a, 0x12, 0x5f, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x79, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x16, 0x0a, 0x14, 0x5f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x22, 0xd1, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x65, 0x46, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x35, 0x0a, 0x13, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x13, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6c, 0x31, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x11, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x55, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x48, 0x01, 0x52, 0x11, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x55, 0x6e, 0x63, 0x65, 0x72, + 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x31, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x46, - 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x31, 0x22, 0x72, 0x0a, 0x0e, - 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, - 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x7a, 0x61, 0x70, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x23, 0x0a, 0x0a, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x88, 0x01, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x44, - 0x22, 0x5c, 0x0a, 0x10, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, - 0x53, 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x2a, 0x82, - 0x02, 0x0a, 0x17, 0x50, 0x68, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, - 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2d, 0x0a, 0x29, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x47, 0x52, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, + 0x31, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x55, 0x6e, 0x63, 0x65, + 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x22, 0x72, 0x0a, 0x0e, 0x45, 0x71, 0x75, 0x69, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x7a, 0x61, 0x70, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x75, 0x6c, 0x74, + 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, + 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x5c, 0x0a, 0x10, 0x46, + 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, + 0x69, 0x67, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, 0x61, 0x73, + 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x2a, 0x82, 0x02, 0x0a, 0x17, 0x50, 0x68, + 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x75, 0x6c, + 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x45, - 0x10, 0x02, 0x12, 0x35, 0x0a, 0x31, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, - 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, - 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4f, 0x50, 0x45, - 0x4e, 0x10, 0x04, 0x2a, 0x89, 0x04, 0x0a, 0x09, 0x50, 0x68, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, - 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x10, 0x01, 0x12, - 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, - 0x43, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, - 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x42, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, - 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x43, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x43, 0x10, 0x07, 0x12, 0x11, - 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x4e, 0x10, - 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, - 0x42, 0x4e, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, - 0x44, 0x45, 0x5f, 0x43, 0x4e, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, - 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x42, 0x43, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x42, 0x4e, 0x10, 0x0c, 0x12, - 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x43, - 0x4e, 0x10, 0x0d, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x42, 0x43, 0x4e, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, - 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x42, 0x43, 0x4e, 0x10, 0x0f, 0x12, 0x12, 0x0a, 0x0e, - 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, 0x4e, 0x10, 0x10, - 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, - 0x32, 0x4e, 0x10, 0x11, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, - 0x44, 0x45, 0x5f, 0x53, 0x31, 0x32, 0x4e, 0x10, 0x12, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, - 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x32, 0x10, 0x14, 0x12, - 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, - 0x32, 0x10, 0x15, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x58, 0x10, 0x16, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, - 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x59, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, - 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x4e, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x59, 0x4e, 0x10, 0x19, 0x2a, - 0x9b, 0x01, 0x0a, 0x0b, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, - 0x14, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x46, 0x41, 0x55, 0x4c, 0x54, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x44, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x04, 0x42, 0x0b, 0x5a, - 0x09, 0x2e, 0x2f, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x2d, 0x0a, 0x29, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, + 0x12, 0x2b, 0x0a, 0x27, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, + 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, + 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x35, 0x0a, + 0x31, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, + 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, + 0x5f, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x47, 0x52, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x04, 0x2a, 0x89, + 0x04, 0x0a, 0x09, 0x50, 0x68, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, + 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, + 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x10, 0x03, 0x12, 0x10, + 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x10, 0x04, + 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, + 0x42, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, + 0x45, 0x5f, 0x41, 0x43, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x43, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, + 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x4e, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, + 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4e, 0x10, 0x09, 0x12, + 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4e, + 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, + 0x5f, 0x41, 0x42, 0x43, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x42, 0x4e, 0x10, 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x43, 0x4e, 0x10, 0x0d, 0x12, 0x12, + 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x43, 0x4e, + 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, + 0x5f, 0x41, 0x42, 0x43, 0x4e, 0x10, 0x0f, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, 0x4e, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x32, 0x4e, 0x10, 0x11, 0x12, + 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, + 0x32, 0x4e, 0x10, 0x12, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, + 0x44, 0x45, 0x5f, 0x53, 0x31, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x32, 0x10, 0x14, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x31, 0x32, 0x10, 0x15, 0x12, 0x10, + 0x0a, 0x0c, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x10, 0x16, + 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, + 0x59, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, + 0x45, 0x5f, 0x58, 0x4e, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x59, 0x4e, 0x10, 0x19, 0x2a, 0xa8, 0x01, 0x0a, 0x0e, 0x46, + 0x61, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, + 0x1c, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1c, 0x0a, + 0x18, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x55, 0x4c, 0x54, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x04, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x67, 0x72, 0x69, 0x64, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -694,7 +721,7 @@ var file_zaphiro_grid_v1_fault_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_zaphiro_grid_v1_fault_proto_goTypes = []interface{}{ (PhaseConnectedFaultKind)(0), // 0: zaphiro.grid.v1.PhaseConnectedFaultKind (PhaseCode)(0), // 1: zaphiro.grid.v1.PhaseCode - (FaultStatus)(0), // 2: zaphiro.grid.v1.FaultStatus + (FaultEventType)(0), // 2: zaphiro.grid.v1.FaultEventType (*Fault)(nil), // 3: zaphiro.grid.v1.Fault (*LineFault)(nil), // 4: zaphiro.grid.v1.LineFault (*EquipmentFault)(nil), // 5: zaphiro.grid.v1.EquipmentFault @@ -703,7 +730,7 @@ var file_zaphiro_grid_v1_fault_proto_goTypes = []interface{}{ var file_zaphiro_grid_v1_fault_proto_depIdxs = []int32{ 0, // 0: zaphiro.grid.v1.Fault.kind:type_name -> zaphiro.grid.v1.PhaseConnectedFaultKind 1, // 1: zaphiro.grid.v1.Fault.phases:type_name -> zaphiro.grid.v1.PhaseCode - 2, // 2: zaphiro.grid.v1.Fault.status:type_name -> zaphiro.grid.v1.FaultStatus + 2, // 2: zaphiro.grid.v1.Fault.faultEventType:type_name -> zaphiro.grid.v1.FaultEventType 6, // 3: zaphiro.grid.v1.Fault.usedMeasurementIds:type_name -> zaphiro.grid.v1.FaultMeasurement 3, // 4: zaphiro.grid.v1.LineFault.fault:type_name -> zaphiro.grid.v1.Fault 3, // 5: zaphiro.grid.v1.EquipmentFault.fault:type_name -> zaphiro.grid.v1.Fault diff --git a/python/zaphiro/grid/v1/fault_pb2.py b/python/zaphiro/grid/v1/fault_pb2.py index 2031121..16eb831 100644 --- a/python/zaphiro/grid/v1/fault_pb2.py +++ b/python/zaphiro/grid/v1/fault_pb2.py @@ -14,7 +14,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bzaphiro/grid/v1/fault.proto\x12\x0fzaphiro.grid.v1\"\xf0\x04\n\x05\x46\x61ult\x12\x0e\n\x02Id\x18\x01 \x01(\tR\x02Id\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x04kind\x18\x03 \x01(\x0e\x32(.zaphiro.grid.v1.PhaseConnectedFaultKindR\x04kind\x12\x32\n\x06phases\x18\x04 \x01(\x0e\x32\x1a.zaphiro.grid.v1.PhaseCodeR\x06phases\x12\x1c\n\tupdatedAt\x18\x05 \x01(\x03R\tupdatedAt\x12\x34\n\x06status\x18\x06 \x01(\x0e\x32\x1c.zaphiro.grid.v1.FaultStatusR\x06status\x12\x31\n\x11\x66\x61ultyEquipmentId\x18\x07 \x01(\tH\x01R\x11\x66\x61ultyEquipmentId\x88\x01\x01\x12\'\n\x0c\x66\x61ultCurrent\x18\x08 \x01(\x02H\x02R\x0c\x66\x61ultCurrent\x88\x01\x01\x12\x32\n\x14impactedEquipmentIds\x18\t \x03(\tR\x14impactedEquipmentIds\x12Q\n\x12usedMeasurementIds\x18\n \x03(\x0b\x32!.zaphiro.grid.v1.FaultMeasurementR\x12usedMeasurementIds\x12\x37\n\x14measurementTimestamp\x18\x0b \x01(\x03H\x03R\x14measurementTimestamp\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x14\n\x12_faultyEquipmentIdB\x0f\n\r_faultCurrentB\x17\n\x15_measurementTimestamp\"\x88\x01\n\tLineFault\x12,\n\x05\x66\x61ult\x18\x01 \x01(\x0b\x32\x16.zaphiro.grid.v1.FaultR\x05\x66\x61ult\x12\x35\n\x13lengthFromTerminal1\x18\x02 \x01(\x02H\x00R\x13lengthFromTerminal1\x88\x01\x01\x42\x16\n\x14_lengthFromTerminal1\"r\n\x0e\x45quipmentFault\x12,\n\x05\x66\x61ult\x18\x01 \x01(\x0b\x32\x16.zaphiro.grid.v1.FaultR\x05\x66\x61ult\x12#\n\nterminalID\x18\x02 \x01(\tH\x00R\nterminalID\x88\x01\x01\x42\r\n\x0b_terminalID\"\\\n\x10\x46\x61ultMeasurement\x12\"\n\x0cpositiveSign\x18\x01 \x01(\x08R\x0cpositiveSign\x12$\n\rmeasurementID\x18\x02 \x01(\tR\rmeasurementID*\x82\x02\n\x17PhaseConnectedFaultKind\x12*\n&PHASE_CONNECTED_FAULT_KIND_UNSPECIFIED\x10\x00\x12-\n)PHASE_CONNECTED_FAULT_KIND_LINE_TO_GROUND\x10\x01\x12+\n\'PHASE_CONNECTED_FAULT_KIND_LINE_TO_LINE\x10\x02\x12\x35\n1PHASE_CONNECTED_FAULT_KIND_LINE_TO_LINE_TO_GROUND\x10\x03\x12(\n$PHASE_CONNECTED_FAULT_KIND_LINE_OPEN\x10\x04*\x89\x04\n\tPhaseCode\x12\x1a\n\x16PHASE_CODE_UNSPECIFIED\x10\x00\x12\x10\n\x0cPHASE_CODE_A\x10\x01\x12\x10\n\x0cPHASE_CODE_B\x10\x02\x12\x10\n\x0cPHASE_CODE_C\x10\x03\x12\x10\n\x0cPHASE_CODE_N\x10\x04\x12\x11\n\rPHASE_CODE_AB\x10\x05\x12\x11\n\rPHASE_CODE_AC\x10\x06\x12\x11\n\rPHASE_CODE_BC\x10\x07\x12\x11\n\rPHASE_CODE_AN\x10\x08\x12\x11\n\rPHASE_CODE_BN\x10\t\x12\x11\n\rPHASE_CODE_CN\x10\n\x12\x12\n\x0ePHASE_CODE_ABC\x10\x0b\x12\x12\n\x0ePHASE_CODE_ABN\x10\x0c\x12\x12\n\x0ePHASE_CODE_ACN\x10\r\x12\x12\n\x0ePHASE_CODE_BCN\x10\x0e\x12\x13\n\x0fPHASE_CODE_ABCN\x10\x0f\x12\x12\n\x0ePHASE_CODE_S1N\x10\x10\x12\x12\n\x0ePHASE_CODE_S2N\x10\x11\x12\x13\n\x0fPHASE_CODE_S12N\x10\x12\x12\x11\n\rPHASE_CODE_S1\x10\x13\x12\x11\n\rPHASE_CODE_S2\x10\x14\x12\x12\n\x0ePHASE_CODE_S12\x10\x15\x12\x10\n\x0cPHASE_CODE_X\x10\x16\x12\x11\n\rPHASE_CODE_XY\x10\x17\x12\x11\n\rPHASE_CODE_XN\x10\x18\x12\x12\n\x0ePHASE_CODE_XYN\x10\x19*\x9b\x01\n\x0b\x46\x61ultStatus\x12\x1c\n\x18\x46\x41ULT_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x46\x41ULT_STATUS_STARTED\x10\x01\x12\"\n\x1e\x46\x41ULT_STATUS_ENDED_AND_LOCATED\x10\x02\x12\x16\n\x12\x46\x41ULT_STATUS_ENDED\x10\x03\x12\x18\n\x14\x46\x41ULT_STATUS_UNKNOWN\x10\x04\x42\x0bZ\t./grid/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bzaphiro/grid/v1/fault.proto\x12\x0fzaphiro.grid.v1\"\xd2\x05\n\x05\x46\x61ult\x12\x0e\n\x02Id\x18\x01 \x01(\tR\x02Id\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x04kind\x18\x03 \x01(\x0e\x32(.zaphiro.grid.v1.PhaseConnectedFaultKindR\x04kind\x12\x32\n\x06phases\x18\x04 \x01(\x0e\x32\x1a.zaphiro.grid.v1.PhaseCodeR\x06phases\x12\x1c\n\tupdatedAt\x18\x05 \x01(\x03R\tupdatedAt\x12G\n\x0e\x66\x61ultEventType\x18\x06 \x01(\x0e\x32\x1f.zaphiro.grid.v1.FaultEventTypeR\x0e\x66\x61ultEventType\x12\x31\n\x11\x66\x61ultyEquipmentId\x18\x07 \x01(\tH\x01R\x11\x66\x61ultyEquipmentId\x88\x01\x01\x12\'\n\x0c\x66\x61ultCurrent\x18\x08 \x01(\x02H\x02R\x0c\x66\x61ultCurrent\x88\x01\x01\x12\x32\n\x14impactedEquipmentIds\x18\t \x03(\tR\x14impactedEquipmentIds\x12Q\n\x12usedMeasurementIds\x18\n \x03(\x0b\x32!.zaphiro.grid.v1.FaultMeasurementR\x12usedMeasurementIds\x12\x37\n\x14measurementTimestamp\x18\x0b \x01(\x03H\x03R\x14measurementTimestamp\x88\x01\x01\x12\x35\n\x13locationProbability\x18\x0c \x01(\x02H\x04R\x13locationProbability\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x14\n\x12_faultyEquipmentIdB\x0f\n\r_faultCurrentB\x17\n\x15_measurementTimestampB\x16\n\x14_locationProbability\"\xd1\x01\n\tLineFault\x12,\n\x05\x66\x61ult\x18\x01 \x01(\x0b\x32\x16.zaphiro.grid.v1.FaultR\x05\x66\x61ult\x12\x35\n\x13lengthFromTerminal1\x18\x02 \x01(\x02H\x00R\x13lengthFromTerminal1\x88\x01\x01\x12\x31\n\x11lengthUncertainty\x18\x03 \x01(\x02H\x01R\x11lengthUncertainty\x88\x01\x01\x42\x16\n\x14_lengthFromTerminal1B\x14\n\x12_lengthUncertainty\"r\n\x0e\x45quipmentFault\x12,\n\x05\x66\x61ult\x18\x01 \x01(\x0b\x32\x16.zaphiro.grid.v1.FaultR\x05\x66\x61ult\x12#\n\nterminalID\x18\x02 \x01(\tH\x00R\nterminalID\x88\x01\x01\x42\r\n\x0b_terminalID\"\\\n\x10\x46\x61ultMeasurement\x12\"\n\x0cpositiveSign\x18\x01 \x01(\x08R\x0cpositiveSign\x12$\n\rmeasurementID\x18\x02 \x01(\tR\rmeasurementID*\x82\x02\n\x17PhaseConnectedFaultKind\x12*\n&PHASE_CONNECTED_FAULT_KIND_UNSPECIFIED\x10\x00\x12-\n)PHASE_CONNECTED_FAULT_KIND_LINE_TO_GROUND\x10\x01\x12+\n\'PHASE_CONNECTED_FAULT_KIND_LINE_TO_LINE\x10\x02\x12\x35\n1PHASE_CONNECTED_FAULT_KIND_LINE_TO_LINE_TO_GROUND\x10\x03\x12(\n$PHASE_CONNECTED_FAULT_KIND_LINE_OPEN\x10\x04*\x89\x04\n\tPhaseCode\x12\x1a\n\x16PHASE_CODE_UNSPECIFIED\x10\x00\x12\x10\n\x0cPHASE_CODE_A\x10\x01\x12\x10\n\x0cPHASE_CODE_B\x10\x02\x12\x10\n\x0cPHASE_CODE_C\x10\x03\x12\x10\n\x0cPHASE_CODE_N\x10\x04\x12\x11\n\rPHASE_CODE_AB\x10\x05\x12\x11\n\rPHASE_CODE_AC\x10\x06\x12\x11\n\rPHASE_CODE_BC\x10\x07\x12\x11\n\rPHASE_CODE_AN\x10\x08\x12\x11\n\rPHASE_CODE_BN\x10\t\x12\x11\n\rPHASE_CODE_CN\x10\n\x12\x12\n\x0ePHASE_CODE_ABC\x10\x0b\x12\x12\n\x0ePHASE_CODE_ABN\x10\x0c\x12\x12\n\x0ePHASE_CODE_ACN\x10\r\x12\x12\n\x0ePHASE_CODE_BCN\x10\x0e\x12\x13\n\x0fPHASE_CODE_ABCN\x10\x0f\x12\x12\n\x0ePHASE_CODE_S1N\x10\x10\x12\x12\n\x0ePHASE_CODE_S2N\x10\x11\x12\x13\n\x0fPHASE_CODE_S12N\x10\x12\x12\x11\n\rPHASE_CODE_S1\x10\x13\x12\x11\n\rPHASE_CODE_S2\x10\x14\x12\x12\n\x0ePHASE_CODE_S12\x10\x15\x12\x10\n\x0cPHASE_CODE_X\x10\x16\x12\x11\n\rPHASE_CODE_XY\x10\x17\x12\x11\n\rPHASE_CODE_XN\x10\x18\x12\x12\n\x0ePHASE_CODE_XYN\x10\x19*\xa8\x01\n\x0e\x46\x61ultEventType\x12 \n\x1c\x46\x41ULT_EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46\x41ULT_EVENT_TYPE_STARTED\x10\x01\x12\x1c\n\x18\x46\x41ULT_EVENT_TYPE_LOCATED\x10\x02\x12\x1a\n\x16\x46\x41ULT_EVENT_TYPE_ENDED\x10\x03\x12\x1c\n\x18\x46\x41ULT_EVENT_TYPE_UNKNOWN\x10\x04\x42\x0bZ\t./grid/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -22,18 +22,18 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z\t./grid/v1' - _globals['_PHASECONNECTEDFAULTKIND']._serialized_start=1025 - _globals['_PHASECONNECTEDFAULTKIND']._serialized_end=1283 - _globals['_PHASECODE']._serialized_start=1286 - _globals['_PHASECODE']._serialized_end=1807 - _globals['_FAULTSTATUS']._serialized_start=1810 - _globals['_FAULTSTATUS']._serialized_end=1965 + _globals['_PHASECONNECTEDFAULTKIND']._serialized_start=1196 + _globals['_PHASECONNECTEDFAULTKIND']._serialized_end=1454 + _globals['_PHASECODE']._serialized_start=1457 + _globals['_PHASECODE']._serialized_end=1978 + _globals['_FAULTEVENTTYPE']._serialized_start=1981 + _globals['_FAULTEVENTTYPE']._serialized_end=2149 _globals['_FAULT']._serialized_start=49 - _globals['_FAULT']._serialized_end=673 - _globals['_LINEFAULT']._serialized_start=676 - _globals['_LINEFAULT']._serialized_end=812 - _globals['_EQUIPMENTFAULT']._serialized_start=814 - _globals['_EQUIPMENTFAULT']._serialized_end=928 - _globals['_FAULTMEASUREMENT']._serialized_start=930 - _globals['_FAULTMEASUREMENT']._serialized_end=1022 + _globals['_FAULT']._serialized_end=771 + _globals['_LINEFAULT']._serialized_start=774 + _globals['_LINEFAULT']._serialized_end=983 + _globals['_EQUIPMENTFAULT']._serialized_start=985 + _globals['_EQUIPMENTFAULT']._serialized_end=1099 + _globals['_FAULTMEASUREMENT']._serialized_start=1101 + _globals['_FAULTMEASUREMENT']._serialized_end=1193 # @@protoc_insertion_point(module_scope) diff --git a/python/zaphiro/grid/v1/fault_pb2.pyi b/python/zaphiro/grid/v1/fault_pb2.pyi index 1197f63..0615e7a 100644 --- a/python/zaphiro/grid/v1/fault_pb2.pyi +++ b/python/zaphiro/grid/v1/fault_pb2.pyi @@ -43,13 +43,13 @@ class PhaseCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): PHASE_CODE_XN: _ClassVar[PhaseCode] PHASE_CODE_XYN: _ClassVar[PhaseCode] -class FaultStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): +class FaultEventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () - FAULT_STATUS_UNSPECIFIED: _ClassVar[FaultStatus] - FAULT_STATUS_STARTED: _ClassVar[FaultStatus] - FAULT_STATUS_ENDED_AND_LOCATED: _ClassVar[FaultStatus] - FAULT_STATUS_ENDED: _ClassVar[FaultStatus] - FAULT_STATUS_UNKNOWN: _ClassVar[FaultStatus] + FAULT_EVENT_TYPE_UNSPECIFIED: _ClassVar[FaultEventType] + FAULT_EVENT_TYPE_STARTED: _ClassVar[FaultEventType] + FAULT_EVENT_TYPE_LOCATED: _ClassVar[FaultEventType] + FAULT_EVENT_TYPE_ENDED: _ClassVar[FaultEventType] + FAULT_EVENT_TYPE_UNKNOWN: _ClassVar[FaultEventType] PHASE_CONNECTED_FAULT_KIND_UNSPECIFIED: PhaseConnectedFaultKind PHASE_CONNECTED_FAULT_KIND_LINE_TO_GROUND: PhaseConnectedFaultKind PHASE_CONNECTED_FAULT_KIND_LINE_TO_LINE: PhaseConnectedFaultKind @@ -81,45 +81,49 @@ PHASE_CODE_X: PhaseCode PHASE_CODE_XY: PhaseCode PHASE_CODE_XN: PhaseCode PHASE_CODE_XYN: PhaseCode -FAULT_STATUS_UNSPECIFIED: FaultStatus -FAULT_STATUS_STARTED: FaultStatus -FAULT_STATUS_ENDED_AND_LOCATED: FaultStatus -FAULT_STATUS_ENDED: FaultStatus -FAULT_STATUS_UNKNOWN: FaultStatus +FAULT_EVENT_TYPE_UNSPECIFIED: FaultEventType +FAULT_EVENT_TYPE_STARTED: FaultEventType +FAULT_EVENT_TYPE_LOCATED: FaultEventType +FAULT_EVENT_TYPE_ENDED: FaultEventType +FAULT_EVENT_TYPE_UNKNOWN: FaultEventType class Fault(_message.Message): - __slots__ = ("Id", "description", "kind", "phases", "updatedAt", "status", "faultyEquipmentId", "faultCurrent", "impactedEquipmentIds", "usedMeasurementIds", "measurementTimestamp") + __slots__ = ("Id", "description", "kind", "phases", "updatedAt", "faultEventType", "faultyEquipmentId", "faultCurrent", "impactedEquipmentIds", "usedMeasurementIds", "measurementTimestamp", "locationProbability") ID_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] KIND_FIELD_NUMBER: _ClassVar[int] PHASES_FIELD_NUMBER: _ClassVar[int] UPDATEDAT_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] + FAULTEVENTTYPE_FIELD_NUMBER: _ClassVar[int] FAULTYEQUIPMENTID_FIELD_NUMBER: _ClassVar[int] FAULTCURRENT_FIELD_NUMBER: _ClassVar[int] IMPACTEDEQUIPMENTIDS_FIELD_NUMBER: _ClassVar[int] USEDMEASUREMENTIDS_FIELD_NUMBER: _ClassVar[int] MEASUREMENTTIMESTAMP_FIELD_NUMBER: _ClassVar[int] + LOCATIONPROBABILITY_FIELD_NUMBER: _ClassVar[int] Id: str description: str kind: PhaseConnectedFaultKind phases: PhaseCode updatedAt: int - status: FaultStatus + faultEventType: FaultEventType faultyEquipmentId: str faultCurrent: float impactedEquipmentIds: _containers.RepeatedScalarFieldContainer[str] usedMeasurementIds: _containers.RepeatedCompositeFieldContainer[FaultMeasurement] measurementTimestamp: int - def __init__(self, Id: _Optional[str] = ..., description: _Optional[str] = ..., kind: _Optional[_Union[PhaseConnectedFaultKind, str]] = ..., phases: _Optional[_Union[PhaseCode, str]] = ..., updatedAt: _Optional[int] = ..., status: _Optional[_Union[FaultStatus, str]] = ..., faultyEquipmentId: _Optional[str] = ..., faultCurrent: _Optional[float] = ..., impactedEquipmentIds: _Optional[_Iterable[str]] = ..., usedMeasurementIds: _Optional[_Iterable[_Union[FaultMeasurement, _Mapping]]] = ..., measurementTimestamp: _Optional[int] = ...) -> None: ... + locationProbability: float + def __init__(self, Id: _Optional[str] = ..., description: _Optional[str] = ..., kind: _Optional[_Union[PhaseConnectedFaultKind, str]] = ..., phases: _Optional[_Union[PhaseCode, str]] = ..., updatedAt: _Optional[int] = ..., faultEventType: _Optional[_Union[FaultEventType, str]] = ..., faultyEquipmentId: _Optional[str] = ..., faultCurrent: _Optional[float] = ..., impactedEquipmentIds: _Optional[_Iterable[str]] = ..., usedMeasurementIds: _Optional[_Iterable[_Union[FaultMeasurement, _Mapping]]] = ..., measurementTimestamp: _Optional[int] = ..., locationProbability: _Optional[float] = ...) -> None: ... class LineFault(_message.Message): - __slots__ = ("fault", "lengthFromTerminal1") + __slots__ = ("fault", "lengthFromTerminal1", "lengthUncertainty") FAULT_FIELD_NUMBER: _ClassVar[int] LENGTHFROMTERMINAL1_FIELD_NUMBER: _ClassVar[int] + LENGTHUNCERTAINTY_FIELD_NUMBER: _ClassVar[int] fault: Fault lengthFromTerminal1: float - def __init__(self, fault: _Optional[_Union[Fault, _Mapping]] = ..., lengthFromTerminal1: _Optional[float] = ...) -> None: ... + lengthUncertainty: float + def __init__(self, fault: _Optional[_Union[Fault, _Mapping]] = ..., lengthFromTerminal1: _Optional[float] = ..., lengthUncertainty: _Optional[float] = ...) -> None: ... class EquipmentFault(_message.Message): __slots__ = ("fault", "terminalID") diff --git a/zaphiro/grid/v1/fault.proto b/zaphiro/grid/v1/fault.proto index 0320693..31ea4cd 100644 --- a/zaphiro/grid/v1/fault.proto +++ b/zaphiro/grid/v1/fault.proto @@ -62,20 +62,24 @@ enum PhaseCode { PHASE_CODE_XYN = 25; //Two unknown non-neutral phases plus neutral. } -/* The collection of Fault Status defined so far.*/ - -enum FaultStatus { - FAULT_STATUS_UNSPECIFIED = 0; //No status defined - FAULT_STATUS_STARTED = 1; //Fault started - FAULT_STATUS_ENDED_AND_LOCATED = 2; //Fault was located - FAULT_STATUS_ENDED = 3; //Fault ended - FAULT_STATUS_UNKNOWN = 4; //Information available don't allow us to know if the Fault is active or complete +/* The collection of Fault Event Types defined so far.*/ + +enum FaultEventType { + FAULT_EVENT_TYPE_UNSPECIFIED = 0; //No status defined + FAULT_EVENT_TYPE_STARTED = 1; //Fault started + FAULT_EVENT_TYPE_LOCATED = 2; //Fault located + FAULT_EVENT_TYPE_ENDED = 3; //Fault ended + FAULT_EVENT_TYPE_UNKNOWN = 4; //Information available don't allow us to know if the Fault is active or complete } /* Abnormal condition causing current flow through conducting equipment, such as caused by equipment failure or short circuits from objects not typically modelled (for example, a tree falling on a line). This message is modeled after [CIM Fault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/Fault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Faults messages represent events linked to a given fault (identified by the id). From the point of view of storage the sequence of events may be handled in a way that does not map totally to the single event, e.g. by combining multiple events in a single database row. + +When a fault is detected, an `Fault` message event of type `FAULT_EVENT_TYPE_STARTED` is generated, when a fault is located (and multiple locations can occur for the same fault) and a `Fault` event message of type `FAULT_EVENT_TYPE_LOCATED` is generated. When a fault ends, a `Fault` event message of type `FAULT_EVENT_TYPE_ENDED` is generated. Certain fields of the Fault event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `locationProbability`, `measurementTimestamp`). + Headers used in rabbitMQ: * `id` (string): id of the `Fault` * `type` (string): always `Fault` @@ -88,18 +92,21 @@ message Fault { PhaseConnectedFaultKind kind = 3; //The kind of phase fault. PhaseCode phases = 4; //The phases participating in the fault. The fault connections into these phases are further specified by the type of fault. int64 updatedAt = 5; //The date and time at which the fault started/located/ended depending on the Fault Status (Unix msec timestamp). - FaultStatus status = 6; //The status of the fault. + FaultEventType faultEventType = 6; //The type of the fault event. optional string faultyEquipmentId = 7; //The equipment with the fault. optional float faultCurrent = 8; //The current associated to the fault. repeated string impactedEquipmentIds = 9; //The set of IDs of equipments impacted by the fault. repeated FaultMeasurement usedMeasurementIds = 10; //The set of measurements used to locate the fault. optional int64 measurementTimestamp = 11; // The timestamp of the measurements used to compute the fault location. + optional float locationProbability = 12; // The probability associated to the location. (This is relevant because multiple locations can be returned for a fault) } /* A fault that occurs on an AC line segment at some point along the length. This message is modeled after [CIM LineFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/LineFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Certain fields of the `LineFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `lengthFromTerminal1`, `lengthUncertainty`). + Headers used in rabbitMQ: * `id` (string): id of the `Fault` * `type` (string): always `LineFault` @@ -109,6 +116,7 @@ Headers used in rabbitMQ: message LineFault { Fault fault = 1; //The base fault message. optional float lengthFromTerminal1 = 2; //The length to the place where the fault is located starting from terminal with sequence number 1 of the faulted line segment. + optional float lengthUncertainty = 3; //The +/- uncertainty on the reported length. } /* @@ -116,6 +124,8 @@ A fault applied at the terminal, external to the equipment. This class is not us This message is modeled after [CIM EquipmentFault](https://zepben.github.io/evolve/docs/cim/cim100/TC57CIM/IEC61970/Base/Faults/EquipmentFault) according to the extensions defined in the [fault-data-storage](https://github.com/zaphiro-technologies/architecture/blob/main/features/31-fault-data-storage.md#data-structures) feature. +Certain fields of the `EquipmentFault` event message may be populated only in case of event type `FAULT_EVENT_TYPE_LOCATED` (i.e. `terminalID`). + Headers used in rabbitMQ: * `id` (string): id of the `EquipmentFault` * `type` (string): always `LineFault`