This plugin can be used to convert TASE.2 datapoints to FledgePower pivot model objects.
The filter implements the Fledge Filter plugin interface (see filter_plugins).
Common rules
Filter configuration
See Plugins configuration design for examples and details.
The "config" parameter of "plugin_init" call shall include :
A "exchanged_data" category with the same content as provided to the TASE.2 south plugin. This section is mandatory so that the filter plugin can convert the PIVOT type from TASE.2 type.
Notes :
All types not listed in this table are not supported in current version.
The current implementation provides a default mapping rule for each known type, but some new rules might be added in the future and configured using the "alternate_mapping_rule" option in its parameters.
Filter interface
The "plugin_ingest" call will convert each "reading" of "reading_set" as follow:
The Reading fields "id", "TimeStamp" and "userTimestamp" are unchanged.
The "asset_name" field shall be mapped with "exchanged_data.datapoints.label"
The Reading field "reading" is updated with a JSON object {'<Root> key' : {...}} . The content of object under '<Root> key' is given below.
The <Root> key of PIVOT object is:
Reading key | Content |
---|---|
PIVOTTS.GTIS | Status Point |
PIVOTTM.GTIM | Measurement |
PIVOTTC.GTIC | Command or Set Point |
<type> conversion table:
TASE.2 type | CDC class | Comment |
---|---|---|
Command | SPC, DPC, INC | PivotType has to be defined in exchanged_data (default = INC) |
SetPointReal | APC, ASG | PivotType has to be defined in exchanged_data (default = ASG) |
SetPointDiscrete | INC, ING | PivotType has to be defined in exchanged_data (default = ING) |
State, StateQ, StateQTime, StateQTimeExt | DPS, SPS | PivotType has to be defined in exchanged_data (default = DPS) |
Discrete, DiscreteQ, DiscreteQTime, DiscreteQTimeExt | INS, ENS | PivotType has to be defined in exchanged_data (default = INS) |
Real, RealQ, RealQTime, RealQTimeExt | MV | |
StateSupplemental, StateSupplementalQ, StateSupplementalQTime, StateSupplementalQTimeExt | DPS, SPS (same as State) | TAG, and EXPECTED cannot be mapped |
Converting monitoring data types
The content under <Root> will convert the TASE.2 data objet to a pivot object as follow:
Key | Type | Default Value | tase2.data_object.<...> | Note |
---|---|---|---|---|
<Root>.ComingFrom | String | This plugin should always use the value "tase2" when converting to pivot | ||
<Root>.Identifier | String | exchanged_data.datapoints.pivot_id | ||
<Root>.<type> | {CDC} | do_type | exchanged_data.datapoints.pivot_type (see <type> conversion table above) | |
<Root>.<type>.q.Validity | String | false | do_validity | |
<Root>.<type>.q.Source | String | "process" | do_cs | “process” → “telemetered” “substituted” → “entered” (When converting from TASE.2 to PIVOT :“telemetered” → “process” “calculated” → “process” “entered” → “substituted” “estimated” → “substituted”) |
<Root>.<type>.q.DetailQuality | String | do_quality_normal_value | Any Detail Quality flag set to true (e.g OldData) → do_quality_normal_value = “abnormal” | |
<Root>.<type>.t.SecondSinceEpoch | Integer | do_ts | ||
<Root>.SpsTyp.stVal | Boolean | do_value | ||
<Root>.InsTyp.stVal | Integer | do_value | ||
<Root>.EnsTyp.stVal | Integer | do_value | ||
<Root>.DpsTyp.stVal | String | do_value | intermediate-state | off | on | bad-state | |
<Root>.MvTyp.mag.f | Float | do_value | Float 32 | |
<Root>.MvTyp.mag.i | Integer | do_value | Int 32 |
Filter rules
STATION => (TASE2.INDICATIONPOINT) TASE.2 SOUTH => (TASE.2 DP) TASE.2TOPIVOT =>(PIVOT DP) PIVOTTOTASE.2 => (TASE.2 DP) TASE.2 NORTH => (TASE2.INDICATIONPOINT) CENTER
Rule 1: if the incoming TASE.2 data object has not the attribute or has the default value then we don't have to create the corresponding attribute in the pivot object.
Rule 2: If the received pivot object has not an expected attribute then we create the attribute of the protocol specific datapoint with default value.
Rule 3: Case when data object timestamp is not received:
A the TASE.2TOPIVOT step:
If the received data object is without timestamp Then
We create a pivot object With timestamp = current system time
Converting commands data types
The content under <Root> will convert the TASE.2 command objet to a pivot object as follow:
Key | Order | Type | Default Value | tase2.data_object.<...> | Note |
---|---|---|---|---|---|
<Root>.ComingFrom | String | This plugin should always use the value "tase2" when converting to pivot | |||
<Root>.Identifier | String | exchanged_data.datapoints.pivot_id | |||
<Root>.Select.stVal | Boolean | false | co_se |
| |
<Root>.<type> | {CDC} | co_type | exchanged_data.datapoints.pivot_type (see <type> conversion table above) | ||
<Root>.<type>.t.SecondSinceEpoch | Integer | co_ts | |||
<Root>.SpcTyp.ctlVal | Boolean | co_value | 0 or 1 | ||
<Root>.DpcTyp.ctlVal | String | co_value | intermediate-state | off | on | bad-state | ||
<Root>.IncTyp.ctlVal | Integer | co_value | Int 32 | ||
<Root>.IngTyp.ctlVal | Integer | co_value | Int 32 | ||
<Root>.ApcTyp.ctlVal | Float | co_value | Float 32 | ||
<Root>.AsgTyp.ctlVal | Float | co_value | Float 32 |
Filter rules
CENTER => (TASE2.OPERATION) TASE.2 NORTH => (TASE.2 DP) TASE.2TOPIVOT =>(PIVOT DP) PIVOTTOTASE.2 => (TASE.2 DP) TASE.2 SOUTH=> (TASE2.OPERATION) STATION
Rule 1: if the incoming TASE.2 command object has not the attribute or has the default value then we don't have to create the corresponding attribute in the pivot object.
Rule 2: If the received pivot object has not an expected attribute then we create the attribute of the protocol specific command with default value.
Rule 3: the timestamp of the original command issued by the Center must be transmitted as is to the Station.
Rule 4: Case when TASE.2 command object timestamp is not received for data object type with timestamp, then TASE.2 command object is rejected with error message.
Rule 5: Case when TASE.2 command object for data object type without timestamp is received then:
A the TASE.2TOPIVOT step:
If the received data object is without timestamp Then We create a pivot object With timestamp = current system time