3 import "jaiabot/messages/jaia_dccl.proto";
4 import "jaiabot/messages/hub.proto";
5 import "jaiabot/messages/metadata.proto";
6 import "jaiabot/messages/option_extensions.proto";
8 package jaiabot.protobuf;
10 message TaskPacketsRequest
12 required uint64 start_time = 1
13 [(jaia.field).rest_api.presence = GUARANTEED];
14 required uint64 end_time = 2 [(jaia.field).rest_api.presence = GUARANTEED];
19 required bool command_sent = 1
20 [(jaia.field).rest_api.presence = GUARANTEED];
25 // REST API URL errors
26 API_ERROR__UNSUPPORTED_API_VERSION = 1
27 [(jaia.ev).rest_api.presence = GUARANTEED];
28 API_ERROR__INVALID_ACTION = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
29 API_ERROR__TARGETS_STRING_MALFORMATTED = 3
30 [(jaia.ev).rest_api.presence = GUARANTEED];
31 API_ERROR__ACTION_REQUIRES_JSON_POST_DATA = 4
32 [(jaia.ev).rest_api.presence = GUARANTEED];
33 API_ERROR__INVALID_TARGET = 5 [(jaia.ev).rest_api.presence = GUARANTEED];
36 API_ERROR__COULD_NOT_PARSE_API_REQUEST_JSON = 10
37 [(jaia.ev).rest_api.presence = GUARANTEED];
40 API_ERROR__REQUEST_NOT_INITIALIZED = 11
41 [(jaia.ev).rest_api.presence = GUARANTEED];
42 API_ERROR__NO_ACTION_SPECIFIED = 12
43 [(jaia.ev).rest_api.presence = GUARANTEED];
45 API_ERROR__INVALID_TYPE = 13 [(jaia.ev).rest_api.presence = GUARANTEED];
48 API_ERROR__NOT_IMPLEMENTED = 20;
53 required APIErrorCode code = 1
54 [(jaia.field).rest_api.presence = GUARANTEED];
55 optional string details = 2 [(jaia.field).rest_api.presence = GUARANTEED];
62 repeated int32 hubs = 1 [(jaia.field).rest_api.presence = GUARANTEED];
63 repeated int32 bots = 2 [(jaia.field).rest_api.presence = GUARANTEED];
65 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
67 required Nodes target = 1 [(jaia.field).rest_api.presence = GUARANTEED];
68 optional string api_key = 2 [(jaia.field).rest_api.presence = GUARANTEED];
72 bool status = 11 [(jaia.field).rest_api = {
74 doc: "Query the status of bots/hubs. Expect a response of type 'status'."
76 request: '{"api_key": "4vS6s2jnulxVjrKSB-__tQ", "status": true, "target": {"all": true}}'
77 response: '{"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]}}'
80 bool metadata = 12 [(jaia.field).rest_api = {
82 doc: "Query the metadata of the hub. Expect a response of type 'metadata'."
84 request: '{ "target": {"all": true },"metadata": true, "api_key": "4vS6s2jnulxVjrKSB-__tQ"}'
85 response: '{"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]}}'
88 TaskPacketsRequest task_packets = 13 [(jaia.field).rest_api = {
90 doc: "Query task packets from a given range of time. Expect a response of type 'task_packets'."
92 request: '{"target": {"bots": [1]}, "task_packets": {"start_time": 1722797666581176.0, "end_time": 1722970466581176.0}, "api_key": "4vS6s2jnulxVjrKSB-__tQ"}'
93 response: '{"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"}]}}'
96 Command command = 14 [(jaia.field).rest_api = {
98 doc: "Send a command to one or more bots. Expect a response of type 'command_result'."
100 request: '{"target": {"all": true}, "command": {"type": "STOP"}, "api_key": "4vS6s2jnulxVjrKSB-__tQ"}'
101 response: '{"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]}}'
104 CommandForHub command_for_hub = 15 [(jaia.field).rest_api = {
105 presence: GUARANTEED,
106 doc: "Send a command to the hub. Expect a response of type 'command_result'."
108 request: '{"target": {"all": true}, "command_for_hub": {"type": "SET_HUB_LOCATION", "hub_location": {"lat": 41.7, "lon": -70.3}}, "api_key": "4vS6s2jnulxVjrKSB-__tQ"}'
109 response: '{"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]}}'
119 repeated int32 hubs = 1 [(jaia.field).rest_api.presence = GUARANTEED];
120 repeated int32 bots = 2 [(jaia.field).rest_api.presence = GUARANTEED];
122 optional Nodes target = 1 [(jaia.field).rest_api.presence = GUARANTEED];
125 repeated BotStatus bots = 1
126 [(jaia.field).rest_api.presence = GUARANTEED];
127 repeated HubStatus hubs = 2
128 [(jaia.field).rest_api.presence = GUARANTEED];
132 repeated TaskPacket packets = 1
133 [(jaia.field).rest_api.presence = GUARANTEED];
138 APIError error = 10 [(jaia.field).rest_api = {
139 presence: GUARANTEED,
140 doc: "Error with API Request. This can be sent in response to any failed Request action."
142 Statuses status = 11 [(jaia.field).rest_api = {
143 presence: GUARANTEED,
144 doc: "Bot/Hub status. This is sent in response to a successful Request 'status' action."
146 DeviceMetadata metadata = 12 [(jaia.field).rest_api = {
147 presence: GUARANTEED,
148 doc: "Metadata response. This is sent in response to a successful Request 'metadata' action."
150 TaskPackets task_packets = 13 [(jaia.field).rest_api = {
151 presence: GUARANTEED,
152 doc: "Task packet response. This is sent in response to a successful Request 'task_packet' action."
154 CommandResult command_result = 14 [(jaia.field).rest_api = {
155 presence: GUARANTEED,
156 doc: "Command result. This is sent in response to a successful Request 'command' or 'command_for_hub' action."
160 // copy of original request
161 required APIRequest request = 20
162 [(jaia.field).rest_api = { presence: GUARANTEED }];