From 7cb98f0ae368769fff0ad846970e448b8ebe49f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sch=C3=A4fer?= <34800304+Eshco93@users.noreply.github.com> Date: Sat, 22 Apr 2023 12:28:16 +0200 Subject: [PATCH] Add files via upload --- SondeHubUploader/SondeHubUploader.py | 3 +++ SondeHubUploader/handleData.py | 1 + SondeHubUploader/shuConfig.py | 26 +++++++++++++++++--------- SondeHubUploader/telemetryChecks.py | 11 +++++++++-- SondeHubUploader/threads.py | 25 ++++++++++++++++++------- SondeHubUploader/utils.py | 13 ++++++++++++- 6 files changed, 60 insertions(+), 19 deletions(-) diff --git a/SondeHubUploader/SondeHubUploader.py b/SondeHubUploader/SondeHubUploader.py index 1b57660..10cc087 100644 --- a/SondeHubUploader/SondeHubUploader.py +++ b/SondeHubUploader/SondeHubUploader.py @@ -50,6 +50,9 @@ def __init__(self, args): self.last_station_upload = 0 # Stores the last time telemetry was uploaded self.last_telemetry_upload = 0 + + # Disable upload for all radiosondes that were not enabled + self.utils.disable_radiosondes(self, self.sonde) # Create a thread for receiving packages self.receive_thread = threading.Thread(target=self.threads.receive, args=(self,)) diff --git a/SondeHubUploader/handleData.py b/SondeHubUploader/handleData.py index f1be00e..5f438c5 100644 --- a/SondeHubUploader/handleData.py +++ b/SondeHubUploader/handleData.py @@ -402,6 +402,7 @@ def reformat_telemetry(self, unified_telemetry): # ref_datetime and ref_position can be transferred directly reformatted_telemetry['ref_datetime'] = self.shuConfig.radiosonde[name]['sondehub_time_reference'] reformatted_telemetry['ref_position'] = self.shuConfig.radiosonde[name]['sondehub_position_reference'] + # Break out of for-loop after the first match because only a single match is expected break # Thirdly, mandatory non-radiosonde-specific reformatted telemetry parameters are added diff --git a/SondeHubUploader/shuConfig.py b/SondeHubUploader/shuConfig.py index 6da3915..e4b2fe8 100644 --- a/SondeHubUploader/shuConfig.py +++ b/SondeHubUploader/shuConfig.py @@ -30,7 +30,7 @@ # Software definitions software_name = 'dxlAPRS-SHUE' -software_version = '1.1.0' +software_version = '1.1.1' # Status code definitions status_code_ok = 200 @@ -946,7 +946,8 @@ 'altitude_precision': 5, 'radiosonde_time_reference': 'GPS', 'sondehub_time_reference': 'GPS', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'RS92': { @@ -958,7 +959,8 @@ 'altitude_precision': 5, 'radiosonde_time_reference': 'GPS', 'sondehub_time_reference': 'GPS', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'DFM': { @@ -970,7 +972,8 @@ 'altitude_precision': 2, 'radiosonde_time_reference': 'UTC', 'sondehub_time_reference': 'UTC', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'iMET': { @@ -982,7 +985,8 @@ 'altitude_precision': 0, 'radiosonde_time_reference': 'GPS', 'sondehub_time_reference': 'GPS', - 'sondehub_position_reference': 'MSI' + 'sondehub_position_reference': 'MSI', + 'enabled': True }, 'M10': { @@ -994,7 +998,8 @@ 'altitude_precision': 2, 'radiosonde_time_reference': 'GPS', 'sondehub_time_reference': 'UTC', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'M20': { @@ -1006,7 +1011,8 @@ 'altitude_precision': 2, 'radiosonde_time_reference': 'GPS', 'sondehub_time_reference': 'GPS', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'MRZ': { @@ -1018,7 +1024,8 @@ 'altitude_precision': 5, 'radiosonde_time_reference': 'UTC', 'sondehub_time_reference': 'UTC', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True }, 'MEISEI': { @@ -1030,6 +1037,7 @@ 'altitude_precision': 1, 'radiosonde_time_reference': 'UTC', 'sondehub_time_reference': 'UTC', - 'sondehub_position_reference': 'GPS' + 'sondehub_position_reference': 'GPS', + 'enabled': True } } diff --git a/SondeHubUploader/telemetryChecks.py b/SondeHubUploader/telemetryChecks.py index f338e67..8913c8b 100644 --- a/SondeHubUploader/telemetryChecks.py +++ b/SondeHubUploader/telemetryChecks.py @@ -62,8 +62,15 @@ def check_time_plausibility(time, difference_seconds): lower_threshold = (datetime.datetime.utcnow() - datetime.timedelta(seconds=difference_seconds)).time() upper_threshold = (datetime.datetime.utcnow() + datetime.timedelta(seconds=difference_seconds)).time() - if lower_threshold <= time <= upper_threshold: - return True + # Check whether a rollover exists within the range + if lower_threshold < upper_threshold: + # When no rollover exists, the time must be within the range + if lower_threshold <= time <= upper_threshold: + return True + else: + # If a rollover exists, the time must be greater than the lower threshold or smaller than the upper threshold + if time > lower_threshold or time < upper_threshold: + return True return False diff --git a/SondeHubUploader/threads.py b/SondeHubUploader/threads.py index 1a2fb9c..5fb732a 100644 --- a/SondeHubUploader/threads.py +++ b/SondeHubUploader/threads.py @@ -40,7 +40,7 @@ def process_input_queue(self): if self.writeo: self.writeData.write_raw_data(self, package) # Mode is set to JSON or package was determined to be JSON - if (self.mode == 0 or self.mode == 1) and self.utils.check_json(self, package): + if (self.mode == 0 or self.mode == 1) and self.utils.check_json(package): # Package is valid JSON valid = True self.loggerObj.debug('Package is JSON') @@ -90,12 +90,23 @@ def process_input_queue(self): # Optionally write the reformatted telemetry if self.writer: self.writeData.write_reformatted_telemetry(self, reformatted_telemetry) - # Store the reformatted telemetry to the upload queue - try: - self.upload_queue.put(reformatted_telemetry, False) - self.loggerObj.debug('Reformatted telemetry put in queue (Serial: %s)', reformatted_telemetry['serial']) - except queue.Full: - self.loggerObj.warning('Upload queue full') + # Go through all possible radiosonde types + for name in self.shuConfig.radiosonde: + # The radiosonde type is compared + if unified_telemetry['type'].startswith(name): + # Check whether uploading for this radiosonde is enabled + if self.shuConfig.radiosonde[name]['enabled']: + self.loggerObj.debug('Uploading for radiosonde type %s is enabled', name) + # Store the reformatted telemetry to the upload queue + try: + self.upload_queue.put(reformatted_telemetry, False) + self.loggerObj.debug('Reformatted telemetry put in queue (Serial: %s)', reformatted_telemetry['serial']) + except queue.Full: + self.loggerObj.warning('Upload queue full') + else: + self.loggerObj.warning('Uploading for radiosonde type %s is disabled', name) + # Break out of for-loop after the first match because only a single match is expected + break else: self.loggerObj.error('Mandatory data check failed (Serial: %s)', unified_telemetry['serial'] if 'serial' in unified_telemetry else 'N/A') diff --git a/SondeHubUploader/utils.py b/SondeHubUploader/utils.py index 36bd5f4..ad7e2f9 100644 --- a/SondeHubUploader/utils.py +++ b/SondeHubUploader/utils.py @@ -10,8 +10,19 @@ import hashlib +# Disable upload for all radiosondes that were not enabled +def disable_radiosondes(self, enabled_radiosondes): + # Go through all possible radiosonde types + for name in self.shuConfig.radiosonde: + # Check whether the name of the radiosonde is within the list of enabled radiosondes + if name not in enabled_radiosondes.split(','): + # Disable uploading for a radiosonde that is not within the list of enabled radiosondes + self.shuConfig.radiosonde[name]['enabled'] = False + return False + + # Check whether data is valid JSON data -def check_json(self, data): +def check_json(data): # Checking whether JSON data is valid is relatively easy by just trying to decode it try: json.loads(data.decode())