This plugin can be used to convert HNZ objects 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 HNZ south plugin. This section is mandatory so that the filter plugin can convert the PIVOT type from HNZ 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.
Converting monitoring data types
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 |
---|---|
PIVOT.GTIS | Tele Signalisation |
PIVOT.GTIM | Tele Measurement |
PIVOT.GTIC | Tele command |
<type>
conversion table:
CDC Class | HNZ Type ID |
---|---|
SpsTyp/DpsTyp | TS / TC (ACK) / TVC (ACK) |
MvTyp | TM |
SpcTyp/DpcTyp | TC |
IncTyp | TVC |
The content under <Root> will convert the IEC 104 data objet to a pivot object as follow:
Tele-Informations
Key | Type | Default Value | HNZ.data_object.<...> | Note | Mandatory (of do field) |
---|---|---|---|---|---|
<Root>.<type> | {CDC} | do_type | exchanged_data.datapoints.pivot_type (see <type> conversion table above) | YES | |
<Root>.Cause.stVal | Integer | do_cg | 3 (TS on CE) | 20 (TS on CG) | 1 (TM cyclic) | YES | |
<Root>.ComingFrom | String | hnzip | do_comingfrom | NO | |
<Root>.SpsTyp.stVal | Boolean | do_value | [0..1] TS | YES | |
<Root>.MvTyp.mag.i | Integer | do_value | Int 32 (TM) | YES | |
<Root>.Identifier | String | do_id | exchanged_data.datapoints.pivot_id | YES | |
<Root>.<type>.q.Validity | String | good | do_valid | good (0) | invalid (1) | NO |
<Root>.<type>.t.SecondSinceEpoch <Root>.<type>.t.FractionOfSecond | Integer Integer | do_ts | SecondSinceEpoch is the time in seconds since 1970- 01-01 00:00:00 UTC FractionOfSecond is the fraction of second (Computation method described in 61850 protocol documentation). | YES | |
<Root>.TmValidity.stVal | String | good | do_ts_iv | good (0) | invalid (1) | NO |
<Root>.<type>.q.Validity <Root>.<type>.q.DetailQuality.oldData | String Boolean | Validity = "good" oldData = <undefined> | do_ts_c | 0 => Validity = "good", oldData = <undefined> 1 => Validity = "questionable", oldData = "true" | NO |
TC ACK and TVC ACK
Key | Type | Default Value | HNZ.data_object.<...> | Note | Mandatory (of do field) |
---|---|---|---|---|---|
<Root>.<type> | {CDC} | do_type | SpcTyp (TC) | IncTyp (TVC) | YES | |
<Root>.ComingFrom | String | hnzip | do_comingfrom | NO | |
<Root>.SpcTyp.stVal | Boolean | do_value | [0..1] | YES (if TC) | |
<Root>.IncTyp.stVal | Int | do_value | Int 32 | YES (if TVC) | |
<Root>.Identifier | String | do_id | exchanged_data.datapoints.pivot_id | YES | |
<Root>.<type>.q.Validity | String | good | do_valid | good (0) | invalid (1) | NO |
Filter rules
STATION => (ASDU) HNZ SOUTH => (IEC104 DP) HNZTOPIVOT =>(PIVOT DP) PIVOTTOIEC104 => (IEC104 DP) IEC104 NORTH => (ASDU) CENTER
Rule 1: if the incoming HNZ 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.
Converting commands data types
TC and TVC
Key | Type | Default Value | HNZ.data_object.<...> | Note | Mandatory (of co field) |
---|---|---|---|---|---|
<Root>.<type> | {CDC} | co_type | SpcTyp (TC) | IncTyp (TVC) | YES | |
<Root>.SpcTyp.stVal | Boolean | co_value | [0..1] | YES (if TC) | |
<Root>.IncTyp.stVal | Int | co_value | Int 32 | YES (if TVC) | |
<Root>.Identifier | String | co_id | exchanged_data.datapoints.pivot_id | YES |