diff --git a/examples/mas-dt/waypoint_status.json b/examples/mas-dt/waypoints_geojson.json similarity index 63% rename from examples/mas-dt/waypoint_status.json rename to examples/mas-dt/waypoints_geojson.json index 36529145b9019888546c93cc0a84c04fefbe0210..8770e4aa743a667ab4c46fe6ba9073b85724e339 100644 --- a/examples/mas-dt/waypoint_status.json +++ b/examples/mas-dt/waypoints_geojson.json @@ -4,21 +4,20 @@ "timestamp": "2024-09-05T00:00:00Z", "version": "v2.0.0-beta.1", "source": "noc-sfmc", - "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.platform_status", + "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.waypoints", "delivery_type": "publish", "encoded": false }, "payload":{ - "message_type": "waypoint_status", + "message_type": "waypoints", "platform_ID": "unit_xxx", "platform_timestamp": "2024-09-05T00:00:00Z", "status_source": "simulated", - "autonomy_engine_plan_ID": 1, - "mission_plan_ID": 1, - "mission_track_ID": 4, - "waypoint": { - "type": "Point", - "coordinates": [-10.122, 78.2, 50.0, 20.0] - } + "waypoints": [ + { + "type": "Point", + "coordinates": [-10.122, 78.2, 50.0, 20.0] + } + ] } } diff --git a/examples/mas-dt/waypoints_props.json b/examples/mas-dt/waypoints_props.json new file mode 100644 index 0000000000000000000000000000000000000000..a542fd2e527cb7ed968a152ed92b96f974a09f38 --- /dev/null +++ b/examples/mas-dt/waypoints_props.json @@ -0,0 +1,25 @@ +{ + "header":{ + "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd", + "timestamp": "2024-09-05T00:00:00Z", + "version": "v2.0.0-beta.1", + "source": "noc-sfmc", + "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.waypoints", + "delivery_type": "publish", + "encoded": false + }, + "payload":{ + "message_type": "waypoints", + "platform_ID": "unit_xxx", + "platform_timestamp": "2024-09-05T00:00:00Z", + "status_source": "simulated", + "waypoints": [ + { + "latitude": 78.2, + "longitude": -10.122, + "depth": 50.0, + "altitude": 20.0 + } + ] + } +} diff --git a/formats/payload.py b/formats/payload.py index c1f85dcfd6022e4037ded49367c442490987afcc..ac8f87ca913a48f2212b9968c6d84f899c4ae651 100644 --- a/formats/payload.py +++ b/formats/payload.py @@ -16,7 +16,7 @@ payload_schema = { "acknowledgement": "#/components/schemas/acknowledgement", "survey": "#/components/schemas/survey", "survey_encoded": "#/components/schemas/survey_encoded", - "waypoint_status": "#/components/schemas/waypoint_status", + "waypoints": "#/components/schemas/waypoints", }, }, "oneOf": [ @@ -32,6 +32,6 @@ payload_schema = { {"$ref": "#/components/schemas/platform_status_encoded"}, {"$ref": "#/components/schemas/survey"}, {"$ref": "#/components/schemas/survey_encoded"}, - {"$ref": "#/components/schemas/waypoint_status"}, + {"$ref": "#/components/schemas/waypoints"}, ], } diff --git a/formats/platform_status.py b/formats/platform_status.py index 4a512cc95558e3f2d513c1af25e23bb6871c7bf9..3be198f30609f9d4d3f2772587cbb22fc9bc2b9b 100644 --- a/formats/platform_status.py +++ b/formats/platform_status.py @@ -28,11 +28,30 @@ sensor_schema = { platform_status_core_fields_schema = { "type": "object", "properties": { + }, +} + +platform_status_schema = { + "type": "object", + "properties": { + "message_type": { + "type": "string", + "description": "Type of message", + "example": "platform_status", + "enum": ["platform_status"], + }, "platform_ID": { "type": "string", "description": "Unique identifier for this platform", "example": "reav-x-1", }, + "status_source": { + "type": "string", + "enum": ["usbl", "onboard_platform", "simulated"], + "description": "Indicate if this status message is from the" + + " platform or USBL", + "example": "usbl", + }, "transmission_mode": { "type": "string", "enum": ["acoustics", "iridium", "wifi", "starlink"], @@ -159,26 +178,6 @@ platform_status_core_fields_schema = { }, "sensor_config": sensor_schema, }, -} - -platform_status_schema = { - "type": "object", - "properties": { - "message_type": { - "type": "string", - "description": "Type of message", - "example": "platform_status", - "enum": ["platform_status"], - }, - "status_source": { - "type": "string", - "enum": ["usbl", "onboard_platform", "simulated"], - "description": "Indicate if this status message is from the" - + " platform or USBL", - "example": "usbl", - }, - }, - "allOf": [platform_status_core_fields_schema], "oneOf": [ { "type": "object", diff --git a/formats/waypoint_status.py b/formats/waypoints.py similarity index 50% rename from formats/waypoint_status.py rename to formats/waypoints.py index 00a91b2f45289364ff142a9e278fed14b75f7025..feea7f74079946843705d0dab4c513288f32ab90 100644 --- a/formats/waypoint_status.py +++ b/formats/waypoints.py @@ -1,37 +1,20 @@ -from formats.platform_status import platform_status_core_fields_schema +""" +Temporary message definition to handle the MAS-DT dry-run mode -waypoint_status_schema = { +In dry-run the SFMC adapter will receive misson_plan messages from ORI +These messages will be parsed and compiled into a goto file which will +not be sent on to the glider + +To confirm the message flow is working the SFMC will instead publish +a waypoints message back to the backbone which C2 can receive and +process - adding simulated waypoints to C2 positions +""" + +waypoint_schema = { "type": "object", - "properties": { - "message_type": { - "type": "string", - "description": "Type of message", - "example": "waypoint_status", - "enum": ["waypoint_status"], - }, - "status_source": { - "type": "string", - "enum": ["onboard_platform", "simulated", "autonomy"], - "description": "Indicate if this status message is from the" - + " platform or USBL", - "example": "usbl", - }, - }, - "allOf": [platform_status_core_fields_schema], "oneOf": [ { - "type": "object", - "properties": { - "position": { - "$ref": "https://geojson.org/schema/Point.json", - }, - "waypoint": { - "$ref": "https://geojson.org/schema/Point.json", - }, - }, - "required": [ - "waypoint", - ], + "$ref": "https://geojson.org/schema/Point.json", }, { "type": "object", @@ -61,42 +44,52 @@ waypoint_status_schema = { "description": "Target altitude in metres", "example": 20.0, }, - "waypoint_latitude": { - "type": "number", - "format": "float", - "description": "Latitude (Y-coordinate) in decimal degrees.", - "example": 178.2, - }, - "waypoint_longitude": { - "type": "number", - "format": "float", - "description": "Longitude (X-coordinate) in decimal degrees.", - "example": -10.122, - }, - "waypoint_depth": { - "type": "number", - "format": "float", - "description": "Target depth in metres", - "example": 50.0, - "default": 0.0, - }, - "waypoint_altitude": { - "type": "number", - "format": "float", - "description": "Target altitude in metres", - "example": 20.0, - }, }, "required": [ - "waypoint_latitude", - "waypoint_longitude", + "latitude", + "longitude", ], }, ], +} + +waypoints_schema = { + "type": "object", + "properties": { + "message_type": { + "type": "string", + "description": "Type of message", + "example": "waypoints", + "enum": ["waypoints"], + }, + "platform_ID": { + "type": "string", + "description": "Unique identifier for this platform", + "example": "reav-x-1", + }, + "status_source": { + "type": "string", + "enum": ["onboard_platform", "simulated", "autonomy"], + "description": "Indicate if this status message is from the" + + " platform or USBL", + "example": "usbl", + }, + "platform_timestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for onboard platform status message", + "example": "2022-12-21T00:00:00Z", + }, + "waypoints": { + "type": "array", + "items": waypoint_schema, + } + }, "required": [ "message_type", "platform_ID", "status_source", "platform_timestamp", + "waypoints", ], } diff --git a/generate_schema_config.py b/generate_schema_config.py index df97733f673289bd7c09d9fc520eca72e719af31..2ff507a6ff03061c4c5541f66ee34a078e8d65b8 100644 --- a/generate_schema_config.py +++ b/generate_schema_config.py @@ -7,7 +7,7 @@ from formats.observation_encoded import observation_encoded_schema from formats.payload import payload_schema from formats.planning_configuration import planning_configuration_schema from formats.platform_status import platform_status_schema -from formats.waypoint_status import waypoint_status_schema +from formats.waypoints import waypoints_schema from formats.platform_status_encoded import platform_status_encoded_schema from formats.survey import survey_schema from formats.survey_encoded import survey_encoded_schema @@ -75,7 +75,7 @@ def get_swagger_config(reload=False): "alert": alert_schema, "instruction_set": instruction_set_schema, "config_file": config_file_schema, - "waypoint_status": waypoint_status_schema, + "waypoints": waypoints_schema, } }, } diff --git a/project/soar/swagger.json b/project/soar/swagger.json index c9def1282297b56d2817f02dbc2068900c708fc5..0abe717e747607afd9da6b7d6fed56e1e0a82c5b 100644 --- a/project/soar/swagger.json +++ b/project/soar/swagger.json @@ -1821,7 +1821,7 @@ "platform_status_encoded": "#/components/schemas/platform_status_encoded", "survey": "#/components/schemas/survey", "survey_encoded": "#/components/schemas/survey_encoded", - "waypoint_status": "#/components/schemas/waypoint_status" + "waypoints": "#/components/schemas/waypoints" }, "propertyName": "message_type" }, @@ -1863,7 +1863,7 @@ "$ref": "#/components/schemas/survey_encoded" }, { - "$ref": "#/components/schemas/waypoint_status" + "$ref": "#/components/schemas/waypoints" } ] }, @@ -2211,163 +2211,6 @@ "type": "object" }, "platform_status": { - "allOf": [ - { - "properties": { - "autonomy_engine_plan_ID": { - "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform", - "example": 1, - "type": "integer" - }, - "battery_output": { - "description": "Battery output in kW", - "example": 80.2, - "format": "float", - "type": "number" - }, - "battery_remaining_capacity": { - "description": "Battery remaining % provided by respective C2", - "example": 80.2, - "format": "float", - "type": "number" - }, - "endurance": { - "description": "Estimate of hours of operation remaining based on present output or performance", - "example": 7.4, - "format": "float", - "type": "number" - }, - "fuel_remaining_capacity": { - "description": "Percentage remaining capacity", - "example": 80.2, - "format": "float", - "type": "number" - }, - "fuel_volume": { - "description": "Litres of liquid fuel", - "example": 12.5, - "format": "float", - "type": "number" - }, - "heading": { - "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees", - "example": 124.3, - "format": "float", - "type": "number" - }, - "health_status": { - "description": "Health status where 0 is OK, 1 is platform has an ERROR", - "example": false, - "type": "boolean" - }, - "localisation_east_error": { - "description": "Difference in EAST between deadreckoningand USBL update.", - "example": 0.000129, - "format": "float", - "type": "number" - }, - "localisation_north_error": { - "description": "Difference in NORTH between deadreckoning and USBL update.", - "example": 0.000129, - "format": "float", - "type": "number" - }, - "mission_plan_ID": { - "description": "Mission plan ID according to platform-C2 system", - "example": 1, - "type": "integer" - }, - "mission_track_ID": { - "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)", - "example": 4, - "type": "integer" - }, - "platform_ID": { - "description": "Unique identifier for this platform", - "example": "reav-x-1", - "type": "string" - }, - "platform_state": { - "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.", - "example": "ABORT", - "type": "string" - }, - "platform_timestamp": { - "description": "Timestamp for onboard platform status message", - "example": "2022-12-21T00:00:00Z", - "format": "date-time", - "type": "string" - }, - "range_to_go": { - "description": "Estimated distance to reach next waypoint", - "example": 124.3, - "format": "float", - "type": "number" - }, - "sensor_config": { - "description": "Scanning sensor on platform available to be controlled by the Autonomy Engine", - "properties": { - "additional_data": { - "description": "Any addition fields/data to be added here", - "example": { - "payload": [ - 1.2, - 434 - ] - }, - "type": "object" - }, - "sensor_on": { - "description": "Sensor switched on (true) or off (false)", - "example": true, - "type": "boolean" - }, - "sensor_serial": { - "description": "serial number of sensor", - "example": "mbes-002a", - "type": "string" - } - }, - "type": "object" - }, - "speed_over_ground": { - "description": "Speed over ground", - "example": 124.3, - "format": "float", - "type": "number" - }, - "thrust_applied": { - "description": "Thrust applied", - "example": 124.3, - "format": "float", - "type": "number" - }, - "transmission_mode": { - "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)", - "enum": [ - "acoustics", - "iridium", - "wifi", - "starlink" - ], - "example": "wifi", - "type": "string" - }, - "usbl_fix_seconds_ago": { - "description": "USBL Fix received x second ago.", - "example": 10.0, - "format": "float", - "type": "number" - }, - "water_current_velocity": { - "description": "Water current magnitude and direction", - "example": "124.3NE", - "type": "string" - } - }, - "type": "object" - } - ], "oneOf": [ { "properties": { @@ -2463,6 +2306,64 @@ } ], "properties": { + "autonomy_engine_plan_ID": { + "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform", + "example": 1, + "type": "integer" + }, + "battery_output": { + "description": "Battery output in kW", + "example": 80.2, + "format": "float", + "type": "number" + }, + "battery_remaining_capacity": { + "description": "Battery remaining % provided by respective C2", + "example": 80.2, + "format": "float", + "type": "number" + }, + "endurance": { + "description": "Estimate of hours of operation remaining based on present output or performance", + "example": 7.4, + "format": "float", + "type": "number" + }, + "fuel_remaining_capacity": { + "description": "Percentage remaining capacity", + "example": 80.2, + "format": "float", + "type": "number" + }, + "fuel_volume": { + "description": "Litres of liquid fuel", + "example": 12.5, + "format": "float", + "type": "number" + }, + "heading": { + "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees", + "example": 124.3, + "format": "float", + "type": "number" + }, + "health_status": { + "description": "Health status where 0 is OK, 1 is platform has an ERROR", + "example": false, + "type": "boolean" + }, + "localisation_east_error": { + "description": "Difference in EAST between deadreckoningand USBL update.", + "example": 0.000129, + "format": "float", + "type": "number" + }, + "localisation_north_error": { + "description": "Difference in NORTH between deadreckoning and USBL update.", + "example": 0.000129, + "format": "float", + "type": "number" + }, "message_type": { "description": "Type of message", "enum": [ @@ -2471,6 +2372,70 @@ "example": "platform_status", "type": "string" }, + "mission_plan_ID": { + "description": "Mission plan ID according to platform-C2 system", + "example": 1, + "type": "integer" + }, + "mission_track_ID": { + "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)", + "example": 4, + "type": "integer" + }, + "platform_ID": { + "description": "Unique identifier for this platform", + "example": "reav-x-1", + "type": "string" + }, + "platform_state": { + "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.", + "example": "ABORT", + "type": "string" + }, + "platform_timestamp": { + "description": "Timestamp for onboard platform status message", + "example": "2022-12-21T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "range_to_go": { + "description": "Estimated distance to reach next waypoint", + "example": 124.3, + "format": "float", + "type": "number" + }, + "sensor_config": { + "description": "Scanning sensor on platform available to be controlled by the Autonomy Engine", + "properties": { + "additional_data": { + "description": "Any addition fields/data to be added here", + "example": { + "payload": [ + 1.2, + 434 + ] + }, + "type": "object" + }, + "sensor_on": { + "description": "Sensor switched on (true) or off (false)", + "example": true, + "type": "boolean" + }, + "sensor_serial": { + "description": "serial number of sensor", + "example": "mbes-002a", + "type": "string" + } + }, + "type": "object" + }, + "speed_over_ground": { + "description": "Speed over ground", + "example": 124.3, + "format": "float", + "type": "number" + }, "status_source": { "description": "Indicate if this status message is from the platform or USBL", "enum": [ @@ -2480,6 +2445,34 @@ ], "example": "usbl", "type": "string" + }, + "thrust_applied": { + "description": "Thrust applied", + "example": 124.3, + "format": "float", + "type": "number" + }, + "transmission_mode": { + "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)", + "enum": [ + "acoustics", + "iridium", + "wifi", + "starlink" + ], + "example": "wifi", + "type": "string" + }, + "usbl_fix_seconds_ago": { + "description": "USBL Fix received x second ago.", + "example": 10.0, + "format": "float", + "type": "number" + }, + "water_current_velocity": { + "description": "Water current magnitude and direction", + "example": "124.3NE", + "type": "string" } }, "required": [ @@ -2660,246 +2653,25 @@ ], "type": "object" }, - "waypoint_status": { - "allOf": [ - { - "properties": { - "autonomy_engine_plan_ID": { - "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform", - "example": 1, - "type": "integer" - }, - "battery_output": { - "description": "Battery output in kW", - "example": 80.2, - "format": "float", - "type": "number" - }, - "battery_remaining_capacity": { - "description": "Battery remaining % provided by respective C2", - "example": 80.2, - "format": "float", - "type": "number" - }, - "endurance": { - "description": "Estimate of hours of operation remaining based on present output or performance", - "example": 7.4, - "format": "float", - "type": "number" - }, - "fuel_remaining_capacity": { - "description": "Percentage remaining capacity", - "example": 80.2, - "format": "float", - "type": "number" - }, - "fuel_volume": { - "description": "Litres of liquid fuel", - "example": 12.5, - "format": "float", - "type": "number" - }, - "heading": { - "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees", - "example": 124.3, - "format": "float", - "type": "number" - }, - "health_status": { - "description": "Health status where 0 is OK, 1 is platform has an ERROR", - "example": false, - "type": "boolean" - }, - "localisation_east_error": { - "description": "Difference in EAST between deadreckoningand USBL update.", - "example": 0.000129, - "format": "float", - "type": "number" - }, - "localisation_north_error": { - "description": "Difference in NORTH between deadreckoning and USBL update.", - "example": 0.000129, - "format": "float", - "type": "number" - }, - "mission_plan_ID": { - "description": "Mission plan ID according to platform-C2 system", - "example": 1, - "type": "integer" - }, - "mission_track_ID": { - "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)", - "example": 4, - "type": "integer" - }, - "platform_ID": { - "description": "Unique identifier for this platform", - "example": "reav-x-1", - "type": "string" - }, - "platform_state": { - "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.", - "example": "ABORT", - "type": "string" - }, - "platform_timestamp": { - "description": "Timestamp for onboard platform status message", - "example": "2022-12-21T00:00:00Z", - "format": "date-time", - "type": "string" - }, - "range_to_go": { - "description": "Estimated distance to reach next waypoint", - "example": 124.3, - "format": "float", - "type": "number" - }, - "sensor_config": { - "description": "Scanning sensor on platform available to be controlled by the Autonomy Engine", - "properties": { - "additional_data": { - "description": "Any addition fields/data to be added here", - "example": { - "payload": [ - 1.2, - 434 - ] - }, - "type": "object" - }, - "sensor_on": { - "description": "Sensor switched on (true) or off (false)", - "example": true, - "type": "boolean" - }, - "sensor_serial": { - "description": "serial number of sensor", - "example": "mbes-002a", - "type": "string" - } - }, - "type": "object" - }, - "speed_over_ground": { - "description": "Speed over ground", - "example": 124.3, - "format": "float", - "type": "number" - }, - "thrust_applied": { - "description": "Thrust applied", - "example": 124.3, - "format": "float", - "type": "number" - }, - "transmission_mode": { - "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)", - "enum": [ - "acoustics", - "iridium", - "wifi", - "starlink" - ], - "example": "wifi", - "type": "string" - }, - "usbl_fix_seconds_ago": { - "description": "USBL Fix received x second ago.", - "example": 10.0, - "format": "float", - "type": "number" - }, - "water_current_velocity": { - "description": "Water current magnitude and direction", - "example": "124.3NE", - "type": "string" - } - }, - "type": "object" - } - ], - "oneOf": [ - { - "properties": { - "position": { - "$ref": "#/components/schemas/geojson.org.schema.Point.json" - }, - "waypoint": { - "$ref": "#/components/schemas/geojson.org.schema.Point.json" - } - }, - "required": [ - "waypoint" - ], - "type": "object" - }, - { - "properties": { - "altitude": { - "description": "Target altitude in metres", - "example": 20.0, - "format": "float", - "type": "number" - }, - "depth": { - "default": 0.0, - "description": "Target depth in metres", - "example": 50.0, - "format": "float", - "type": "number" - }, - "latitude": { - "description": "Latitude (Y-coordinate) in decimal degrees.", - "example": 178.2, - "format": "float", - "type": "number" - }, - "longitude": { - "description": "Longitude (X-coordinate) in decimal degrees.", - "example": -10.122, - "format": "float", - "type": "number" - }, - "waypoint_altitude": { - "description": "Target altitude in metres", - "example": 20.0, - "format": "float", - "type": "number" - }, - "waypoint_depth": { - "default": 0.0, - "description": "Target depth in metres", - "example": 50.0, - "format": "float", - "type": "number" - }, - "waypoint_latitude": { - "description": "Latitude (Y-coordinate) in decimal degrees.", - "example": 178.2, - "format": "float", - "type": "number" - }, - "waypoint_longitude": { - "description": "Longitude (X-coordinate) in decimal degrees.", - "example": -10.122, - "format": "float", - "type": "number" - } - }, - "required": [ - "waypoint_latitude", - "waypoint_longitude" - ], - "type": "object" - } - ], + "waypoints": { "properties": { "message_type": { "description": "Type of message", "enum": [ - "waypoint_status" + "waypoints" ], - "example": "waypoint_status", + "example": "waypoints", + "type": "string" + }, + "platform_ID": { + "description": "Unique identifier for this platform", + "example": "reav-x-1", + "type": "string" + }, + "platform_timestamp": { + "description": "Timestamp for onboard platform status message", + "example": "2022-12-21T00:00:00Z", + "format": "date-time", "type": "string" }, "status_source": { @@ -2911,13 +2683,59 @@ ], "example": "usbl", "type": "string" + }, + "waypoints": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/geojson.org.schema.Point.json" + }, + { + "properties": { + "altitude": { + "description": "Target altitude in metres", + "example": 20.0, + "format": "float", + "type": "number" + }, + "depth": { + "default": 0.0, + "description": "Target depth in metres", + "example": 50.0, + "format": "float", + "type": "number" + }, + "latitude": { + "description": "Latitude (Y-coordinate) in decimal degrees.", + "example": 178.2, + "format": "float", + "type": "number" + }, + "longitude": { + "description": "Longitude (X-coordinate) in decimal degrees.", + "example": -10.122, + "format": "float", + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + } + ], + "type": "object" + }, + "type": "array" } }, "required": [ "message_type", "platform_ID", "status_source", - "platform_timestamp" + "platform_timestamp", + "waypoints" ], "type": "object" }