JaiaBot  1.12.0+7+gdc1e5561
JaiaBot micro-AUV software
REST API

The Jaia REST API provides a way to query and command a JaiaBot fleet via web URL endpoints. These endpoints are directly generated from the APIRequest Protobuf message for input and APIResponse for output (jaiabot/src/lib/messages/rest_api.proto).

It accepts GET requests for the subset of requests that only have singular (non-repeated) non-recursive (no submessages) data. This is generally suitable for simple requests (e.g. STOP all bots, query status, etc) but not for more complicated MISSION_PLAN type commands.

It also accepts POST for all requests, using JSON (which is required for the more complicated messages).

There are 2 variants of the API:

  • "simple" variant (e.g., https://fleet0.jaia.tech/jaia/v1/status/all) where the action and the target(s) are specified in the url and any data may be passed via GET arguments (subject to limitations mentioned above). This allows for easy testing as the entire request is contained within the URL. (The "simple" version can be used for POST requests as well. Here the POST data (if any) contains the "action" submessage contents. This option is not documented in detail below, but will follow a similar pattern to the "full" variant).
  • "full" variant (e.g., https://fleet0.jaia.tech/jaia/v1) where the entire request is POSTed as a JSON formatted APIRequest Protobuf message.

Simple variant (GET) formatting

The URL expected for the simple variant of the API is:

https://fleet<N>.jaia.tech/jaia/v1/<action>/<target>?api_key=<API_KEY_STRING>&var1=val1&var2=val2

Where:

  • fleet<N> is the fleet to command
  • <action> is one of the specified actions (below)
  • <target> is the target bots and or hubs in the following format:
    • 'all' for all known bots and the hub (if relevant)
    • comma separated list of 'bN' and/or 'hN' where N is the bot/hub ID, e.g., 'b1,b2,b3' would target bots 1-3, or 'h1,b3' would target hub 1 and bot 3
  • api_key is the private shared key to use the API
  • var1 and var2 are variables affecting the action (see action documentation below)
  • val1 and val2 are the values for var1 and var2, respectively.

Full variant (POST) formatting

The URL expected for the full variant of the API is:

https://fleet<N>.jaia.tech/jaia/v1

All data are expected to be sent as a POST request using the JSON formatted version of the APIRequest message as the POST variable 'json'. For example, to request status from all the bots you would POST the following to the above URL, for example using Python to command Fleet0:

#!/usr/bin/env python3
import requests
jaia_request={"target": {"all": True}, "status": True, "api_key": "4vS6s2jnulxVjrKSB-__tQ"}
res = requests.post(f'https://fleet0.jaia.tech/jaia/v1', json=jaia_request)

Key for placeholders:

  • <API_KEY_STRING>: API Key string field
  • <STRING>: String field
  • False: Boolean field
  • 1.2345: Floating point field
  • 2147483647: Int32 field
  • 4294967295: UInt32 field
  • 9223372036854775807: Int64 field
  • 18446744073709551615: UInt64 field

See the action documentation below for more details.

Request Action: status

Query the status of bots/hubs. Expect a response of type 'status'.

Simple API Syntax (GET)

https://fleet<N>.jaia.tech/jaia/v1/status/<target>?api_key=<API_KEY_STRING>

Full API Syntax (POST)

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"status": true
}

Full API Example

Request JSON:

{
"api_key": "4vS6s2jnulxVjrKSB-__tQ",
"status": true,
"target": {
"all": true
}
}

Response JSON:

{
"request": {
"status": true,
"target": {
"all": true
}
},
"status": {
"bots": [
{
"attitude": {
"course_over_ground": 180.0,
"heading": 166.0,
"pitch": 85.0,
"roll": -57.0
},
"battery_percent": 95.0,
"bot_id": 1,
"bot_type": "HYDRO",
"calibration_status": 3,
"depth": 0.0,
"hdop": 0.25,
"health_state": "HEALTH__OK",
"location": {
"lat": 41.657645,
"lon": -71.27212
},
"mission_state": "PRE_DEPLOYMENT__IDLE",
"pdop": 2.07,
"received_time": "1722893284636801",
"salinity": 20.0,
"speed": {
"over_ground": 0.0
},
"temperature": 15.06,
"time": "1722878885000000",
"vcc_voltage": 24.0,
"wifi_link_quality_percentage": 100
},
{
"attitude": {
"course_over_ground": 180.0,
"heading": 166.0,
"pitch": 85.0,
"roll": -57.0
},
"battery_percent": 95.0,
"bot_id": 2,
"bot_type": "HYDRO",
"calibration_status": 3,
"depth": 0.0,
"hdop": 1.03,
"health_state": "HEALTH__OK",
"location": {
"lat": 41.65765,
"lon": -71.27212
},
"mission_state": "PRE_DEPLOYMENT__IDLE",
"pdop": 1.47,
"received_time": "1722893284635458",
"salinity": 20.0,
"speed": {
"over_ground": 0.0
},
"temperature": 15.04,
"time": "1722878885000000",
"vcc_voltage": 24.0,
"wifi_link_quality_percentage": 100
}
],
"hubs": [
{
"bot_ids_in_radio_file": [
1,
2
],
"fleet_id": 0,
"health_state": "HEALTH__OK",
"hub_id": 1,
"linux_hardware_status": {
"wifi": {
"is_connected": true,
"link_quality": 70,
"link_quality_percentage": 100,
"noise_level": 0,
"signal_level": 33
}
},
"location": {
"lat": 41.66268,
"lon": -71.273018
},
"received_time": "1722893284552504",
"time": "8614394422756020"
}
]
},
"target": {
"bots": [
1,
2
],
"hubs": [
1
]
}
}

Request Action: metadata

Query the metadata of the hub. Expect a response of type 'metadata'.

Simple API Syntax (GET)

https://fleet<N>.jaia.tech/jaia/v1/metadata/<target>?api_key=<API_KEY_STRING>

Full API Syntax (POST)

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"metadata": true
}

