platform_status.py 5.37 KB
Newer Older
1
"""
2
    schema: platform-specific decoded status message (DRAFT)
3
"""
4
from . import full_message_schema, api
5 6 7 8 9 10 11
from flask_restx import fields

gps_schema = api.model(
    "GPS",
    {
        "gps_source": fields.Float(  # TODO: TBD with partners
            required=False,
12 13 14 15
            description=(
                "Source of gps position. E.g. USBL (external),"
                + "platform itself (internal)"
            ),
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
            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 <DEFINE UNITS>",
            example="",
        ),
        "longitude": fields.Float(
            required=False,
            description="Longitude in <DEFINE UNITS>",
            example="",
        ),
        "depth": fields.Float(
            required=False,
            description="Depth in <DEFINE UNITS>",
            example="",
        ),
        "altitude": fields.Float(
            required=False,
            description="Altitude in <DEFINE UNITS>",
            example="",
        ),
48
        # "gps_fix_seconds_ago"
49 50 51 52
    },
)

sensor_schema = api.model(
53
    "SensorSchema",
54
    {
55 56 57 58 59 60
        "sensor_ID": fields.Integer(
            required=True,
            description="unique identifier for platform",
            example=2,
        ),
        "serial": fields.String(
61
            required=False,
62 63
            description="serial number of sensor",
            example="mbes-001",
64 65 66 67 68 69 70 71
        ),
        "sensor_status": fields.Boolean(
            required=False,
            description="Sensor switched on (True) or off (False)",
            example=True,
        ),
        "additional_data": fields.Raw(
            required=False,
72
            description="Any addition fields/data to be added here",
73
        ),
74
    },
75
)
76 77


78 79
platform_status_message_schema = api.model(
    "platformStatusMessage",
80 81
    {
        "message": fields.Nested(
82
            full_message_schema,
83 84 85
            required=True,
            description="Message header",
        ),
86 87 88 89 90 91 92 93 94 95 96
        "platform_ID": fields.Integer(
            required=True,
            description="unique identifier for platform",
            example=1,
        ),
        "active": fields.Boolean(
            required=False,
            description="When a platform is in deployment (executing a"
            + " mission plan) this should be True",
            example=True,
        ),
97 98
        "platform_state": fields.String(
            # TODO: Define dictionary with potential STATES of each platform
99
            required=False,
100
            description="Current state executed by platform. E.g. "
101 102 103
            + "STOP, IDLE, ABORT.",
            example="IDLE",
        ),
104
        "autonomy_plan_ID": fields.Integer(
105
            required=False,
106 107
            description="Last mission plan ID (according to Autonomy Engine's"
            + " mission plan number) executed by platform",
108 109
            example=1,
        ),
110
        "mission_track_ID": fields.Integer(
111 112 113 114 115 116 117
            required=False,
            description=(
                "Track number - stage in mission (e.g. "
                + "4 --> Waypoint 3 to Waypoint 4)"
            ),
            example=4,
        ),
118 119 120 121 122
        "mission_action_ID": fields.Integer(
            required=False,
            description="to add description",
            example=1,
        ),
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
        "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,
145
            description="Health status extracted by respective platform "
146 147 148 149
            + "if any diagnosis available checks on sensors",
            example="Warning",
        ),
        "gps_data": fields.List(
150 151
            fields.Nested(gps_schema),  # TODO: TBD Do we want a list of
            # gps readings to allow > 1 reading i.e. platform + usbl
152
            required=True,
153
            description="Metadata pf each platform",
154 155 156 157 158 159 160 161 162 163 164 165
        ),
        "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(
166
            required=True,
167 168
            description="Battery remaining capacity % provided by respective"
            + " platform/C2.",
169 170
            example=80.0,
        ),
171 172 173
        "sensor_config": fields.Nested(
            sensor_schema
        ),  # TODO: TBD Do we want a list of sensors to allow > 1 sensor
174 175 176
    },
)

177
# TBD: Do we append beacon positions with platform positions?