Task Admin
A controller assigns, modifies, or stops a task.
MessageTypeEnum_TASK_ADMIN
A controller assigns, modifies, or stops a task.
| Direction | controller → node (addressed command) |
| Cadence | On demand, whenever tasking changes. |
| Delivery | Addressed — command plane (QoS 2, exactly-once) |
| Schema | catl/hibw/messages/task/TaskAdmin.json |
| Worked examples | 7 |
Purpose
The command verb of the protocol. Carries an action (PUSH to assign/replace, PAUSE, CANCEL, CLEAR) and, for a push, a typed task description — SURVEY, IDENTIFY, REPOSITION, NAVIGATE, CLEAR and more — plus task-level constraints and coordination. This is the most varied message: most of the 20 worked examples are task-admin variants.
When to send it
PUSH— to assign a new task or replace the current one.PAUSE/CANCEL— to suspend or abort an in-flight task.CLEAR— to wipe assigned tasking from the node.
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 — TaskAdminBody
Inherits from base::tasks::TaskDescriptionAndDetails.
| Field | Type | Multiplicity | Description |
|---|---|---|---|
source_of_information (inherited) | GUID | [0..1] | Holds source of information. Its a identifier of a node that provided that information. It can be a node that created a region, task. It can be a node that detected contact or is maintaining track. For self reports it should be same as identifier. |
external_identifiers (inherited) | ExternalSystemIdentifier [] | [0..*] | Holds identifiers of this entity in other systems. |
identifier (inherited) | GUID | [1..1] | Unique identifier for this entity. |
authority (inherited) | Authority | [0..1] | |
node (inherited) | GUID | [1..1] | Node this task is assigned to. We should always have a node that owns task - assign yourselves initially. |
conditions (inherited) | TaskCondition [] | [0..*] | |
details (inherited) | TaskDetails | [0..1] | |
constraints (inherited) | TaskConstraint [] | [0..*] | |
description (inherited) | TaskDescription | [0..1] | |
template_conditions (inherited) | TaskCondition | [0..1] | If template condition is set (one or more) this is a template task. It should not be executed, but when new conditions are met new task should be crate base on it. |
parent (inherited) | GUID | [0..1] | If this is a sub task, this is identifier of parent. Called parent to be in line with parent/members node relation. |
members (inherited) | GUID [] | [0..*] | If that task is split into sub task, list of sub tasks identifiers. Called members to be in line with parent/members node relation. |
| Field | Type | Multiplicity | Description |
|---|---|---|---|
binding | BindingInformationType | [0..1] | |
action | TaskAdminActionEnum | [1..1] | An enumeration. default: TaskAdminActionEnum_PUSH |
Full TaskAdminBody reference →
Key fields
action—TaskAdminActionEnum— PUSH | PAUSE | CANCEL | CLEAR. Required.identifier— The task id this action targets — reused later in TASK_FEEDBACK and TASK_RESULT.node— The destination node the task is for.description— Discriminated task union ($discriminator: TaskTypeEnum_*) — only present for PUSH; selects SURVEY / IDENTIFY / REPOSITION / NAVIGATE / CLEAR / …constraints— Task-scoped constraints (TOGGLE / RANGE / EQUIPMENT / emission control) the node must honour while executing.
Worked examples
Task Admin
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "f3a6eb99-8ed5-518f-a683-e2c436bb87e0",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"action": "TaskAdminActionEnum_PAUSE"
}
}Task Admin Reposition
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "dc5f8fa8-ed15-5128-83d0-2e04f8fbbad5",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"description": {
"$discriminator": "TaskTypeEnum_REPOSITION",
"reposition": {
"location": {
"identifier": "08a18229-180c-52bc-8e27-d6b8041ec09f",
"timestamp": "2025-03-18T12:05:00+00:00",
"location": {
"$discriminator": "GeometryTypeEnum_POINT",
"point": {
"latitude": 10,
"longitude": 10
}
}
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Task Admin Navigate
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "5facf4c1-7825-5901-9ba1-2ce4107632c4",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"description": {
"$discriminator": "TaskTypeEnum_NAVIGATE",
"navigate": {
"route": {
"identifier": "fb3c87a4-4a3e-51d6-bd5e-db7b7fc0b439",
"timestamp": "2025-03-18T12:05:00+00:00",
"waypoints": [
{
"identifier": "b00dd35b-bb9a-5801-9bdd-005203decc74",
"timestamp": "2025-03-18T12:05:00+00:00",
"point": {
"latitude": 10,
"longitude": 10
},
"velocity": 5
},
{
"identifier": "b00dd35b-bb9a-5801-9bdd-005203decc74",
"timestamp": "2025-03-18T12:05:00+00:00",
"point": {
"latitude": 11,
"longitude": 11
},
"velocity": 5
},
{
"identifier": "b00dd35b-bb9a-5801-9bdd-005203decc74",
"timestamp": "2025-03-18T12:05:00+00:00",
"point": {
"latitude": 12,
"longitude": 12
},
"velocity": 5
}
]
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Task Admin Survey Rea
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "6f6edcd8-94b6-5673-b5cc-a3c92f36cf8d",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"description": {
"$discriminator": "TaskTypeEnum_SURVEY",
"survey": {
"volume": {
"identifier": "b394b127-e3b7-5a2e-8a0b-99ea06ec9f9f",
"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
}
]
}
}
}
},
"specialization": {
"$discriminator": "SurveySpecializationTypeEnum_SURVEY_REA",
"survey_rea": {
"products": [
"REAProductTypeEnum_BATHYMETRIC"
]
}
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Task Admin Identify Sbw
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "bc8cdf31-e2a9-5209-98c6-19c787c63f1e",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"description": {
"$discriminator": "TaskTypeEnum_IDENTIFY",
"identify": {
"targets": [
{
"$discriminator": "TargetTypeEnum_CONTACT",
"contact": {
"identifier": "95512a14-a2f3-53de-b2ee-816cf6a49e88",
"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
}
]
}
}
}
}
],
"specialization": {
"$discriminator": "IdentifySpecializationTypeEnum_IDENTIFY_SBW",
"identify_sbw": {
"altitude": 12,
"starting_pose": {
"identifier": "0f05b741-de81-58e6-81e3-23f074fcddeb",
"timestamp": "2025-03-18T12:05:00+00:00",
"pose": {
"position": {
"$discriminator": "PositionTypeEnum_LATITUDE_LONGITUDE_ALTITUDE",
"latitude_longitude_altitude": {
"latitude": 10.1,
"longitude": 12.1,
"altitude": []
}
}
}
},
"radius": 2
}
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Task Admin Clear
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "dc0ae8a2-3c14-5f4c-9aa0-2d3907d8a346",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"description": {
"$discriminator": "TaskTypeEnum_CLEAR",
"clear": {
"volume": {
"identifier": "3f8e5aca-9aa6-536a-a03f-5e414b84656b",
"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
}
]
}
}
}
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Task Admin Complex
✅ validates against catl/hibw/messages/task/TaskAdmin.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/admin (QoS 2).
{
"header": {
"message_type": "MessageTypeEnum_TASK_ADMIN",
"source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"version": "0.3.0",
"time_sent": "2025-03-18T12:05:00+00:00"
},
"body": {
"identifier": "1c23f10b-735d-5690-9430-0c7d419424ee",
"node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
"constraints": [
{
"constraint": {
"$discriminator": "GeneralConstraintTypeEnum_TOGGLE",
"toggle": {
"value": false
}
},
"identifier": "18337d93-f73c-551b-bf0f-de8f85361fc4",
"strength": "ConstraintStrengthEnum_ADVISORY"
},
{
"constraint": {
"$discriminator": "GeneralConstraintTypeEnum_RANGE",
"range": {
"value": 15.2
}
},
"identifier": "c2e99209-de07-4292-b276-6406168e4f5c",
"strength": "ConstraintStrengthEnum_REQUIRED"
},
{
"constraint": {
"$discriminator": "GeneralConstraintTypeEnum_ENUMERATION",
"enumeration": {
"value": {
"name": "ON"
}
}
},
"identifier": "0c51c5e2-9f00-4466-b4e0-6081eeae6461",
"strength": "ConstraintStrengthEnum_OPTIONAL"
},
{
"constraint": {
"$discriminator": "GeneralConstraintTypeEnum_EQUIPMENT",
"equipment": {
"emission_control": "ConstraintTypeEmissionControlEnum_ROUTINE"
}
},
"identifier": "bb5717d7-5ce1-4f22-ae68-1645ac5f1187",
"strength": "ConstraintStrengthEnum_ADVISORY"
}
],
"description": {
"$discriminator": "TaskTypeEnum_CLEAR",
"clear": {
"volume": {
"identifier": "4cc311c9-b0c1-5651-b0a1-8d78b99bdf96",
"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
}
]
}
}
}
}
}
},
"action": "TaskAdminActionEnum_PUSH"
}
}Integrate it
The two calls every integrator needs — validate the message, then resolve its MQTT route (this type is addressed, so pass a dest_id):
# 1 · fetch a worked Task Admin example
curl -s https://4817.r2d2.office.ilab.zone/examples/catl_5_task_admin.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?dest_id=node-bravo" -H 'content-type: application/json' \
-d "{\"message\": $(cat msg.json)}" | jqTry them interactively in the Integration API reference.