entity-state-to-stats-summary
entity-state-to-stats-summary reduces entity-state records to one value channel of engagement counters. It reports time to first detection, the number of detections, and how many sensor drops each platform type made.
Entity-state records are the JSON records array that hydrate-protobuf-v2 emits with extractionTarget: EntityState. The node reads detection beams through a JMESPath (a query language for JSON) expression and counts rising edges per beam, so a sustained detection counts once. A detection is attributed to a sensor entity through the detecting entity’s linked_entity.parent_entity_id link, or through the detecting entity’s own name when no link exists.
The output is one Channel inside a data service payload. It is fixed to these counters. For an arbitrary numeric field use entity-state-to-flight-stats.
When to use
Use this node when a Next dashboard needs a StatsSummary block for a sensor-drop and detection scenario.
Pipeline position
hydrate-protobuf-v2 (EntityState) -> entity-state-to-stats-summary -> json-merge -> dashboard-v2The node reads the latest output of one parent.
Configuration
Configuration is required.
| Key | Type | Required | Default | Description |
|---|---|---|---|---|
entriesPath | string | No | records[*] | JMESPath to the array of time-ordered records. |
timeField | string | No | simulation_time_seconds | Dotted path from each record to its simulation time. |
entitiesPath | string | No | entity_state.entity | JMESPath from each record to its entity object or array of objects. |
entityNameField | string | No | name | Dotted path from each entity to its name. |
detectionBeamsField | string | Yes | none | JMESPath from an entity to its detection beams array. |
sonobuoyNamePattern | string | Yes | BUOY | Name prefix that identifies sensor entities. |
uavEntities | array of string | Yes | none | Names of entities of the first platform type that drops sensors. |
frigateEntities | array of string | Yes | none | Names of entities of the second platform type that drops sensors. |
baseCapturedAt | string | Yes | none | ISO 8601 base time stamp for the simulation. |
groupId | string | No | stats | Group id for the channel. |
groupName | string | No | Engagement Summary | Group display name. |
channelId | string | No | stats-summary | Channel id. |
falseDetectionConfig | object | No | none | Counts detection tracks that ended before the session did. See below. |
falseDetectionConfig keys:
| Key | Type | Required | Default | Description |
|---|---|---|---|---|
entityPattern | string | Yes | none | Name prefix identifying detection tracks. |
endToleranceSeconds | number | No | 1 | A track is true when its last-seen time is within this many seconds of the session’s last recorded time. |
Output
A data service payload with one value channel.
{
"$heat-dataservice": {
"version": "1.0",
"groups": [{ "id": "stats", "name": "Engagement Summary" }],
"realms": [
{
"name": "overview",
"channels": [
{
"id": "stats-summary",
"name": "stats-summary",
"groupId": "stats",
"shape": "value",
"data": {
"value": {
"timeToDetectSec": 45.2,
"totalDetections": 142,
"sonobuoysDroppedByUav": 12,
"sonobuoysTowedByFrigate": 3
}
}
}
]
}
]
},
"dashboard_users": []
}| Field | Type | Description |
|---|---|---|
timeToDetectSec | number or null | Seconds from simulation start to the first rising-edge detection. Null when there is none. |
totalDetections | integer | Number of per-beam rising edges across all frames. |
sonobuoysDroppedByUav | integer | Sensor entities that share at least one frame with an entity in uavEntities. |
sonobuoysTowedByFrigate | integer | Sensor entities that share at least one frame with an entity in frigateEntities and none with uavEntities. |
falseDetectionTrackCount | integer | Present only when falseDetectionConfig is set. Number of detection tracks classified false. |
Bind the channel to a StatsSummary widget and name these fields in statsItems.columns[].
Limitations
- One parent, latest output only.
- Simulation start is the first time value greater than zero.
- A sensor entity that never shares a frame with either platform type is counted in neither drop counter.
- The node fails when the records array is empty or
baseCapturedAtcannot be parsed.
Related
- StatsSummary (Next) renders the value channel.
- entity-state-to-flight-stats reduces one numeric field to min, max and average.
- session-summary is the Legacy dashboard counterpart.