diff --git a/lambda/ham_put_api/__init__.py b/lambda/ham_put_api/__init__.py index 4077cdd..aa2edae 100644 --- a/lambda/ham_put_api/__init__.py +++ b/lambda/ham_put_api/__init__.py @@ -20,6 +20,10 @@ def check_fields_are_number(field, telemetry): def telemetry_filter(telemetry): fields_to_check = ["alt", "lat", "lon"] + required_fields = ["datetime", "uploader_callsign", "software_name"] + fields_to_check + for field in required_fields: + if field not in telemetry: + return (False, f"Missing {field} field") for field in fields_to_check: field_check = check_fields_are_number(field, telemetry) if field_check[0] == False: @@ -29,6 +33,11 @@ def telemetry_filter(telemetry): return (True, "") +# Returns true for anything that should be hidden +def telemetry_hide_filter(telemetry): + if telemetry["payload_callsign"] in ['MYCALL','4FSKTEST','4FSKTEST-V2']: + return True + return False def post(payload): sns.publish( @@ -58,12 +67,16 @@ def upload(event, context): payload["position"] = f'{payload["lat"]},{payload["lon"]}' valid, error_message = telemetry_filter(payload) + if not valid: errors.append({ "error_message": error_message, "payload": payload }) else: + # Apply hide field for anything that matches our filters + if telemetry_hide_filter(payload): + payload["telemetry_hidden"] = True if "uploader_position" in payload: if not payload["uploader_position"]: payload.pop("uploader_position") diff --git a/lambda/ham_put_api/__main__.py b/lambda/ham_put_api/__main__.py index c11c039..fa00c4f 100644 --- a/lambda/ham_put_api/__main__.py +++ b/lambda/ham_put_api/__main__.py @@ -1,4 +1,47 @@ from . import * +import json +import base64 +import gzip +import uuid +from io import BytesIO +body = [ + { + "software_name": "radiosonde_auto_rx", + "software_version": "1.5.5", + "uploader_callsign": "sdf", + "payload_callsign": "4FSKTEST", + "uploader_antenna": "1/4 wave monopole", + "time_received": "2021-12-30T03:55:05.510688Z", + "datetime": "2021-12-30T03:55:05.510688Z", + "manufacturer": "Graw", + "type": "DFM", + "subtype": "DFM09", + "serial": "00000000", + "frame": 1313391064, + "lat": 47.8319, + "lon": 10.89474, + "alt": 1717.93, + "temp": 7.4, + "vel_v": 2.51, + "vel_h": 8.18, + "heading": 81.51, + "sats": 9, + "batt": 5.32, + "frequency": 402.509, + "snr": 13.3, + "position": "47.8319,10.89474", + "uploader_alt": 545, + "uploader_position": [None,None,None], + }] + +compressed = BytesIO() +with gzip.GzipFile(fileobj=compressed, mode='w') as f: + f.write(json.dumps(body).encode('utf-8')) +compressed.seek(0) +bbody = base64.b64encode(compressed.read()).decode("utf-8") + + + payload = { "version": "2.0", "routeKey": "PUT /sondes/telemetry", @@ -36,7 +79,7 @@ payload = { "time": "31/Jan/2021:00:10:25 +0000", "timeEpoch": 1612051825409, }, - "body": "H4sIAI8ihGIAA42Sz0/CMBTH7/wVhDPUdt3cxlnxYLwoepCQ5cEesKRrZ9cNifF/t53rJHCxhyb7vs/78X3rajS256u7J7XamSNozCSUOJmPJxryQtVK5phBY1SmPyfTC7RFXRdKOpqRiEQeaCqhIEedbUGIuth3xNsjX7w+z5b3L8srDqRBKaErdBOOj9DiuFRSVUqgh01RYqZxi0WLuSMDGrAZC2acLimfR9Gc2hEYvU2Sd5+Tg0GX90+8BNnsYGsajdqlPGg4Du1PVVfmbvE07KHZnKk0HXTUBQgn0/74yE7/Lpdxxnlqm4d9QIBxfBiThLOhkOh2yyhJ0jD2KAiHspjFJOV+OCwrK8bEQy2KrLVKYC2eSQcrJYQlvXRA+4/l3onsD6zB1FZK+88NGNcwIjwYXOBHg3J7snJIbQvq2Vrqzh3xg1WqLkz/RHpzU+/n+hV0zqIwugycVVnJRojpcK0t+T1a/wDKy8FaygIAAA==", + "body": bbody, "isBase64Encoded": True, } print(lambda_handler(payload, {}))