platform_status.py 3.62 KB
Newer Older
1
"""
2
    schema: platform-specific decoded status message (DRAFT)
3
"""
4
from . import message_header_schema, platform_schema, api
5 6
from flask_restx import fields

7
# TODO: Discuss nomenclature > platform or vehicle?
8

9 10 11 12 13 14 15 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 48 49 50 51
gps_schema = api.model(
    "GPS",
    {
        "gps_source": fields.Float(  # TODO: TBD with partners
            required=False,
            description="Source of gps position. E.g. Beacon",
            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 <insert units>",
            example="",
        ),
        "longitude": fields.Float(
            required=False,
            description="Longitude in <insert units>",
            example="",
        ),
        "depth": fields.Float(
            required=False,
            description="",
            example="",
        ),
        "gps_fix_seconds_ago": fields.Float(
            required=False,
            description="",
            example="",
        ),
    },
)

platform_status_message_schema = api.model(
    "PlatformStatusMessage",
52 53 54 55 56 57
    {
        "message": fields.Nested(
            message_header_schema,
            required=True,
            description="Message header",
        ),
58
        "platform": fields.Nested(platform_schema),
59 60 61 62 63 64 65 66 67 68 69
        "time": fields.String(
            required=True,
            description="Timestamp of message",
            example="2022-11-16T00:00:00Z",
        ),
        "version": fields.Integer(
            required=False,
            description="",  # we can track the version of the AE plan?
            example="",
        ),
        "platform_state": fields.String(
70
            # TODO: Define dictionary with potential STATES of each platform
71
            required=True,
72 73 74
            description="Current state executed by platform. E.g. "
            + "STOP, IDLE, ABORT.",
            example="IDLE",
75 76
        ),
        "mission_track_number": fields.Integer(
77
            required=False,
78 79 80 81 82 83 84 85 86 87 88 89
            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,
        ),
        "c2_health_status": fields.String(
90 91 92
            required=False,
            description="Health status extracted by respective platform's C2 "
            + "if any diagnosis available checks on sensors",
93 94
            example="Warning",
        ),
95
        "gps_data": fields.Nested(gps_schema),
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
        "battery_voltage": fields.Float(
            required=True,
            description="Volts",
            example=23.0,
        ),
        "battery_current": fields.Float(
            required=False,
            description="Amps",
            example=1.2,
        ),
        "battery_current_per_hour": fields.Float(
            required=False,
            description="Amp-Hours",
            example=1.2,
        ),
        "battery_wattage": fields.Float(
            required=False,
            description="Watts",
            example=23.0,
        ),
        "battery_wattage_per_hour": fields.Float(
            required=False,
            description="Watt-Hours",
            example=23.0,
        ),
    },
)

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