Full API Example

Request JSON:

{
"target": {
"all": true
},
"metadata": true,
"api_key": "4vS6s2jnulxVjrKSB-__tQ"
}

Response JSON:

{
"metadata": {
"goby_version": "3.1.5a",
"intervehicle_api_version": 7,
"is_simulation": true,
"ivp_version": "19.8.1+svn9395-10~ubuntu22.04.1",
"jaiabot_image_build_date": "Wed 20 Dec 2023 02:28:56 AM UTC",
"jaiabot_image_first_boot_date": "Wed Dec 20 15:53:29 UTC 2023",
"jaiabot_image_version": "1.0.0~alpha1+130+gea8f449",
"jaiabot_version": {
"git_branch": "task/update-web-api-doc/jaia-1550",
"git_hash": "f8a56c0cf9501b9022cc16d99eb25d81a46c90cf-dirty",
"major": "1",
"minor": "11",
"patch": "0+0+gf8a56c0c-dirty"
},
"moos_version": "10.4.0",
"name": "aubergine",
"raspi_firmware_version": "1.20220331",
"xbee_node_id": "Not Available",
"xbee_serial_number": "Not Available"
},
"request": {
"api_key": "4vS6s2jnulxVjrKSB-__tQ",
"metadata": true,
"target": {
"all": true
}
},
"target": {
"hubs": [
1
]
}
}

Request Action: task_packets

Query task packets from a given range of time. Expect a response of type 'task_packets'.

Simple API Syntax (GET)

https://fleet<N>.jaia.tech/jaia/v1/task_packets/<target>?api_key=<API_KEY_STRING>&start_time=<UINT64>&end_time=<UINT64>

Full API Syntax (POST)

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"task_packets": {
"start_time": "18446744073709551615",
"end_time": "18446744073709551615"
}
}

Full API Example

Request JSON:

{
"target": {
"bots": [
1
]
},
"task_packets": {
"start_time": 1722797666581176.0,
"end_time": 1722970466581176.0
},
"api_key": "4vS6s2jnulxVjrKSB-__tQ"
}

Response JSON:

