Skip to Content
This documentation is provided with the HEAT environment and describes this HEAT instance.
DevelopersRunnerscore-utilsentity-state-to-records

entity-state-to-records

entity-state-to-records converts decoded OpenDIS Entity State Protocol Data Units (PDUs) into entity-state records. The same downstream nodes then work for DIS traffic and for HEAT capture data.

Entity-state records are the JSON records array that hydrate-protobuf-v2 emits with extractionTarget: EntityState. This node produces that shape from the pdu list that opendis-decode emits. Each EntityStatePdu becomes one record with a world_position component and, when velocity is present, a velocity component. Earth-centred coordinates are converted to latitude, longitude and altitude on the WGS84 ellipsoid.

It is not a decoder. PDUs must already be JSON objects with a __class__ field.

When to use

Use this node when the data source is DIS and the dashboard uses entity-state-to-mapdisplay, entity-state-to-flightpath or entity-state-to-chart-data.

Pipeline position

opendis-decode -> entity-state-to-records -> entity-state-to-mapdisplay -> entity-state-to-flightpath -> entity-state-to-chart-data

The node reads the latest output of one parent and uses the first payload only.

Configuration

Configuration is required, but every key is optional.

KeyTypeRequiredDefaultDescription
timestampSourcestringNopacket_timestamp_unix_msField in each PDU entry that holds the time stamp.
baseCapturedAtstringNononeISO 8601 base time stamp. When set, simulation_time_seconds is (timestamp - base) / 1000.
entityLocationFieldstringNoentityLocationField in the PDU holding the location vector (x, y, z).
entityVelocityFieldstringNoentityLinearVelocityField in the PDU holding the velocity vector (x, y, z).
entityMarkingFieldstringNomarkingField in the PDU holding the marking object.
entityIdFieldstringNoentityIDField in the PDU holding the entity id (site, application, entity).
entityNamesarray of stringNononeNames to keep. Empty means keep every entity.
entityNameFieldstringNoentity_markingUnused today. The entity name is always derived from the marking.

Output

A JSON object with a records array.

{ "records": [ { "entity_state": { "entity": [ { "name": "ENTITY01", "id": "S121A110E7009", "components": [ { "world_position": { "latitude": 42.45, "longitude": 11.80, "altitude": 4692.0 } } ] } ] }, "packet_timestamp_unix_ms": 1780568643000, "simulation_time_seconds": 123.456 } ] }
  • The entity name comes from the marking, trying characterString, then character_string, then the characters integer array. When none is present the name falls back to the id string S<site>A<application>E<entity>.
  • Both site, application, entity and siteID, applicationID, entityID key styles are accepted in the entity id.
  • simulation_time_seconds is present only when baseCapturedAt is set and valid.

Limitations

  • Only PDUs whose __class__ is EntityStatePdu are converted. Other PDU types are skipped.
  • One parent, first payload of the latest output only, even though the manifest marks the template as accepting multiple inputs.
  • The node fails when no valid EntityStatePdu is found.
Opens your browser's print dialog. Choose "Save as PDF" as the destination.