Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


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

  • 0 is mapped with false, for Execute

  • 1 is mapped with true, for Select before Execute

<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