{
"request": {
"api_key": "4vS6s2jnulxVjrKSB-__tQ",
"target": {
"bots": [
1
]
},
"task_packets": {
"end_time": "1722970466581176",
"start_time": "1722797666581176"
}
},
"task_packets": {
"packets": [
{
"bot_id": 1,
"drift": {
"drift_duration": 10,
"end_location": {
"lat": 41.658228,
"lon": -71.275736
},
"estimated_drift": {
"heading": 237.0,
"speed": 0.9
},
"significant_wave_height": 0.0,
"start_location": {
"lat": 41.658275,
"lon": -71.275645
}
},
"end_time": "1722895675000000",
"start_time": "1722895664000000",
"type": "SURFACE_DRIFT"
},
{
"bot_id": 1,
"drift": {
"drift_duration": 10,
"end_location": {
"lat": 41.65826,
"lon": -71.2757
},
"estimated_drift": {
"heading": 316.0,
"speed": 0.6
},
"significant_wave_height": 0.0,
"start_location": {
"lat": 41.658225,
"lon": -71.275651
}
},
"end_time": "1722896712000000",
"start_time": "1722896702000000",
"type": "SURFACE_DRIFT"
},
{
"bot_id": 1,
"drift": {
"drift_duration": 10,
"end_location": {
"lat": 41.659469,
"lon": -71.272064
},
"estimated_drift": {
"heading": 72.0,
"speed": 0.7
},
"significant_wave_height": 0.0,
"start_location": {
"lat": 41.659448,
"lon": -71.272146
}
},
"end_time": "1722896904000000",
"start_time": "1722896893000000",
"type": "SURFACE_DRIFT"
}
]
}
}

Request Action: command

Send a command to one or more bots. Expect a response of type 'command_result'.

Simple API Syntax (GET)

https://fleet<N>.jaia.tech/jaia/v1/command/<target>?api_key=<API_KEY_STRING>&type=<ENUM CommandType>

Enumerations:

  • <ENUM CommandType>: MISSION_PLAN, ACTIVATE, START_MISSION, NEXT_TASK, RETURN_TO_HOME, STOP, PAUSE, RESUME, RECOVERED, SHUTDOWN

Full API Syntax (POST)

Enumerations:

  • <ENUM CommandType>: MISSION_PLAN, ACTIVATE, START_MISSION, NEXT_TASK, RETURN_TO_HOME, STOP, PAUSE, RESUME, RECOVERED, SHUTDOWN

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"command": {
"type": "<ENUM CommandType>"
}
}

Variant: command_data = plan

Used with "command": { "type" : "MISSION_PLAN" }

Enumerations:

  • <ENUM CommandType>: MISSION_PLAN, ACTIVATE, START_MISSION, NEXT_TASK, RETURN_TO_HOME, STOP, PAUSE, RESUME, RECOVERED, SHUTDOWN
  • <ENUM MissionStart>: START_IMMEDIATELY, START_ON_COMMAND
  • <ENUM MovementType>: TRANSIT, REMOTE_CONTROL, TRAIL
  • <ENUM TaskType>: NONE, DIVE, STATION_KEEP, SURFACE_DRIFT, CONSTANT_HEADING

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"command": {
"type": "<ENUM CommandType>",
"plan": {
"start": "<ENUM MissionStart>",
"movement": "<ENUM MovementType>",
"goal": [
{
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"task": {
"type": "<ENUM TaskType>",
"dive": {
"max_depth": 1.2345,
"depth_interval": 1.2345,
"hold_time": 1.2345,
"bottom_dive": true
},
"surface_drift": {
"drift_time": 2147483647
},
"constant_heading": {
"constant_heading": 1.2345,
"constant_heading_time": 2147483647,
"constant_heading_speed": 1.2345
},
"start_echo": true,
"station_keep": {
"station_keep_time": 2147483647
}
}
},
{
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"task": {
"type": "<ENUM TaskType>",
"dive": {
"max_depth": 1.2345,
"depth_interval": 1.2345,
"hold_time": 1.2345,
"bottom_dive": true
},
"surface_drift": {
"drift_time": 2147483647
},
"constant_heading": {
"constant_heading": 1.2345,
"constant_heading_time": 2147483647,
"constant_heading_speed": 1.2345
},
"start_echo": true,
"station_keep": {
"station_keep_time": 2147483647
}
}
}
],
"recovery": {
"recover_at_final_goal": true,
"location": {
"lat": 1.2345,
"lon": 1.2345
}
},
"repeats": 4294967295
}
}
}

Variant: command_data = rc

Used with "command": { "type" : "REMOTE_CONTROL_SETPOINT" }

Enumerations:

  • <ENUM CommandType>: MISSION_PLAN, ACTIVATE, START_MISSION, NEXT_TASK, RETURN_TO_HOME, STOP, PAUSE, RESUME, RECOVERED, SHUTDOWN

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"command": {
"type": "<ENUM CommandType>",
"rc": {
"duration": 2147483647,
"heading": 1.2345,
"speed": 1.2345
}
}
}

