STANAG 4817 / AEP-105 · 0.3.0-rc4 (SD-3 RC4)
Messages

Dynamic Update

Read or write a value in the shared world model.

Broadcast MessageTypeEnum_DYNAMIC_UPDATE

Read or write a value in the shared world model.

Directionany → world model (broadcast)
CadenceWhenever the world model changes — often high-volume.
DeliveryBroadcast — telemetry plane (QoS 0)
Schemacatl/hibw/messages/dynamic_update/DynamicUpdate.json
Worked examples7

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

Loading diagram…

Message header

Every CATL message carries this envelope header.

FieldTypeMultiplicityDescription
message_typeMessageTypeEnum[1..1]An enumeration.
sourceGUID[1..1]Source that send this message. Often same as source of information, but different when relaying.
versionstring[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_sentTime[1..1]

Body — DynamicUpdateBody

FieldTypeMultiplicityDescription
operationDynamicUpdateOperation[1..1]

Full DynamicUpdateBody reference →

Key fields

  • operation — Discriminated by DynamicUpdateOperationTypeEnum_* — PUT_VALUE / DELETE_REFERENCE / QUERY / GET_REFERENCE. Required.
  • put_value — For PUT_VALUE: discriminated by ValueTypeEnum_* (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).

catl_3_dynamic_update_volume.json
{
  "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).

catl_8_dynamic_update_track.json
{
  "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).

catl_9_dynamic_update_data_product.json
{
  "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).

catl_12_dynamic_update_contact_mcm.json
{
  "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).

catl_13_dynamic_update_contact_sbw.json
{
  "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).

catl_fusion_track_sensor_eo.json
{
  "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).

catl_fusion_track_sensor_radar.json
{
  "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)}" | jq

Try them interactively in the Integration API reference.

On this page