""" schema: vehicle-specific decoded status message (DRAFT) """ from . import message_header_schema, vehicle_schema, api from flask_restx import fields # TODO: Discuss nomenclature > vehicle or vehicle? gps_schema = api.model( "GPS", { "gps_source": fields.Float( # TODO: TBD with partners required=False, description="Source of gps position. E.g. USBL (external), vehicle itself (internal)", example="internal", ), "latitude_type": fields.String( required=False, description="", example="", ), "longitude_type": fields.String( required=False, description="", example="", ), "latitude": fields.Float( required=False, description="Latitude in ", example="", ), "longitude": fields.Float( required=False, description="Longitude in ", example="", ), "depth": fields.Float( required=False, description="Depth in ", example="", ), "altitude": fields.Float( required=False, description="Altitude in ", example="", ), # "gps_fix_seconds_ago": fields.Float( # required=False, # description="", # example="", # ), }, ) # battery_schema = api.model( # "Battery", # { # "voltage_v": fields.Float( # required=True, # description="Volts", # example=23.0, # ), # "current_amps": fields.Float( # required=False, # description="Amps", # example=1.2, # ), # "current_usage_amphours": fields.Float( # required=False, # description="Amp-Hours", # example=1.2, # ), # "wattage_w": fields.Float( # required=False, # description="Watts", # example=23.0, # ), # "wattage_usage_watthours": fields.Float( # required=False, # description="Watt-Hours", # example=23.0, # ), # "remaining_capacity": fields.Float( # required=False, # description="Battery remaining capacity % provided by respective C2 if any.", # example=80.0, # ), # } # ) sensor_schema = api.model( "Sensor", { "sensor_name": fields.String( required=False, description="Name of sensor (e.g. MBES for AH1 and SideScan for Ecosub", example="MBES", ), "sensor_status": fields.Boolean( required=False, description="Sensor switched on (True) or off (False)", example=True, ), "additional_data": fields.Raw( required=False, description="Add any additional sensor-related data here.", example={"sensor_loadtime_seconds": 30.0}, ), } ) vehicle_status_message_schema = api.model( "vehicleStatusMessage", { "message": fields.Nested( message_header_schema, required=True, description="Message header", ), "vehicle": fields.Nested(vehicle_schema), "vehicle_state": fields.String( # TODO: Define dictionary with potential STATES of each vehicle required=False, description="Current state executed by vehicle. E.g. " + "STOP, IDLE, ABORT.", example="IDLE", ), "autonomy_mission_ID": fields.Integer( required=False, description="Last mission plan ID (according to Autonomy Engine's mission plan number) executed by vehicle", example=1, ), "mission_track_number": fields.Integer( required=False, description=( "Track number - stage in mission (e.g. " + "4 --> Waypoint 3 to Waypoint 4)" ), example=4, ), "range_to_go": fields.Float( required=False, description="Estimated distance to reach next waypoint", example=124.3, ), "speed_over_ground": fields.Float( required=False, description="", example=124.3, ), "water_current_velocity": fields.Float( required=False, description="", example=124.3, ), "thrust_applied": fields.Float( required=False, description="TODO: Needs further consideration", example=124.3, ), "health_status": fields.String( required=False, description="Health status extracted by respective vehicle " + "if any diagnosis available checks on sensors", example="Warning", ), "gps_data": fields.List( fields.Nested(gps_schema), # TODO: TBD Do we want a list of gps readings to allow > 1 reading i.e. vehicle + usbl required=True, description="Metadata pf each vehicle", ), "localisation_error": fields.Float( required=False, description="Localisation error at last USBL update.", example="", ), "usbl_fix_seconds_ago": fields.Float( required=False, description="", example="", ), "battery_remaining_capacity": fields.Float( required=False, description="Battery remaining capacity % provided by respective C2 if any.", example=80.0, ), "sensor_config": fields.Nested(sensor_schema), # TODO: TBD Do we want a list of sensors to allow > 1 sensor }, ) # TBD: Do we append beacon positions with vehicle positions?