Full API Example

Request JSON:

{
"target": {
"all": true
},
"command": {
"type": "STOP"
},
"api_key": "4vS6s2jnulxVjrKSB-__tQ"
}

Response JSON:

{
"command_result": {
"command_sent": true
},
"request": {
"api_key": "4vS6s2jnulxVjrKSB-__tQ",
"command": {
"bot_id": 1,
"time": "1722895468966813",
"type": "STOP"
},
"target": {
"all": true
}
},
"target": {
"bots": [
2,
1
]
}
}

Request Action: command_for_hub

Send a command to the hub. Expect a response of type 'command_result'.

Simple API Syntax (GET)

https://fleet<N>.jaia.tech/jaia/v1/command_for_hub/<target>?api_key=<API_KEY_STRING>&type=<ENUM HubCommandType>

Enumerations:

  • <ENUM HubCommandType>: SET_HUB_LOCATION

Full API Syntax (POST)

Enumerations:

  • <ENUM HubCommandType>: SET_HUB_LOCATION

Request JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
],
"all": false
},
"api_key": "<API_KEY_STRING>",
"command_for_hub": {
"type": "<ENUM HubCommandType>",
"hub_location": {
"lat": 1.2345,
"lon": 1.2345
}
}
}

Full API Example

Request JSON:

{
"target": {
"all": true
},
"command_for_hub": {
"type": "SET_HUB_LOCATION",
"hub_location": {
"lat": 41.7,
"lon": -70.3
}
},
"api_key": "4vS6s2jnulxVjrKSB-__tQ"
}

Response JSON:

{
"command_result": {
"command_sent": true
},
"request": {
"api_key": "4vS6s2jnulxVjrKSB-__tQ",
"command_for_hub": {
"hub_id": 1,
"hub_location": {
"lat": 41.7,
"lon": -70.3
},
"time": "1722895686821358",
"type": "SET_HUB_LOCATION"
},
"target": {
"all": true
}
},
"target": {
"hubs": [
1
]
}
}

Response Action: error

Error with API Request. This can be sent in response to any failed Request action.

Response Syntax

Enumerations:

  • <ENUM APIErrorCode>: API_ERROR__UNSUPPORTED_API_VERSION, API_ERROR__INVALID_ACTION, API_ERROR__TARGETS_STRING_MALFORMATTED, API_ERROR__ACTION_REQUIRES_JSON_POST_DATA, API_ERROR__INVALID_TARGET, API_ERROR__COULD_NOT_PARSE_API_REQUEST_JSON, API_ERROR__REQUEST_NOT_INITIALIZED, API_ERROR__NO_ACTION_SPECIFIED, API_ERROR__INVALID_TYPE

Response JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
]
},
"error": {
"code": "<ENUM APIErrorCode>",
"details": "<STRING>"
},
"request": {
"copy of original request": "..."
}
}

Response Action: status

Bot/Hub status. This is sent in response to a successful Request 'status' action.

Response Syntax

