Dynamic Update
Read or write a value in the shared world model.
MessageTypeEnum_DYNAMIC_UPDATE
Read or write a value in the shared world model.
| Direction | any → world model (broadcast) |
| Cadence | Whenever the world model changes — often high-volume. |
| Delivery | Broadcast — telemetry plane (QoS 0) |
| Schema | catl/hibw/messages/dynamic_update/DynamicUpdate.json |
| Worked examples | 7 |
Purpose
The world-model verb. Carries a single discriminated operation — PUT_VALUE (insert/overwrite), DELETE_REFERENCE, QUERY, or GET_REFERENCE — over a typed value: Volume, Track, Contact, DataProduct, Location and more. This is how contacts and tracks enter the shared picture that fusion consumes.
When to send it
PUT_VALUE— to publish or update a Volume / Track / Contact / DataProduct.DELETE_REFERENCE— to retract a value by reference.QUERY/GET_REFERENCE— to read current world-model state.
Where it fits
Message header
Every CATL message carries this envelope header.
| Field | Type | Multiplicity | Description |
|---|---|---|---|
message_type | MessageTypeEnum | [1..1] | An enumeration. |
source | GUID | [1..1] | Source that send this message. Often same as source of information, but different when relaying. |
version | string | [1..1] | Version of the schema used to create and validate this message. Has to follow major.minor.patch notation. For study draft 3 it should be 0.3.0. |
time_sent | Time | [1..1] |
Body — DynamicUpdateBody
| Field | Type | Multiplicity | Description |
|---|---|---|---|
operation | DynamicUpdateOperation | [1..1] |
Full DynamicUpdateBody reference →
Key fields
operation— Discriminated byDynamicUpdateOperationTypeEnum_*— PUT_VALUE / DELETE_REFERENCE / QUERY / GET_REFERENCE. Required.put_value— For PUT_VALUE: discriminated byValueTypeEnum_*(VOLUME / TRACK / CONTACT / DATA_PRODUCT / …) — the actual value being written.identifier / timestamp— Stable identity + observation time on the value, so consumers can de-duplicate and order updates.
Worked examples
Dynamic Update Volume
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/world/volume (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_VOLUME",
"volume": {
"identifier": "eeda49f7-487e-5a68-a227-8aa40937015c",
"timestamp": "2025-03-18T12:05:00+00:00",
"volume": {
"bottom_boundary": -100,
"top_boundary": 0,
"region": {
"$discriminator": "RegionTypeEnum_POLYGON_AREA",
"polygon_area": {
"points": [
{
"latitude": 10,
"longitude": 10
},
{
"latitude": 11,
"longitude": 11
},
{
"latitude": 12,
"longitude": 12
}
]
}
}
}
}
}
}
}
}Dynamic Update Track
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/world/track (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_TRACK",
"track": {
"identifier": "0c038c15-46de-5367-915e-9b8cafdd227e",
"description": {
"context_type": "ContextEnum_REALITY",
"standard_identity": "StandardIdentityEnum_FRIEND",
"symbol_set": "SymbolSetEnum_SEA_SUBSURFACE",
"status": "EntityStatusEnum_PRESENT",
"headquarters_task_force_dummy": "HeadquartersTaskForceDummyEnum_NOT_APPLICABLE",
"entity": "11",
"entity_type": "04",
"entity_subtype": "00",
"sector_1": "00",
"sector_2": "00",
"name": "cmre.some_track"
},
"timestamp": "2025-03-18T12:05:00+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10,
"longitude": 12,
"altitude": [
{
"value": 123,
"type": "AltitudeTypeEnum_WGS"
}
]
}
}
},
"track_phase": "TrackPhase_DEAD_RECKONED"
}
}
}
}
}Dynamic Update Data Product
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/world/product (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_DATA_PRODUCT",
"data_product": {
"source_of_information": "767b1649-9057-5c9e-ad75-2d23c27a30ef",
"identifier": "1e64d97d-1bb2-55eb-9013-b991dc9295c8",
"timestamp": "2025-03-18T12:05:00+00:00",
"description": {
"name": "REA product, anyone?"
},
"references": [
{
"identifier": "01f6e603-8677-5930-94b7-f8f24add140e",
"value_type": "ValueTypeEnum_TASK"
}
],
"products": [
{
"$discriminator": "ProductTypeEnum_URI",
"uri": {
"uri": "http://whatever/collection/uuid"
}
}
]
}
}
}
}
}Dynamic Update Contact Mcm
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/world/contact (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_CONTACT",
"contact": {
"identifier": "7827da28-a5f5-563e-a4fd-3a2e39597143",
"description": {
"name": "cmre.contact"
},
"timestamp": "2025-03-18T12:05:00+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10,
"longitude": 12,
"altitude": [
{
"value": 123,
"type": "AltitudeTypeEnum_WGS"
}
]
}
}
},
"specialization": {
"$discriminator": "ContactSpecializationTypeEnum_MCM_CONTACT",
"mcm_contact": {
"state": "MCMContactStateEnum_MINE"
}
}
}
}
}
}
}Dynamic Update Contact Sbw
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/world/contact (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_CONTACT",
"contact": {
"identifier": "6aa14147-ce1c-5901-80b5-054a8ad384f2",
"description": {
"name": "cmre.contact"
},
"timestamp": "2025-03-18T12:05:00+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10,
"longitude": 12,
"altitude": [
{
"value": 123,
"type": "AltitudeTypeEnum_WGS"
}
]
}
}
},
"specialization": {
"$discriminator": "ContactSpecializationTypeEnum_SBW_CONTACT",
"sbw_contact": {
"classification": [
{
"type": "SBWContactTypeEnum_CORROSION",
"severity": "SBWContactSeverityEnum_LOW",
"confidence": 0.2
}
]
}
}
}
}
}
}
}Fusion Track Sensor Eo (supplementary)
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/11111111-1111-5111-8111-111111111111/world/track (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "11111111-1111-5111-8111-111111111111",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_TRACK",
"track": {
"identifier": "aaaaaaaa-0001-5001-8001-aaaaaaaaaaaa",
"description": {
"context_type": "ContextEnum_REALITY",
"standard_identity": "StandardIdentityEnum_FRIEND",
"symbol_set": "SymbolSetEnum_SEA_SURFACE",
"status": "EntityStatusEnum_PRESENT",
"headquarters_task_force_dummy": "HeadquartersTaskForceDummyEnum_NOT_APPLICABLE",
"entity": "11",
"entity_type": "01",
"entity_subtype": "00",
"sector_1": "00",
"sector_2": "00",
"name": "contact_alpha"
},
"timestamp": "2025-03-18T12:05:00+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10,
"longitude": 12,
"altitude": [
{
"value": 123,
"type": "AltitudeTypeEnum_WGS"
}
]
}
},
"accuracy": {
"xx_variance": 25,
"yy_variance": 25,
"zz_variance": 100
}
},
"track_phase": "TrackPhase_TRACKED",
"extra": {
"fusion/sensor_id": "EO-1",
"fusion/platform_id": "UXV-OWL",
"fusion/feature": "position+size",
"fusion/n": "12",
"fusion/distribution": "gaussian",
"fusion/gof_p": "0.94",
"fusion/bias_corrected": "true",
"fusion/pos_units": "meters^2 (covariance diagonal in pose.accuracy)",
"fusion/length_m": "120.0",
"fusion/length_var_m2": "9.0",
"fusion/width_m": "18.0",
"fusion/width_var_m2": "1.0",
"fusion/height_m": "11.0",
"fusion/height_var_m2": "0.5"
}
}
}
}
}
}Fusion Track Sensor Radar (supplementary)
✅ validates against catl/hibw/messages/dynamic_update/DynamicUpdate.json. Routes to 4817/exercise-alpha/v0.3.0/src/22222222-2222-5222-8222-222222222222/world/track (QoS 0).
{
"header": {
"message_type": "MessageTypeEnum_DYNAMIC_UPDATE",
"source": "22222222-2222-5222-8222-222222222222",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:02+00:00"
},
"body": {
"operation": {
"$discriminator": "DynamicUpdateOperationTypeEnum_PUT_VALUE",
"put_value": {
"$discriminator": "ValueTypeEnum_TRACK",
"track": {
"identifier": "bbbbbbbb-0002-5002-8002-bbbbbbbbbbbb",
"description": {
"context_type": "ContextEnum_REALITY",
"standard_identity": "StandardIdentityEnum_FRIEND",
"symbol_set": "SymbolSetEnum_SEA_SURFACE",
"status": "EntityStatusEnum_PRESENT",
"headquarters_task_force_dummy": "HeadquartersTaskForceDummyEnum_NOT_APPLICABLE",
"entity": "11",
"entity_type": "01",
"entity_subtype": "00",
"sector_1": "00",
"sector_2": "00",
"name": "contact_alpha"
},
"timestamp": "2025-03-18T12:05:02+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10.00008,
"longitude": 12.00011,
"altitude": [
{
"value": 121,
"type": "AltitudeTypeEnum_WGS"
}
]
}
},
"accuracy": {
"xx_variance": 100,
"yy_variance": 144,
"zz_variance": 400
}
},
"track_phase": "TrackPhase_TRACKED",
"extra": {
"fusion/sensor_id": "RADAR-2",
"fusion/platform_id": "UXV-HAWK",
"fusion/feature": "position+size",
"fusion/n": "30",
"fusion/distribution": "gaussian",
"fusion/gof_p": "0.88",
"fusion/bias_corrected": "true",
"fusion/pos_units": "meters^2 (covariance diagonal in pose.accuracy)",
"fusion/length_m": "121.0",
"fusion/length_var_m2": "16.0",
"fusion/width_m": "17.5",
"fusion/width_var_m2": "4.0",
"fusion/height_m": "10.8",
"fusion/height_var_m2": "2.0"
}
}
}
}
}
}Integrate it
The two calls every integrator needs — validate the message, then resolve its MQTT route:
# 1 · fetch a worked Dynamic Update example
curl -s https://4817.r2d2.office.ilab.zone/examples/catl_3_dynamic_update_volume.json | jq '.message' > msg.json
# 2 · validate it against the 0.3.0 schema
curl -s https://4817.r2d2.office.ilab.zone/validate -H 'content-type: application/json' \
-d "{\"message\": $(cat msg.json)}" | jq '{valid, schema_ref, errors}'
# 3 · resolve where it publishes on MQTT
curl -s "https://4817.r2d2.office.ilab.zone/route" -H 'content-type: application/json' \
-d "{\"message\": $(cat msg.json)}" | jqTry them interactively in the Integration API reference.