Enumerations:

  • <ENUM HealthState>: HEALTH__OK, HEALTH__DEGRADED, HEALTH__FAILED
  • <ENUM Error>: ERROR__TOO_MANY_ERRORS_TO_REPORT_ALL, ERROR__FAILED__UNKNOWN, ERROR__FAILED__GOBYD, ERROR__FAILED__GOBY_LIAISON, ERROR__FAILED__GOBY_GPS, ERROR__FAILED__GOBY_LOGGER, ERROR__FAILED__GOBY_CORONER, ERROR__FAILED__GOBY_MOOS_GATEWAY, ERROR__FAILED__JAIABOT_HEALTH, ERROR__FAILED__JAIABOT_METADATA, ERROR__FAILED__JAIABOT_HUB_MANAGER, ERROR__FAILED__JAIABOT_WEB_PORTAL, ERROR__FAILED__JAIABOT_FUSION, ERROR__FAILED__JAIABOT_MISSION_MANAGER, ERROR__FAILED__JAIABOT_PID_CONTROL, ERROR__FAILED__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER, ERROR__FAILED__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER, ERROR__FAILED__JAIABOT_ADAFRUIT_BNO055_DRIVER, ERROR__FAILED__JAIABOT_DRIVER_ARDUINO, ERROR__FAILED__JAIABOT_ENGINEERING, ERROR__FAILED__MOOS_MOOSDB, ERROR__FAILED__MOOS_PHELMIVP, ERROR__FAILED__MOOS_UPROCESSWATCH, ERROR__FAILED__MOOS_PNODEREPORTER, ERROR__FAILED__PYTHON_JAIABOT_WEB_APP, ERROR__FAILED__PYTHON_JAIABOT_IMU, ERROR__FAILED__PYTHON_JAIABOT_PRESSURE_SENSOR, ERROR__FAILED__PYTHON_JAIABOT_AS_EZO_EC, ERROR__FAILED__JAIABOT_LOG_CONVERTER, ERROR__FAILED__JAIABOT_DATA_VISION, ERROR__FAILED__JAIABOT_SIMULATOR, ERROR__FAILED__MOOS_SIM_MOOSDB, ERROR__FAILED__MOOS_SIM_USIMMARINE, ERROR__FAILED__GOBY_INTERVEHICLE_PORTAL, ERROR__FAILED__JAIABOT_ADAFRUIT_BNO085_DRIVER, ERROR__FAILED__JAIABOT_ECHO_DRIVER, ERROR__FAILED__PYTHON_JAIABOT_ECHO, ERROR__NOT_RESPONDING__UNKNOWN_APP, ERROR__NOT_RESPONDING__GOBYD, ERROR__NOT_RESPONDING__GOBY_LIAISON, ERROR__NOT_RESPONDING__GOBY_GPS, ERROR__NOT_RESPONDING__GOBY_LOGGER, ERROR__NOT_RESPONDING__GOBY_CORONER, ERROR__NOT_RESPONDING__JAIABOT_HEALTH, ERROR__NOT_RESPONDING__JAIABOT_METADATA, ERROR__NOT_RESPONDING__JAIABOT_HUB_MANAGER, ERROR__NOT_RESPONDING__JAIABOT_WEB_PORTAL, ERROR__NOT_RESPONDING__JAIABOT_FUSION, ERROR__NOT_RESPONDING__GOBY_MOOS_GATEWAY, ERROR__NOT_RESPONDING__JAIABOT_MISSION_MANAGER, ERROR__NOT_RESPONDING__JAIABOT_PID_CONTROL, ERROR__NOT_RESPONDING__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER, ERROR__NOT_RESPONDING__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER, ERROR__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO055_DRIVER, ERROR__NOT_RESPONDING__JAIABOT_DRIVER_ARDUINO, ERROR__NOT_RESPONDING__JAIABOT_ENGINEERING, ERROR__NOT_RESPONDING__JAIABOT_SINGLE_THREAD_PATTERN, ERROR__NOT_RESPONDING__JAIABOT_MULTI_THREAD_PATTERN, ERROR__NOT_RESPONDING__JAIABOT_SIMULATOR, ERROR__NOT_RESPONDING__GOBY_INTERVEHICLE_PORTAL, ERROR__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO085_DRIVER, ERROR__NOT_RESPONDING__JAIABOT_ECHO_DRIVER, ERROR__MISSING_DATA__GPS_FIX, ERROR__MISSING_DATA__GPS_POSITION, ERROR__MISSING_DATA__PRESSURE, ERROR__MISSING_DATA__HEADING, ERROR__MISSING_DATA__SPEED, ERROR__MISSING_DATA__COURSE, ERROR__MISSING_DATA__CALIBRATION_SYS, ERROR__MISSING_DATA__CALIBRATION_GYRO, ERROR__MISSING_DATA__CALIBRATION_ACCEL, ERROR__MISSING_DATA__CALIBRATION_MAG, ERROR__NOT_CALIBRATED_SYS, ERROR__NOT_CALIBRATED_GYRO, ERROR__NOT_CALIBRATED_ACCEL, ERROR__NOT_CALIBRATED_MAG, ERROR__NOT_CALIBRATED_IMU, ERROR__MOOS__HELMIVP_STATE_NOT_DRIVE, ERROR__MOOS__HELMIVP_NO_DESIRED_DATA, ERROR__MOOS__NO_DATA, ERROR__SYSTEM__CANNOT_READ_MEMINFO, ERROR__SYSTEM__RAM_SPACE_CRITICAL, ERROR__SYSTEM__CANNOT_READ_SYSINFO, ERROR__SYSTEM__CPU_LOAD_FACTOR_CRITICAL, ERROR__SYSTEM__CANNOT_READ_DISK_USAGE, ERROR__SYSTEM__ROOTFS_DISK_SPACE_CRITICAL, ERROR__SYSTEM__DATA_DISK_SPACE_CRITICAL, ERROR__SYSTEM__NTP_PEERS_QUERY_FAILED, ERROR__SYSTEM__NTP_STATUS_QUERY_FAILED, ERROR__VEHICLE__VERY_LOW_BATTERY, ERROR__VEHICLE__CRITICALLY_LOW_BATTERY, ERROR__VEHICLE__MISSING_DATA_BATTERY, ERROR__VERSION__MISMATCH_ARDUINO, ERROR__MISSING_DATA__ARDUINO_REPORT, ERROR__VERSION__MISMATCH_INTERVEHICLE__UPGRADE_HUB, ERROR__VERSION__MISMATCH_INTERVEHICLE__UPGRADE_BOT, ERROR__ARDUINO_CONNECTION_FAILED
  • <ENUM Warning>: WARNING__TOO_MANY_WARNINGS_TO_REPORT_ALL, WARNING__NOT_RESPONDING__UNKNOWN_APP, WARNING__NOT_RESPONDING__JAIABOT_ATLAS_SCIENTIFIC_EZO_EC_DRIVER, WARNING__NOT_RESPONDING__JAIABOT_BLUEROBOTICS_PRESSURE_SENSOR_DRIVER, WARNING__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO055_DRIVER, WARNING__NOT_RESPONDING__JAIABOT_ADAFRUIT_BNO085_DRIVER, WARNING__NOT_RESPONDING__JAIABOT_ECHO_DRIVER, WARNING__MISSING_DATA__PITCH, WARNING__MISSING_DATA__ROLL, WARNING__MISSING_DATA__TEMPERATURE, WARNING__MISSING_DATA__COURSE, WARNING__NOT_CALIBRATED_SYS, WARNING__IMU_ISSUE, WARNING__TEMPERATURE__ARDUINO_TOO_HIGH, WARNING__TEMPERATURE__LINUX_TOO_HIGH, WARNING__COMMS_LOW_SIGNAL_STRENGTH, WARNING__VEHICLE__LOW_BATTERY, WARNING__SYSTEM__NTP_NOT_SYNCHRONIZED, WARNING__SYSTEM__NTP_OFFSET_HIGH, WARNING__SYSTEM__NTP_JITTER_HIGH, WARNING__SYSTEM__RAM_SPACE_LOW, WARNING__SYSTEM__CPU_LOAD_FACTOR_HIGH, WARNING__SYSTEM__ROOTFS_DISK_SPACE_LOW, WARNING__SYSTEM__DATA_DISK_SPACE_LOW, WARNING__MISSION__INFEASIBLE_MISSION__TRANSIT_MUST_HAVE_A_GOAL, WARNING__MISSION__INFEASIBLE_MISSION__TRANSIT_CANNOT_RECOVER_AT_FINAL_GOAL_WITHOUT_A_GOAL, WARNING__MISSION__INFEASIBLE_MISSION__MUST_HAVE_RECOVERY_LOCATION_IF_NOT_RECOVERING_AT_FINAL_GOAL, WARNING__MISSION__INFEASIBLE_MISSION__MINIMUM_BOTTOM_DEPTH_REACHED, WARNING__MISSION__INFEASIBLE_MISSION__GOAL_DESIRED_DEPTH_EXCEEDED_MAX, WARNING__VEHICLE__NO_FORWARD_PROGRESS, WARNING__MISSION__DATA_OFFLOAD_FAILED, WARNING__MISSION__DATA__GPS_FIX_DEGRADED, WARNING__MISSION__DATA_PRE_OFFLOAD_FAILED, WARNING__MISSION__DATA_POST_OFFLOAD_FAILED
  • <ENUM BotType>: HYDRO, ECHO
  • <ENUM MissionState>: PRE_DEPLOYMENT__STARTING_UP, PRE_DEPLOYMENT__IDLE, PRE_DEPLOYMENT__SELF_TEST, PRE_DEPLOYMENT__FAILED, PRE_DEPLOYMENT__WAIT_FOR_MISSION_PLAN, PRE_DEPLOYMENT__READY, IN_MISSION__UNDERWAY__REPLAN, IN_MISSION__UNDERWAY__MOVEMENT__TRANSIT, IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__SETPOINT, IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__STATION_KEEP, IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__SURFACE_DRIFT, IN_MISSION__UNDERWAY__MOVEMENT__TRAIL, IN_MISSION__UNDERWAY__TASK__STATION_KEEP, IN_MISSION__UNDERWAY__TASK__SURFACE_DRIFT, IN_MISSION__UNDERWAY__TASK__DIVE__DIVE_PREP, IN_MISSION__UNDERWAY__TASK__DIVE__POWERED_DESCENT, IN_MISSION__UNDERWAY__TASK__DIVE__HOLD, IN_MISSION__UNDERWAY__TASK__DIVE__UNPOWERED_ASCENT, IN_MISSION__UNDERWAY__TASK__DIVE__POWERED_ASCENT, IN_MISSION__UNDERWAY__TASK__DIVE__REACQUIRE_GPS, IN_MISSION__UNDERWAY__TASK__DIVE__SURFACE_DRIFT, IN_MISSION__UNDERWAY__TASK__DIVE__CONSTANT_HEADING, IN_MISSION__UNDERWAY__TASK__CONSTANT_HEADING, IN_MISSION__UNDERWAY__RECOVERY__TRANSIT, IN_MISSION__UNDERWAY__RECOVERY__STATION_KEEP, IN_MISSION__UNDERWAY__RECOVERY__STOPPED, IN_MISSION__PAUSE__REACQUIRE_GPS, IN_MISSION__PAUSE__MANUAL, POST_DEPLOYMENT__RECOVERED, POST_DEPLOYMENT__DATA_OFFLOAD, POST_DEPLOYMENT__IDLE, POST_DEPLOYMENT__SHUTTING_DOWN, POST_DEPLOYMENT__FAILED

Response JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
]
},
"status": {
"bots": [
{
"bot_id": 4294967295,
"time": "18446744073709551615",
"last_command_time": "18446744073709551615",
"health_state": "<ENUM HealthState>",
"error": [
"<ENUM Error>",
"<ENUM Error>"
],
"warning": [
"<ENUM Warning>",
"<ENUM Warning>"
],
"bot_type": "<ENUM BotType>",
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"depth": 1.2345,
"attitude": {
"roll": 1.2345,
"pitch": 1.2345,
"heading": 1.2345,
"course_over_ground": 1.2345
},
"speed": {
"over_ground": 1.2345
},
"mission_state": "<ENUM MissionState>",
"active_goal": 2147483647,
"distance_to_active_goal": 1.2345,
"active_goal_timeout": 4294967295,
"repeat_index": 2147483647,
"battery_percent": 1.2345,
"wifi_link_quality_percentage": 2147483647,
"received_time": "18446744073709551615"
},
{
"bot_id": 4294967295,
"time": "18446744073709551615",
"last_command_time": "18446744073709551615",
"health_state": "<ENUM HealthState>",
"error": [
"<ENUM Error>",
"<ENUM Error>"
],
"warning": [
"<ENUM Warning>",
"<ENUM Warning>"
],
"bot_type": "<ENUM BotType>",
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"depth": 1.2345,
"attitude": {
"roll": 1.2345,
"pitch": 1.2345,
"heading": 1.2345,
"course_over_ground": 1.2345
},
"speed": {
"over_ground": 1.2345
},
"mission_state": "<ENUM MissionState>",
"active_goal": 2147483647,
"distance_to_active_goal": 1.2345,
"active_goal_timeout": 4294967295,
"repeat_index": 2147483647,
"battery_percent": 1.2345,
"wifi_link_quality_percentage": 2147483647,
"received_time": "18446744073709551615"
}
],
"hubs": [
{
"hub_id": 4294967295,
"fleet_id": 4294967295,
"time": "18446744073709551615",
"health_state": "<ENUM HealthState>",
"error": [
"<ENUM Error>",
"<ENUM Error>"
],
"warning": [
"<ENUM Warning>",
"<ENUM Warning>"
],
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"received_time": "18446744073709551615"
},
{
"hub_id": 4294967295,
"fleet_id": 4294967295,
"time": "18446744073709551615",
"health_state": "<ENUM HealthState>",
"error": [
"<ENUM Error>",
"<ENUM Error>"
],
"warning": [
"<ENUM Warning>",
"<ENUM Warning>"
],
"location": {
"lat": 1.2345,
"lon": 1.2345
},
"received_time": "18446744073709551615"
}
]
},
"request": {
"copy of original request": "..."
}
}

Response Action: metadata

Metadata response. This is sent in response to a successful Request 'metadata' action.

Response Syntax

Response JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
]
},
"metadata": {
"name": "<STRING>",
"jaiabot_version": {
"major": "<STRING>",
"minor": "<STRING>",
"patch": "<STRING>",
"git_hash": "<STRING>",
"git_branch": "<STRING>",
"deb_repository": "<STRING>",
"deb_release_branch": "<STRING>"
},
"goby_version": "<STRING>",
"moos_version": "<STRING>",
"ivp_version": "<STRING>",
"xbee_node_id": "<STRING>",
"xbee_serial_number": "<STRING>",
"raspi_firmware_version": "<STRING>",
"jaiabot_image_version": "<STRING>",
"jaiabot_image_build_date": "<STRING>",
"jaiabot_image_first_boot_date": "<STRING>",
"intervehicle_api_version": 4294967295,
"is_simulation": true
},
"request": {
"copy of original request": "..."
}
}

Response Action: task_packets

Task packet response. This is sent in response to a successful Request 'task_packet' action.

Response Syntax

Enumerations:

  • <ENUM TaskType>: NONE, DIVE, STATION_KEEP, SURFACE_DRIFT, CONSTANT_HEADING
  • <ENUM BottomType>: HARD, SOFT

Response JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
]
},
"task_packets": {
"packets": [
{
"bot_id": 4294967295,
"start_time": "18446744073709551615",
"end_time": "18446744073709551615",
"type": "<ENUM TaskType>",
"dive": {
"dive_rate": 1.2345,
"unpowered_rise_rate": 1.2345,
"powered_rise_rate": 1.2345,
"depth_achieved": 1.2345,
"measurement": [
{
"mean_depth": 1.2345,
"mean_temperature": 1.2345,
"mean_salinity": 1.2345
},
{
"mean_depth": 1.2345,
"mean_temperature": 1.2345,
"mean_salinity": 1.2345
}
],
"start_location": {
"lat": 1.2345,
"lon": 1.2345
},
"duration_to_acquire_gps": 1.2345,
"bottom_dive": true,
"reached_min_depth": true,
"bottom_type": "<ENUM BottomType>",
"max_acceleration": 1.2345
},
"drift": {
"drift_duration": 2147483647,
"estimated_drift": {
"speed": 1.2345,
"heading": 1.2345
},
"start_location": {
"lat": 1.2345,
"lon": 1.2345
},
"end_location": {
"lat": 1.2345,
"lon": 1.2345
},
"significant_wave_height": 1.2345
}
},
{
"bot_id": 4294967295,
"start_time": "18446744073709551615",
"end_time": "18446744073709551615",
"type": "<ENUM TaskType>",
"dive": {
"dive_rate": 1.2345,
"unpowered_rise_rate": 1.2345,
"powered_rise_rate": 1.2345,
"depth_achieved": 1.2345,
"measurement": [
{
"mean_depth": 1.2345,
"mean_temperature": 1.2345,
"mean_salinity": 1.2345
},
{
"mean_depth": 1.2345,
"mean_temperature": 1.2345,
"mean_salinity": 1.2345
}
],
"start_location": {
"lat": 1.2345,
"lon": 1.2345
},
"duration_to_acquire_gps": 1.2345,
"bottom_dive": true,
"reached_min_depth": true,
"bottom_type": "<ENUM BottomType>",
"max_acceleration": 1.2345
},
"drift": {
"drift_duration": 2147483647,
"estimated_drift": {
"speed": 1.2345,
"heading": 1.2345
},
"start_location": {
"lat": 1.2345,
"lon": 1.2345
},
"end_location": {
"lat": 1.2345,
"lon": 1.2345
},
"significant_wave_height": 1.2345
}
}
]
},
"request": {
"copy of original request": "..."
}
}

Response Action: command_result

Command result. This is sent in response to a successful Request 'command' or 'command_for_hub' action.

Response Syntax

Response JSON:

{
"target": {
"hubs": [
1
],
"bots": [
1,
2
]
},
"command_result": {
"command_sent": true
},
"request": {
"copy of original request": "..."
}
}