From 7585651d766ba850286d318ef3c53459b11e2787 Mon Sep 17 00:00:00 2001 From: Jenkins Date: Tue, 16 Jun 2026 12:05:22 -0500 Subject: [PATCH] Garmin FIT SDK 21.208.0 Change-Id: If0a59b7fa2b9ca41f04e5d12e72abd745388b0de --- garmin_fit_sdk/__init__.py | 6 +- garmin_fit_sdk/accumulator.py | 4 +- garmin_fit_sdk/bitstream.py | 4 +- garmin_fit_sdk/crc_calculator.py | 4 +- garmin_fit_sdk/decoder.py | 28 +- garmin_fit_sdk/encoder.py | 6 +- garmin_fit_sdk/fit.py | 4 +- garmin_fit_sdk/hr_mesg_utils.py | 4 +- garmin_fit_sdk/mesg_definition.py | 4 +- garmin_fit_sdk/output_stream.py | 4 +- garmin_fit_sdk/profile.py | 8812 ++++++++++++++--------------- garmin_fit_sdk/stream.py | 4 +- garmin_fit_sdk/util.py | 4 +- pyproject.toml | 2 +- tests/__init__.py | 2 +- tests/data.py | 8 +- tests/test_decoder.py | 58 + tests/test_encoder.py | 94 +- 18 files changed, 4589 insertions(+), 4463 deletions(-) diff --git a/garmin_fit_sdk/__init__.py b/garmin_fit_sdk/__init__.py index 4bdce4e..b2ece0a 100644 --- a/garmin_fit_sdk/__init__.py +++ b/garmin_fit_sdk/__init__.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ @@ -23,4 +23,4 @@ from garmin_fit_sdk.stream import Stream from garmin_fit_sdk.util import FIT_EPOCH_S, convert_datetime_to_timestamp, convert_timestamp_to_datetime, BASE_TYPE_TO_FIELD_TYPE, FIELD_TYPE_TO_BASE_TYPE -__version__ = '21.205.0' +__version__ = '21.208.0' diff --git a/garmin_fit_sdk/accumulator.py b/garmin_fit_sdk/accumulator.py index 5bb1a43..cfdf503 100644 --- a/garmin_fit_sdk/accumulator.py +++ b/garmin_fit_sdk/accumulator.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/bitstream.py b/garmin_fit_sdk/bitstream.py index 05ba996..b4ed9a9 100644 --- a/garmin_fit_sdk/bitstream.py +++ b/garmin_fit_sdk/bitstream.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/crc_calculator.py b/garmin_fit_sdk/crc_calculator.py index c989e39..fd37572 100644 --- a/garmin_fit_sdk/crc_calculator.py +++ b/garmin_fit_sdk/crc_calculator.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/decoder.py b/garmin_fit_sdk/decoder.py index 0a7cdb1..96ccc72 100644 --- a/garmin_fit_sdk/decoder.py +++ b/garmin_fit_sdk/decoder.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ @@ -361,11 +361,6 @@ def __read_message(self, mesg_def): field_profile = mesg_def['fields'][field_id] if field_id in mesg_def['fields'] else None field_name = field_profile['name'] if field_id in mesg_def['fields'] else field_id - if field_profile is not None and 'has_components' in field_profile: - convert_invalids_to_none = not field_profile['has_components'] - else: - convert_invalids_to_none = True - field_value = None # Fields with strings or string arrays @@ -381,7 +376,7 @@ def __read_message(self, mesg_def): field_value = raw_array if util._only_invalid_values(raw_array, invalid) is False else None else: for i in range(num_elements): - raw_value = raw_values[index + i] if raw_values[index + i] != invalid or not convert_invalids_to_none else None + raw_value = raw_values[index + i] if raw_values[index + i] != invalid else None field_value.append(raw_value) if self.__is_array_all_none(field_value) is True: @@ -389,7 +384,7 @@ def __read_message(self, mesg_def): # Fields with a single value else: - if raw_values[index] != invalid or not convert_invalids_to_none: + if raw_values[index] != invalid: field_value = raw_values[index] if field_value is not None: @@ -469,7 +464,7 @@ def __expand_components(self, mesg_num, message, fields, mesg_def): field_definition_number = field_to_expand['field_definition_number'] field_profile = mesg_def['fields'].get(field_definition_number) - if field_profile is None: + if field_profile is None: continue is_sub_field = field_to_expand.get('is_sub_field') or False @@ -505,7 +500,7 @@ def __expand_components(self, mesg_num, message, fields, mesg_def): value = bitstream.read_bits(field_profile['bits'][i]) - if target_field['is_accumulated'] is True: + if target_field['is_accumulated'] is True: value = self._accumulator.accumulate(mesg_num, target_field['num'], value, field_profile['bits'][i]) # Undo component scale and offset before applying the destination field's scale and offset @@ -571,10 +566,10 @@ def __expand_sub_field(self, message, field_profile): def __get_subfield_profile(self, field_profile, name): return next(sub_field for sub_field in field_profile['sub_fields'] if sub_field['name'] == name) or {} - def __set_accumulated_value(self, mesg_def, message, field, raw_field_value): + def __set_accumulated_value(self, mesg_def, message, field, raw_field_value): raw_field_values = raw_field_value if type(raw_field_value) == list else [raw_field_value] - for value in raw_field_values: + for value in raw_field_values: for containing_field in message.values(): components = mesg_def['fields'].get(field['num'])['components'] for i, component_field_num in enumerate(components): @@ -597,11 +592,10 @@ def __convert_type_to_string(self, field_type, raw_field_value): if isinstance(raw_field_value, list): for i in range(len(raw_field_value)): - key = str(raw_field_value[i]) - field_value[i] = types.get(key, raw_field_value[i]) + field_value[i] = types.get(raw_field_value[i], raw_field_value[i]) return field_value - return types.get(str(raw_field_value), field_value) + return types.get(raw_field_value, field_value) except Exception: return raw_field_value @@ -754,7 +748,7 @@ def __init__(self, stream, decode_mode): self.data_size = data_size return - + self.header_size = stream.read_byte() self.protocol_version = stream.read_byte() self.profile_version = stream.read_unint_16("little") diff --git a/garmin_fit_sdk/encoder.py b/garmin_fit_sdk/encoder.py index b74deef..5635e32 100644 --- a/garmin_fit_sdk/encoder.py +++ b/garmin_fit_sdk/encoder.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ @@ -242,7 +242,7 @@ def _transform_value(self, value, field_definition): profile_type = Profile['types'].get(field_type, {}) for type_key, type_value in profile_type.items(): if type_value == value: - return int(type_key, 0) + return type_key raise ValueError() diff --git a/garmin_fit_sdk/fit.py b/garmin_fit_sdk/fit.py index a305e8d..889d43c 100644 --- a/garmin_fit_sdk/fit.py +++ b/garmin_fit_sdk/fit.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/hr_mesg_utils.py b/garmin_fit_sdk/hr_mesg_utils.py index 2f8a2db..a1cbf62 100644 --- a/garmin_fit_sdk/hr_mesg_utils.py +++ b/garmin_fit_sdk/hr_mesg_utils.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/mesg_definition.py b/garmin_fit_sdk/mesg_definition.py index 8e44c85..8647e85 100644 --- a/garmin_fit_sdk/mesg_definition.py +++ b/garmin_fit_sdk/mesg_definition.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/output_stream.py b/garmin_fit_sdk/output_stream.py index e31bdcb..94c90b6 100644 --- a/garmin_fit_sdk/output_stream.py +++ b/garmin_fit_sdk/output_stream.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/profile.py b/garmin_fit_sdk/profile.py index 842e1d3..a4f66cf 100644 --- a/garmin_fit_sdk/profile.py +++ b/garmin_fit_sdk/profile.py @@ -5,15 +5,15 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ Profile = { 'version': { 'major': 21, - 'minor': 205, + 'minor': 208, 'patch': 0, 'type': "Release" }, @@ -18907,7 +18907,7 @@ 0: { 'num': 0, 'name': "weight", - 'type': "weight", + 'type': "uint16", 'base_type': "uint16", 'array': "false", 'scale': [100], @@ -23394,4806 +23394,4806 @@ }, 'types': { 'file': { - '1': 'device', # Read only, single file. Must be in root directory. - '2': 'settings', # Read/write, single file. Directory=Settings - '3': 'sport', # Read/write, multiple files, file number = sport type. Directory=Sports - '4': 'activity', # Read/erase, multiple files. Directory=Activities - '5': 'workout', # Read/write/erase, multiple files. Directory=Workouts - '6': 'course', # Read/write/erase, multiple files. Directory=Courses - '7': 'schedules', # Read/write, single file. Directory=Schedules - '9': 'weight', # Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight - '10': 'totals', # Read only, single file. Directory=Totals - '11': 'goals', # Read/write, single file. Directory=Goals - '14': 'blood_pressure', # Read only. Directory=Blood Pressure - '15': 'monitoring_a', # Read only. Directory=Monitoring. File number=sub type. - '20': 'activity_summary', # Read/erase, multiple files. Directory=Activities - '28': 'monitoring_daily', - '32': 'monitoring_b', # Read only. Directory=Monitoring. File number=identifier - '34': 'segment', # Read/write/erase. Multiple Files. Directory=Segments - '35': 'segment_list', # Read/write/erase. Single File. Directory=Segments - '40': 'exd_configuration', # Read/write/erase. Single File. Directory=Settings - '0xF7': 'mfg_range_min', # 0xF7 - 0xFE reserved for manufacturer specific file types - '0xFE': 'mfg_range_max', # 0xF7 - 0xFE reserved for manufacturer specific file types + 1: 'device', # Read only, single file. Must be in root directory. + 2: 'settings', # Read/write, single file. Directory=Settings + 3: 'sport', # Read/write, multiple files, file number = sport type. Directory=Sports + 4: 'activity', # Read/erase, multiple files. Directory=Activities + 5: 'workout', # Read/write/erase, multiple files. Directory=Workouts + 6: 'course', # Read/write/erase, multiple files. Directory=Courses + 7: 'schedules', # Read/write, single file. Directory=Schedules + 9: 'weight', # Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight + 10: 'totals', # Read only, single file. Directory=Totals + 11: 'goals', # Read/write, single file. Directory=Goals + 14: 'blood_pressure', # Read only. Directory=Blood Pressure + 15: 'monitoring_a', # Read only. Directory=Monitoring. File number=sub type. + 20: 'activity_summary', # Read/erase, multiple files. Directory=Activities + 28: 'monitoring_daily', + 32: 'monitoring_b', # Read only. Directory=Monitoring. File number=identifier + 34: 'segment', # Read/write/erase. Multiple Files. Directory=Segments + 35: 'segment_list', # Read/write/erase. Single File. Directory=Segments + 40: 'exd_configuration', # Read/write/erase. Single File. Directory=Settings + 0xF7: 'mfg_range_min', # 0xF7 - 0xFE reserved for manufacturer specific file types + 0xFE: 'mfg_range_max', # 0xF7 - 0xFE reserved for manufacturer specific file types }, 'mesg_num': { - '0': 'file_id', - '1': 'capabilities', - '2': 'device_settings', - '3': 'user_profile', - '4': 'hrm_profile', - '5': 'sdm_profile', - '6': 'bike_profile', - '7': 'zones_target', - '8': 'hr_zone', - '9': 'power_zone', - '10': 'met_zone', - '12': 'sport', - '13': 'training_settings', - '15': 'goal', - '18': 'session', - '19': 'lap', - '20': 'record', - '21': 'event', - '23': 'device_info', - '26': 'workout', - '27': 'workout_step', - '28': 'schedule', - '30': 'weight_scale', - '31': 'course', - '32': 'course_point', - '33': 'totals', - '34': 'activity', - '35': 'software', - '37': 'file_capabilities', - '38': 'mesg_capabilities', - '39': 'field_capabilities', - '49': 'file_creator', - '51': 'blood_pressure', - '53': 'speed_zone', - '55': 'monitoring', - '72': 'training_file', - '78': 'hrv', - '80': 'ant_rx', - '81': 'ant_tx', - '82': 'ant_channel_id', - '101': 'length', - '103': 'monitoring_info', - '105': 'pad', - '106': 'slave_device', - '127': 'connectivity', - '128': 'weather_conditions', - '129': 'weather_alert', - '131': 'cadence_zone', - '132': 'hr', - '142': 'segment_lap', - '145': 'memo_glob', - '148': 'segment_id', - '149': 'segment_leaderboard_entry', - '150': 'segment_point', - '151': 'segment_file', - '158': 'workout_session', - '159': 'watchface_settings', - '160': 'gps_metadata', - '161': 'camera_event', - '162': 'timestamp_correlation', - '164': 'gyroscope_data', - '165': 'accelerometer_data', - '167': 'three_d_sensor_calibration', - '169': 'video_frame', - '174': 'obdii_data', - '177': 'nmea_sentence', - '178': 'aviation_attitude', - '184': 'video', - '185': 'video_title', - '186': 'video_description', - '187': 'video_clip', - '188': 'ohr_settings', - '200': 'exd_screen_configuration', - '201': 'exd_data_field_configuration', - '202': 'exd_data_concept_configuration', - '206': 'field_description', - '207': 'developer_data_id', - '208': 'magnetometer_data', - '209': 'barometer_data', - '210': 'one_d_sensor_calibration', - '211': 'monitoring_hr_data', - '216': 'time_in_zone', - '225': 'set', - '227': 'stress_level', - '229': 'max_met_data', - '258': 'dive_settings', - '259': 'dive_gas', - '262': 'dive_alarm', - '264': 'exercise_title', - '268': 'dive_summary', - '269': 'spo2_data', - '275': 'sleep_level', - '285': 'jump', - '289': 'aad_accel_features', - '290': 'beat_intervals', - '297': 'respiration_rate', - '302': 'hsa_accelerometer_data', - '304': 'hsa_step_data', - '305': 'hsa_spo2_data', - '306': 'hsa_stress_data', - '307': 'hsa_respiration_data', - '308': 'hsa_heart_rate_data', - '312': 'split', - '313': 'split_summary', - '314': 'hsa_body_battery_data', - '315': 'hsa_event', - '317': 'climb_pro', - '319': 'tank_update', - '323': 'tank_summary', - '346': 'sleep_assessment', - '370': 'hrv_status_summary', - '371': 'hrv_value', - '372': 'raw_bbi', - '375': 'device_aux_battery_info', - '376': 'hsa_gyroscope_data', - '387': 'chrono_shot_session', - '388': 'chrono_shot_data', - '389': 'hsa_configuration_data', - '393': 'dive_apnea_alarm', - '398': 'skin_temp_overnight', - '409': 'hsa_wrist_temperature_data', # Message number for the HSA wrist temperature data message - '412': 'nap_event', - '470': 'sleep_disruption_severity_period', - '471': 'sleep_disruption_overnight_severity', - '0xFF00': 'mfg_range_min', # 0xFF00 - 0xFFFE reserved for manufacturer specific messages - '0xFFFE': 'mfg_range_max', # 0xFF00 - 0xFFFE reserved for manufacturer specific messages + 0: 'file_id', + 1: 'capabilities', + 2: 'device_settings', + 3: 'user_profile', + 4: 'hrm_profile', + 5: 'sdm_profile', + 6: 'bike_profile', + 7: 'zones_target', + 8: 'hr_zone', + 9: 'power_zone', + 10: 'met_zone', + 12: 'sport', + 13: 'training_settings', + 15: 'goal', + 18: 'session', + 19: 'lap', + 20: 'record', + 21: 'event', + 23: 'device_info', + 26: 'workout', + 27: 'workout_step', + 28: 'schedule', + 30: 'weight_scale', + 31: 'course', + 32: 'course_point', + 33: 'totals', + 34: 'activity', + 35: 'software', + 37: 'file_capabilities', + 38: 'mesg_capabilities', + 39: 'field_capabilities', + 49: 'file_creator', + 51: 'blood_pressure', + 53: 'speed_zone', + 55: 'monitoring', + 72: 'training_file', + 78: 'hrv', + 80: 'ant_rx', + 81: 'ant_tx', + 82: 'ant_channel_id', + 101: 'length', + 103: 'monitoring_info', + 105: 'pad', + 106: 'slave_device', + 127: 'connectivity', + 128: 'weather_conditions', + 129: 'weather_alert', + 131: 'cadence_zone', + 132: 'hr', + 142: 'segment_lap', + 145: 'memo_glob', + 148: 'segment_id', + 149: 'segment_leaderboard_entry', + 150: 'segment_point', + 151: 'segment_file', + 158: 'workout_session', + 159: 'watchface_settings', + 160: 'gps_metadata', + 161: 'camera_event', + 162: 'timestamp_correlation', + 164: 'gyroscope_data', + 165: 'accelerometer_data', + 167: 'three_d_sensor_calibration', + 169: 'video_frame', + 174: 'obdii_data', + 177: 'nmea_sentence', + 178: 'aviation_attitude', + 184: 'video', + 185: 'video_title', + 186: 'video_description', + 187: 'video_clip', + 188: 'ohr_settings', + 200: 'exd_screen_configuration', + 201: 'exd_data_field_configuration', + 202: 'exd_data_concept_configuration', + 206: 'field_description', + 207: 'developer_data_id', + 208: 'magnetometer_data', + 209: 'barometer_data', + 210: 'one_d_sensor_calibration', + 211: 'monitoring_hr_data', + 216: 'time_in_zone', + 225: 'set', + 227: 'stress_level', + 229: 'max_met_data', + 258: 'dive_settings', + 259: 'dive_gas', + 262: 'dive_alarm', + 264: 'exercise_title', + 268: 'dive_summary', + 269: 'spo2_data', + 275: 'sleep_level', + 285: 'jump', + 289: 'aad_accel_features', + 290: 'beat_intervals', + 297: 'respiration_rate', + 302: 'hsa_accelerometer_data', + 304: 'hsa_step_data', + 305: 'hsa_spo2_data', + 306: 'hsa_stress_data', + 307: 'hsa_respiration_data', + 308: 'hsa_heart_rate_data', + 312: 'split', + 313: 'split_summary', + 314: 'hsa_body_battery_data', + 315: 'hsa_event', + 317: 'climb_pro', + 319: 'tank_update', + 323: 'tank_summary', + 346: 'sleep_assessment', + 370: 'hrv_status_summary', + 371: 'hrv_value', + 372: 'raw_bbi', + 375: 'device_aux_battery_info', + 376: 'hsa_gyroscope_data', + 387: 'chrono_shot_session', + 388: 'chrono_shot_data', + 389: 'hsa_configuration_data', + 393: 'dive_apnea_alarm', + 398: 'skin_temp_overnight', + 409: 'hsa_wrist_temperature_data', # Message number for the HSA wrist temperature data message + 412: 'nap_event', + 470: 'sleep_disruption_severity_period', + 471: 'sleep_disruption_overnight_severity', + 0xFF00: 'mfg_range_min', # 0xFF00 - 0xFFFE reserved for manufacturer specific messages + 0xFFFE: 'mfg_range_max', # 0xFF00 - 0xFFFE reserved for manufacturer specific messages }, 'checksum': { - '0': 'clear', # Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector. - '1': 'ok', # Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time. + 0: 'clear', # Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector. + 1: 'ok', # Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time. }, 'file_flags': { - '0x02': 'read', - '0x04': 'write', - '0x08': 'erase', + 0x02: 'read', + 0x04: 'write', + 0x08: 'erase', }, 'mesg_count': { - '0': 'num_per_file', - '1': 'max_per_file', - '2': 'max_per_file_type', + 0: 'num_per_file', + 1: 'max_per_file', + 2: 'max_per_file_type', }, 'date_time': { - '0x10000000': 'min', # if date_time is < 0x10000000 then it is system time (seconds from device power on) + 0x10000000: 'min', # if date_time is < 0x10000000 then it is system time (seconds from device power on) }, 'local_date_time': { - '0x10000000': 'min', # if date_time is < 0x10000000 then it is system time (seconds from device power on) + 0x10000000: 'min', # if date_time is < 0x10000000 then it is system time (seconds from device power on) }, 'message_index': { - '0x8000': 'selected', # message is selected if set - '0x7000': 'reserved', # reserved (default 0) - '0x0FFF': 'mask', # index + 0x8000: 'selected', # message is selected if set + 0x7000: 'reserved', # reserved (default 0) + 0x0FFF: 'mask', # index }, 'device_index': { - '0': 'creator', # Creator of the file is always device index 0. + 0: 'creator', # Creator of the file is always device index 0. }, 'gender': { - '0': 'female', - '1': 'male', + 0: 'female', + 1: 'male', }, 'language': { - '0': 'english', - '1': 'french', - '2': 'italian', - '3': 'german', - '4': 'spanish', - '5': 'croatian', - '6': 'czech', - '7': 'danish', - '8': 'dutch', - '9': 'finnish', - '10': 'greek', - '11': 'hungarian', - '12': 'norwegian', - '13': 'polish', - '14': 'portuguese', - '15': 'slovakian', - '16': 'slovenian', - '17': 'swedish', - '18': 'russian', - '19': 'turkish', - '20': 'latvian', - '21': 'ukrainian', - '22': 'arabic', - '23': 'farsi', - '24': 'bulgarian', - '25': 'romanian', - '26': 'chinese', - '27': 'japanese', - '28': 'korean', - '29': 'taiwanese', - '30': 'thai', - '31': 'hebrew', - '32': 'brazilian_portuguese', - '33': 'indonesian', - '34': 'malaysian', - '35': 'vietnamese', - '36': 'burmese', - '37': 'mongolian', - '254': 'custom', + 0: 'english', + 1: 'french', + 2: 'italian', + 3: 'german', + 4: 'spanish', + 5: 'croatian', + 6: 'czech', + 7: 'danish', + 8: 'dutch', + 9: 'finnish', + 10: 'greek', + 11: 'hungarian', + 12: 'norwegian', + 13: 'polish', + 14: 'portuguese', + 15: 'slovakian', + 16: 'slovenian', + 17: 'swedish', + 18: 'russian', + 19: 'turkish', + 20: 'latvian', + 21: 'ukrainian', + 22: 'arabic', + 23: 'farsi', + 24: 'bulgarian', + 25: 'romanian', + 26: 'chinese', + 27: 'japanese', + 28: 'korean', + 29: 'taiwanese', + 30: 'thai', + 31: 'hebrew', + 32: 'brazilian_portuguese', + 33: 'indonesian', + 34: 'malaysian', + 35: 'vietnamese', + 36: 'burmese', + 37: 'mongolian', + 254: 'custom', }, 'language_bits_0': { - '0x01': 'english', - '0x02': 'french', - '0x04': 'italian', - '0x08': 'german', - '0x10': 'spanish', - '0x20': 'croatian', - '0x40': 'czech', - '0x80': 'danish', + 0x01: 'english', + 0x02: 'french', + 0x04: 'italian', + 0x08: 'german', + 0x10: 'spanish', + 0x20: 'croatian', + 0x40: 'czech', + 0x80: 'danish', }, 'language_bits_1': { - '0x01': 'dutch', - '0x02': 'finnish', - '0x04': 'greek', - '0x08': 'hungarian', - '0x10': 'norwegian', - '0x20': 'polish', - '0x40': 'portuguese', - '0x80': 'slovakian', + 0x01: 'dutch', + 0x02: 'finnish', + 0x04: 'greek', + 0x08: 'hungarian', + 0x10: 'norwegian', + 0x20: 'polish', + 0x40: 'portuguese', + 0x80: 'slovakian', }, 'language_bits_2': { - '0x01': 'slovenian', - '0x02': 'swedish', - '0x04': 'russian', - '0x08': 'turkish', - '0x10': 'latvian', - '0x20': 'ukrainian', - '0x40': 'arabic', - '0x80': 'farsi', + 0x01: 'slovenian', + 0x02: 'swedish', + 0x04: 'russian', + 0x08: 'turkish', + 0x10: 'latvian', + 0x20: 'ukrainian', + 0x40: 'arabic', + 0x80: 'farsi', }, 'language_bits_3': { - '0x01': 'bulgarian', - '0x02': 'romanian', - '0x04': 'chinese', - '0x08': 'japanese', - '0x10': 'korean', - '0x20': 'taiwanese', - '0x40': 'thai', - '0x80': 'hebrew', + 0x01: 'bulgarian', + 0x02: 'romanian', + 0x04: 'chinese', + 0x08: 'japanese', + 0x10: 'korean', + 0x20: 'taiwanese', + 0x40: 'thai', + 0x80: 'hebrew', }, 'language_bits_4': { - '0x01': 'brazilian_portuguese', - '0x02': 'indonesian', - '0x04': 'malaysian', - '0x08': 'vietnamese', - '0x10': 'burmese', - '0x20': 'mongolian', + 0x01: 'brazilian_portuguese', + 0x02: 'indonesian', + 0x04: 'malaysian', + 0x08: 'vietnamese', + 0x10: 'burmese', + 0x20: 'mongolian', }, 'time_zone': { - '0': 'almaty', - '1': 'bangkok', - '2': 'bombay', - '3': 'brasilia', - '4': 'cairo', - '5': 'cape_verde_is', - '6': 'darwin', - '7': 'eniwetok', - '8': 'fiji', - '9': 'hong_kong', - '10': 'islamabad', - '11': 'kabul', - '12': 'magadan', - '13': 'mid_atlantic', - '14': 'moscow', - '15': 'muscat', - '16': 'newfoundland', - '17': 'samoa', - '18': 'sydney', - '19': 'tehran', - '20': 'tokyo', - '21': 'us_alaska', - '22': 'us_atlantic', - '23': 'us_central', - '24': 'us_eastern', - '25': 'us_hawaii', - '26': 'us_mountain', - '27': 'us_pacific', - '28': 'other', - '29': 'auckland', - '30': 'kathmandu', - '31': 'europe_western_wet', - '32': 'europe_central_cet', - '33': 'europe_eastern_eet', - '34': 'jakarta', - '35': 'perth', - '36': 'adelaide', - '37': 'brisbane', - '38': 'tasmania', - '39': 'iceland', - '40': 'amsterdam', - '41': 'athens', - '42': 'barcelona', - '43': 'berlin', - '44': 'brussels', - '45': 'budapest', - '46': 'copenhagen', - '47': 'dublin', - '48': 'helsinki', - '49': 'lisbon', - '50': 'london', - '51': 'madrid', - '52': 'munich', - '53': 'oslo', - '54': 'paris', - '55': 'prague', - '56': 'reykjavik', - '57': 'rome', - '58': 'stockholm', - '59': 'vienna', - '60': 'warsaw', - '61': 'zurich', - '62': 'quebec', - '63': 'ontario', - '64': 'manitoba', - '65': 'saskatchewan', - '66': 'alberta', - '67': 'british_columbia', - '68': 'boise', - '69': 'boston', - '70': 'chicago', - '71': 'dallas', - '72': 'denver', - '73': 'kansas_city', - '74': 'las_vegas', - '75': 'los_angeles', - '76': 'miami', - '77': 'minneapolis', - '78': 'new_york', - '79': 'new_orleans', - '80': 'phoenix', - '81': 'santa_fe', - '82': 'seattle', - '83': 'washington_dc', - '84': 'us_arizona', - '85': 'chita', - '86': 'ekaterinburg', - '87': 'irkutsk', - '88': 'kaliningrad', - '89': 'krasnoyarsk', - '90': 'novosibirsk', - '91': 'petropavlovsk_kamchatskiy', - '92': 'samara', - '93': 'vladivostok', - '94': 'mexico_central', - '95': 'mexico_mountain', - '96': 'mexico_pacific', - '97': 'cape_town', - '98': 'winkhoek', - '99': 'lagos', - '100': 'riyahd', - '101': 'venezuela', - '102': 'australia_lh', - '103': 'santiago', - '253': 'manual', - '254': 'automatic', + 0: 'almaty', + 1: 'bangkok', + 2: 'bombay', + 3: 'brasilia', + 4: 'cairo', + 5: 'cape_verde_is', + 6: 'darwin', + 7: 'eniwetok', + 8: 'fiji', + 9: 'hong_kong', + 10: 'islamabad', + 11: 'kabul', + 12: 'magadan', + 13: 'mid_atlantic', + 14: 'moscow', + 15: 'muscat', + 16: 'newfoundland', + 17: 'samoa', + 18: 'sydney', + 19: 'tehran', + 20: 'tokyo', + 21: 'us_alaska', + 22: 'us_atlantic', + 23: 'us_central', + 24: 'us_eastern', + 25: 'us_hawaii', + 26: 'us_mountain', + 27: 'us_pacific', + 28: 'other', + 29: 'auckland', + 30: 'kathmandu', + 31: 'europe_western_wet', + 32: 'europe_central_cet', + 33: 'europe_eastern_eet', + 34: 'jakarta', + 35: 'perth', + 36: 'adelaide', + 37: 'brisbane', + 38: 'tasmania', + 39: 'iceland', + 40: 'amsterdam', + 41: 'athens', + 42: 'barcelona', + 43: 'berlin', + 44: 'brussels', + 45: 'budapest', + 46: 'copenhagen', + 47: 'dublin', + 48: 'helsinki', + 49: 'lisbon', + 50: 'london', + 51: 'madrid', + 52: 'munich', + 53: 'oslo', + 54: 'paris', + 55: 'prague', + 56: 'reykjavik', + 57: 'rome', + 58: 'stockholm', + 59: 'vienna', + 60: 'warsaw', + 61: 'zurich', + 62: 'quebec', + 63: 'ontario', + 64: 'manitoba', + 65: 'saskatchewan', + 66: 'alberta', + 67: 'british_columbia', + 68: 'boise', + 69: 'boston', + 70: 'chicago', + 71: 'dallas', + 72: 'denver', + 73: 'kansas_city', + 74: 'las_vegas', + 75: 'los_angeles', + 76: 'miami', + 77: 'minneapolis', + 78: 'new_york', + 79: 'new_orleans', + 80: 'phoenix', + 81: 'santa_fe', + 82: 'seattle', + 83: 'washington_dc', + 84: 'us_arizona', + 85: 'chita', + 86: 'ekaterinburg', + 87: 'irkutsk', + 88: 'kaliningrad', + 89: 'krasnoyarsk', + 90: 'novosibirsk', + 91: 'petropavlovsk_kamchatskiy', + 92: 'samara', + 93: 'vladivostok', + 94: 'mexico_central', + 95: 'mexico_mountain', + 96: 'mexico_pacific', + 97: 'cape_town', + 98: 'winkhoek', + 99: 'lagos', + 100: 'riyahd', + 101: 'venezuela', + 102: 'australia_lh', + 103: 'santiago', + 253: 'manual', + 254: 'automatic', }, 'display_measure': { - '0': 'metric', - '1': 'statute', - '2': 'nautical', + 0: 'metric', + 1: 'statute', + 2: 'nautical', }, 'display_heart': { - '0': 'bpm', - '1': 'max', - '2': 'reserve', + 0: 'bpm', + 1: 'max', + 2: 'reserve', }, 'display_power': { - '0': 'watts', - '1': 'percent_ftp', + 0: 'watts', + 1: 'percent_ftp', }, 'display_position': { - '0': 'degree', # dd.dddddd - '1': 'degree_minute', # dddmm.mmm - '2': 'degree_minute_second', # dddmmss - '3': 'austrian_grid', # Austrian Grid (BMN) - '4': 'british_grid', # British National Grid - '5': 'dutch_grid', # Dutch grid system - '6': 'hungarian_grid', # Hungarian grid system - '7': 'finnish_grid', # Finnish grid system Zone3 KKJ27 - '8': 'german_grid', # Gausss Krueger (German) - '9': 'icelandic_grid', # Icelandic Grid - '10': 'indonesian_equatorial', # Indonesian Equatorial LCO - '11': 'indonesian_irian', # Indonesian Irian LCO - '12': 'indonesian_southern', # Indonesian Southern LCO - '13': 'india_zone_0', # India zone 0 - '14': 'india_zone_IA', # India zone IA - '15': 'india_zone_IB', # India zone IB - '16': 'india_zone_IIA', # India zone IIA - '17': 'india_zone_IIB', # India zone IIB - '18': 'india_zone_IIIA', # India zone IIIA - '19': 'india_zone_IIIB', # India zone IIIB - '20': 'india_zone_IVA', # India zone IVA - '21': 'india_zone_IVB', # India zone IVB - '22': 'irish_transverse', # Irish Transverse Mercator - '23': 'irish_grid', # Irish Grid - '24': 'loran', # Loran TD - '25': 'maidenhead_grid', # Maidenhead grid system - '26': 'mgrs_grid', # MGRS grid system - '27': 'new_zealand_grid', # New Zealand grid system - '28': 'new_zealand_transverse', # New Zealand Transverse Mercator - '29': 'qatar_grid', # Qatar National Grid - '30': 'modified_swedish_grid', # Modified RT-90 (Sweden) - '31': 'swedish_grid', # RT-90 (Sweden) - '32': 'south_african_grid', # South African Grid - '33': 'swiss_grid', # Swiss CH-1903 grid - '34': 'taiwan_grid', # Taiwan Grid - '35': 'united_states_grid', # United States National Grid - '36': 'utm_ups_grid', # UTM/UPS grid system - '37': 'west_malayan', # West Malayan RSO - '38': 'borneo_rso', # Borneo RSO - '39': 'estonian_grid', # Estonian grid system - '40': 'latvian_grid', # Latvian Transverse Mercator - '41': 'swedish_ref_99_grid', # Reference Grid 99 TM (Swedish) + 0: 'degree', # dd.dddddd + 1: 'degree_minute', # dddmm.mmm + 2: 'degree_minute_second', # dddmmss + 3: 'austrian_grid', # Austrian Grid (BMN) + 4: 'british_grid', # British National Grid + 5: 'dutch_grid', # Dutch grid system + 6: 'hungarian_grid', # Hungarian grid system + 7: 'finnish_grid', # Finnish grid system Zone3 KKJ27 + 8: 'german_grid', # Gausss Krueger (German) + 9: 'icelandic_grid', # Icelandic Grid + 10: 'indonesian_equatorial', # Indonesian Equatorial LCO + 11: 'indonesian_irian', # Indonesian Irian LCO + 12: 'indonesian_southern', # Indonesian Southern LCO + 13: 'india_zone_0', # India zone 0 + 14: 'india_zone_IA', # India zone IA + 15: 'india_zone_IB', # India zone IB + 16: 'india_zone_IIA', # India zone IIA + 17: 'india_zone_IIB', # India zone IIB + 18: 'india_zone_IIIA', # India zone IIIA + 19: 'india_zone_IIIB', # India zone IIIB + 20: 'india_zone_IVA', # India zone IVA + 21: 'india_zone_IVB', # India zone IVB + 22: 'irish_transverse', # Irish Transverse Mercator + 23: 'irish_grid', # Irish Grid + 24: 'loran', # Loran TD + 25: 'maidenhead_grid', # Maidenhead grid system + 26: 'mgrs_grid', # MGRS grid system + 27: 'new_zealand_grid', # New Zealand grid system + 28: 'new_zealand_transverse', # New Zealand Transverse Mercator + 29: 'qatar_grid', # Qatar National Grid + 30: 'modified_swedish_grid', # Modified RT-90 (Sweden) + 31: 'swedish_grid', # RT-90 (Sweden) + 32: 'south_african_grid', # South African Grid + 33: 'swiss_grid', # Swiss CH-1903 grid + 34: 'taiwan_grid', # Taiwan Grid + 35: 'united_states_grid', # United States National Grid + 36: 'utm_ups_grid', # UTM/UPS grid system + 37: 'west_malayan', # West Malayan RSO + 38: 'borneo_rso', # Borneo RSO + 39: 'estonian_grid', # Estonian grid system + 40: 'latvian_grid', # Latvian Transverse Mercator + 41: 'swedish_ref_99_grid', # Reference Grid 99 TM (Swedish) }, 'switch': { - '0': 'off', - '1': 'on', - '2': 'auto', + 0: 'off', + 1: 'on', + 2: 'auto', }, 'sport': { - '0': 'generic', - '1': 'running', - '2': 'cycling', - '3': 'transition', # Mulitsport transition - '4': 'fitness_equipment', - '5': 'swimming', - '6': 'basketball', - '7': 'soccer', - '8': 'tennis', - '9': 'american_football', - '10': 'training', - '11': 'walking', - '12': 'cross_country_skiing', - '13': 'alpine_skiing', - '14': 'snowboarding', - '15': 'rowing', - '16': 'mountaineering', - '17': 'hiking', - '18': 'multisport', - '19': 'paddling', - '20': 'flying', - '21': 'e_biking', - '22': 'motorcycling', - '23': 'boating', - '24': 'driving', - '25': 'golf', - '26': 'hang_gliding', - '27': 'horseback_riding', - '28': 'hunting', - '29': 'fishing', - '30': 'inline_skating', - '31': 'rock_climbing', - '32': 'sailing', - '33': 'ice_skating', - '34': 'sky_diving', - '35': 'snowshoeing', - '36': 'snowmobiling', - '37': 'stand_up_paddleboarding', - '38': 'surfing', - '39': 'wakeboarding', - '40': 'water_skiing', - '41': 'kayaking', - '42': 'rafting', - '43': 'windsurfing', - '44': 'kitesurfing', - '45': 'tactical', - '46': 'jumpmaster', - '47': 'boxing', - '48': 'floor_climbing', - '49': 'baseball', - '53': 'diving', - '56': 'shooting', # Sport Shooting bits, set here for sport_bits alignment - '58': 'winter_sport', - '59': 'grinding', # Sailing position, operating manual winches to power boat controls - '62': 'hiit', - '63': 'video_gaming', - '64': 'racket', - '65': 'wheelchair_push_walk', - '66': 'wheelchair_push_run', - '67': 'meditation', - '68': 'para_sport', - '69': 'disc_golf', - '70': 'team_sport', - '71': 'cricket', - '72': 'rugby', - '73': 'hockey', - '74': 'lacrosse', - '75': 'volleyball', - '76': 'water_tubing', - '77': 'wakesurfing', - '78': 'water_sport', - '79': 'archery', - '80': 'mixed_martial_arts', - '81': 'motor_sports', - '82': 'snorkeling', - '83': 'dance', - '84': 'jump_rope', - '85': 'pool_apnea', - '86': 'mobility', - '87': 'geocaching', - '88': 'canoeing', - '254': 'all', # All is for goals only to include all sports. + 0: 'generic', + 1: 'running', + 2: 'cycling', + 3: 'transition', # Mulitsport transition + 4: 'fitness_equipment', + 5: 'swimming', + 6: 'basketball', + 7: 'soccer', + 8: 'tennis', + 9: 'american_football', + 10: 'training', + 11: 'walking', + 12: 'cross_country_skiing', + 13: 'alpine_skiing', + 14: 'snowboarding', + 15: 'rowing', + 16: 'mountaineering', + 17: 'hiking', + 18: 'multisport', + 19: 'paddling', + 20: 'flying', + 21: 'e_biking', + 22: 'motorcycling', + 23: 'boating', + 24: 'driving', + 25: 'golf', + 26: 'hang_gliding', + 27: 'horseback_riding', + 28: 'hunting', + 29: 'fishing', + 30: 'inline_skating', + 31: 'rock_climbing', + 32: 'sailing', + 33: 'ice_skating', + 34: 'sky_diving', + 35: 'snowshoeing', + 36: 'snowmobiling', + 37: 'stand_up_paddleboarding', + 38: 'surfing', + 39: 'wakeboarding', + 40: 'water_skiing', + 41: 'kayaking', + 42: 'rafting', + 43: 'windsurfing', + 44: 'kitesurfing', + 45: 'tactical', + 46: 'jumpmaster', + 47: 'boxing', + 48: 'floor_climbing', + 49: 'baseball', + 53: 'diving', + 56: 'shooting', # Sport Shooting bits, set here for sport_bits alignment + 58: 'winter_sport', + 59: 'grinding', # Sailing position, operating manual winches to power boat controls + 62: 'hiit', + 63: 'video_gaming', + 64: 'racket', + 65: 'wheelchair_push_walk', + 66: 'wheelchair_push_run', + 67: 'meditation', + 68: 'para_sport', + 69: 'disc_golf', + 70: 'team_sport', + 71: 'cricket', + 72: 'rugby', + 73: 'hockey', + 74: 'lacrosse', + 75: 'volleyball', + 76: 'water_tubing', + 77: 'wakesurfing', + 78: 'water_sport', + 79: 'archery', + 80: 'mixed_martial_arts', + 81: 'motor_sports', + 82: 'snorkeling', + 83: 'dance', + 84: 'jump_rope', + 85: 'pool_apnea', + 86: 'mobility', + 87: 'geocaching', + 88: 'canoeing', + 254: 'all', # All is for goals only to include all sports. }, 'sport_bits_0': { - '0x01': 'generic', - '0x02': 'running', - '0x04': 'cycling', - '0x08': 'transition', # Mulitsport transition - '0x10': 'fitness_equipment', - '0x20': 'swimming', - '0x40': 'basketball', - '0x80': 'soccer', + 0x01: 'generic', + 0x02: 'running', + 0x04: 'cycling', + 0x08: 'transition', # Mulitsport transition + 0x10: 'fitness_equipment', + 0x20: 'swimming', + 0x40: 'basketball', + 0x80: 'soccer', }, 'sport_bits_1': { - '0x01': 'tennis', - '0x02': 'american_football', - '0x04': 'training', - '0x08': 'walking', - '0x10': 'cross_country_skiing', - '0x20': 'alpine_skiing', - '0x40': 'snowboarding', - '0x80': 'rowing', + 0x01: 'tennis', + 0x02: 'american_football', + 0x04: 'training', + 0x08: 'walking', + 0x10: 'cross_country_skiing', + 0x20: 'alpine_skiing', + 0x40: 'snowboarding', + 0x80: 'rowing', }, 'sport_bits_2': { - '0x01': 'mountaineering', - '0x02': 'hiking', - '0x04': 'multisport', - '0x08': 'paddling', - '0x10': 'flying', - '0x20': 'e_biking', - '0x40': 'motorcycling', - '0x80': 'boating', + 0x01: 'mountaineering', + 0x02: 'hiking', + 0x04: 'multisport', + 0x08: 'paddling', + 0x10: 'flying', + 0x20: 'e_biking', + 0x40: 'motorcycling', + 0x80: 'boating', }, 'sport_bits_3': { - '0x01': 'driving', - '0x02': 'golf', - '0x04': 'hang_gliding', - '0x08': 'horseback_riding', - '0x10': 'hunting', - '0x20': 'fishing', - '0x40': 'inline_skating', - '0x80': 'rock_climbing', + 0x01: 'driving', + 0x02: 'golf', + 0x04: 'hang_gliding', + 0x08: 'horseback_riding', + 0x10: 'hunting', + 0x20: 'fishing', + 0x40: 'inline_skating', + 0x80: 'rock_climbing', }, 'sport_bits_4': { - '0x01': 'sailing', - '0x02': 'ice_skating', - '0x04': 'sky_diving', - '0x08': 'snowshoeing', - '0x10': 'snowmobiling', - '0x20': 'stand_up_paddleboarding', - '0x40': 'surfing', - '0x80': 'wakeboarding', + 0x01: 'sailing', + 0x02: 'ice_skating', + 0x04: 'sky_diving', + 0x08: 'snowshoeing', + 0x10: 'snowmobiling', + 0x20: 'stand_up_paddleboarding', + 0x40: 'surfing', + 0x80: 'wakeboarding', }, 'sport_bits_5': { - '0x01': 'water_skiing', - '0x02': 'kayaking', - '0x04': 'rafting', - '0x08': 'windsurfing', - '0x10': 'kitesurfing', - '0x20': 'tactical', - '0x40': 'jumpmaster', - '0x80': 'boxing', + 0x01: 'water_skiing', + 0x02: 'kayaking', + 0x04: 'rafting', + 0x08: 'windsurfing', + 0x10: 'kitesurfing', + 0x20: 'tactical', + 0x40: 'jumpmaster', + 0x80: 'boxing', }, 'sport_bits_6': { - '0x01': 'floor_climbing', + 0x01: 'floor_climbing', }, 'sub_sport': { - '0': 'generic', - '1': 'treadmill', # Run/Fitness Equipment - '2': 'street', # Run - '3': 'trail', # Run - '4': 'track', # Run - '5': 'spin', # Cycling - '6': 'indoor_cycling', # Cycling/Fitness Equipment - '7': 'road', # Cycling - '8': 'mountain', # Cycling - '9': 'downhill', # Cycling - '10': 'recumbent', # Cycling - '11': 'cyclocross', # Cycling - '12': 'hand_cycling', # Cycling - '13': 'track_cycling', # Cycling - '14': 'indoor_rowing', # Fitness Equipment - '15': 'elliptical', # Fitness Equipment - '16': 'stair_climbing', # Fitness Equipment - '17': 'lap_swimming', # Swimming - '18': 'open_water', # Swimming - '19': 'flexibility_training', # Training - '20': 'strength_training', # Training - '21': 'warm_up', # Tennis - '22': 'match', # Tennis - '23': 'exercise', # Tennis - '24': 'challenge', - '25': 'indoor_skiing', # Fitness Equipment - '26': 'cardio_training', # Training - '27': 'indoor_walking', # Walking/Fitness Equipment - '28': 'e_bike_fitness', # E-Biking - '29': 'bmx', # Cycling - '30': 'casual_walking', # Walking - '31': 'speed_walking', # Walking - '32': 'bike_to_run_transition', # Transition - '33': 'run_to_bike_transition', # Transition - '34': 'swim_to_bike_transition', # Transition - '35': 'atv', # Motorcycling - '36': 'motocross', # Motorcycling - '37': 'backcountry', # Alpine Skiing/Snowboarding - '38': 'resort', # Alpine Skiing/Snowboarding - '39': 'rc_drone', # Flying - '40': 'wingsuit', # Flying - '41': 'whitewater', # Kayaking/Rafting - '42': 'skate_skiing', # Cross Country Skiing - '43': 'yoga', # Training - '44': 'pilates', # Fitness Equipment - '45': 'indoor_running', # Run - '46': 'gravel_cycling', # Cycling - '47': 'e_bike_mountain', # Cycling - '48': 'commuting', # Cycling - '49': 'mixed_surface', # Cycling - '50': 'navigate', - '51': 'track_me', - '52': 'map', - '53': 'single_gas_diving', # Diving - '54': 'multi_gas_diving', # Diving - '55': 'gauge_diving', # Diving - '56': 'apnea_diving', # Diving - '57': 'apnea_hunting', # Diving - '58': 'virtual_activity', - '59': 'obstacle', # Used for events where participants run, crawl through mud, climb over walls, etc. - '62': 'breathing', - '63': 'ccr_diving', # Diving w/ closed circuit rebreather - '65': 'sail_race', # Sailing - '66': 'expedition', # Generic - '67': 'ultra', # Ultramarathon - '68': 'indoor_climbing', # Climbing - '69': 'bouldering', # Climbing - '70': 'hiit', # High Intensity Interval Training - '71': 'indoor_grinding', # Sailing position, operating manual winches to power boat controls - '72': 'hunting_with_dogs', # Hunting - '73': 'amrap', # HIIT - '74': 'emom', # HIIT - '75': 'tabata', # HIIT - '77': 'esport', # Video Gaming, Cycling, etc. - '78': 'triathlon', # Multisport - '79': 'duathlon', # Multisport - '80': 'brick', # Multisport - '81': 'swim_run', # Multisport - '82': 'adventure_race', # Multisport - '83': 'trucker_workout', # DEZL trucker workout training sport - '84': 'pickleball', # Racket - '85': 'padel', # Racket - '86': 'indoor_wheelchair_walk', - '87': 'indoor_wheelchair_run', - '88': 'indoor_hand_cycling', - '90': 'field', # Hockey - '91': 'ice', # Hockey - '92': 'ultimate', # Disc - '93': 'platform', # Racket - '94': 'squash', # Racket - '95': 'badminton', # Racket - '96': 'racquetball', # Racket - '97': 'table_tennis', # Racket - '98': 'overland', - '99': 'trolling_motor', # Generic - '110': 'fly_canopy', # Flying - '111': 'fly_paraglide', # Flying - '112': 'fly_paramotor', # Flying - '113': 'fly_pressurized', # Flying - '114': 'fly_navigate', # Flying - '115': 'fly_timer', # Flying - '116': 'fly_altimeter', # Flying - '117': 'fly_wx', # Flying - '118': 'fly_vfr', # Flying - '119': 'fly_ifr', # Flying - '121': 'dynamic_apnea', - '123': 'enduro', # Cycling - '124': 'rucking', # Hiking - '125': 'rally', # Motor sports - '126': 'pool_triathlon', # Multisport - '127': 'e_bike_enduro', # Cycling - '254': 'all', + 0: 'generic', + 1: 'treadmill', # Run/Fitness Equipment + 2: 'street', # Run + 3: 'trail', # Run + 4: 'track', # Run + 5: 'spin', # Cycling + 6: 'indoor_cycling', # Cycling/Fitness Equipment + 7: 'road', # Cycling + 8: 'mountain', # Cycling + 9: 'downhill', # Cycling + 10: 'recumbent', # Cycling + 11: 'cyclocross', # Cycling + 12: 'hand_cycling', # Cycling + 13: 'track_cycling', # Cycling + 14: 'indoor_rowing', # Fitness Equipment + 15: 'elliptical', # Fitness Equipment + 16: 'stair_climbing', # Fitness Equipment + 17: 'lap_swimming', # Swimming + 18: 'open_water', # Swimming + 19: 'flexibility_training', # Training + 20: 'strength_training', # Training + 21: 'warm_up', # Tennis + 22: 'match', # Tennis + 23: 'exercise', # Tennis + 24: 'challenge', + 25: 'indoor_skiing', # Fitness Equipment + 26: 'cardio_training', # Training + 27: 'indoor_walking', # Walking/Fitness Equipment + 28: 'e_bike_fitness', # E-Biking + 29: 'bmx', # Cycling + 30: 'casual_walking', # Walking + 31: 'speed_walking', # Walking + 32: 'bike_to_run_transition', # Transition + 33: 'run_to_bike_transition', # Transition + 34: 'swim_to_bike_transition', # Transition + 35: 'atv', # Motorcycling + 36: 'motocross', # Motorcycling + 37: 'backcountry', # Alpine Skiing/Snowboarding + 38: 'resort', # Alpine Skiing/Snowboarding + 39: 'rc_drone', # Flying + 40: 'wingsuit', # Flying + 41: 'whitewater', # Kayaking/Rafting + 42: 'skate_skiing', # Cross Country Skiing + 43: 'yoga', # Training + 44: 'pilates', # Fitness Equipment + 45: 'indoor_running', # Run + 46: 'gravel_cycling', # Cycling + 47: 'e_bike_mountain', # Cycling + 48: 'commuting', # Cycling + 49: 'mixed_surface', # Cycling + 50: 'navigate', + 51: 'track_me', + 52: 'map', + 53: 'single_gas_diving', # Diving + 54: 'multi_gas_diving', # Diving + 55: 'gauge_diving', # Diving + 56: 'apnea_diving', # Diving + 57: 'apnea_hunting', # Diving + 58: 'virtual_activity', + 59: 'obstacle', # Used for events where participants run, crawl through mud, climb over walls, etc. + 62: 'breathing', + 63: 'ccr_diving', # Diving w/ closed circuit rebreather + 65: 'sail_race', # Sailing + 66: 'expedition', # Generic + 67: 'ultra', # Ultramarathon + 68: 'indoor_climbing', # Climbing + 69: 'bouldering', # Climbing + 70: 'hiit', # High Intensity Interval Training + 71: 'indoor_grinding', # Sailing position, operating manual winches to power boat controls + 72: 'hunting_with_dogs', # Hunting + 73: 'amrap', # HIIT + 74: 'emom', # HIIT + 75: 'tabata', # HIIT + 77: 'esport', # Video Gaming, Cycling, etc. + 78: 'triathlon', # Multisport + 79: 'duathlon', # Multisport + 80: 'brick', # Multisport + 81: 'swim_run', # Multisport + 82: 'adventure_race', # Multisport + 83: 'trucker_workout', # DEZL trucker workout training sport + 84: 'pickleball', # Racket + 85: 'padel', # Racket + 86: 'indoor_wheelchair_walk', + 87: 'indoor_wheelchair_run', + 88: 'indoor_hand_cycling', + 90: 'field', # Hockey + 91: 'ice', # Hockey + 92: 'ultimate', # Disc + 93: 'platform', # Racket + 94: 'squash', # Racket + 95: 'badminton', # Racket + 96: 'racquetball', # Racket + 97: 'table_tennis', # Racket + 98: 'overland', + 99: 'trolling_motor', # Generic + 110: 'fly_canopy', # Flying + 111: 'fly_paraglide', # Flying + 112: 'fly_paramotor', # Flying + 113: 'fly_pressurized', # Flying + 114: 'fly_navigate', # Flying + 115: 'fly_timer', # Flying + 116: 'fly_altimeter', # Flying + 117: 'fly_wx', # Flying + 118: 'fly_vfr', # Flying + 119: 'fly_ifr', # Flying + 121: 'dynamic_apnea', + 123: 'enduro', # Cycling + 124: 'rucking', # Hiking + 125: 'rally', # Motor sports + 126: 'pool_triathlon', # Multisport + 127: 'e_bike_enduro', # Cycling + 254: 'all', }, 'sport_event': { - '0': 'uncategorized', - '1': 'geocaching', - '2': 'fitness', - '3': 'recreation', - '4': 'race', - '5': 'special_event', - '6': 'training', - '7': 'transportation', - '8': 'touring', + 0: 'uncategorized', + 1: 'geocaching', + 2: 'fitness', + 3: 'recreation', + 4: 'race', + 5: 'special_event', + 6: 'training', + 7: 'transportation', + 8: 'touring', }, 'activity': { - '0': 'manual', - '1': 'auto_multi_sport', + 0: 'manual', + 1: 'auto_multi_sport', }, 'intensity': { - '0': 'active', - '1': 'rest', - '2': 'warmup', - '3': 'cooldown', - '4': 'recovery', - '5': 'interval', - '6': 'other', + 0: 'active', + 1: 'rest', + 2: 'warmup', + 3: 'cooldown', + 4: 'recovery', + 5: 'interval', + 6: 'other', }, 'session_trigger': { - '0': 'activity_end', - '1': 'manual', # User changed sport. - '2': 'auto_multi_sport', # Auto multi-sport feature is enabled and user pressed lap button to advance session. - '3': 'fitness_equipment', # Auto sport change caused by user linking to fitness equipment. + 0: 'activity_end', + 1: 'manual', # User changed sport. + 2: 'auto_multi_sport', # Auto multi-sport feature is enabled and user pressed lap button to advance session. + 3: 'fitness_equipment', # Auto sport change caused by user linking to fitness equipment. }, 'autolap_trigger': { - '0': 'time', - '1': 'distance', - '2': 'position_start', - '3': 'position_lap', - '4': 'position_waypoint', - '5': 'position_marked', - '6': 'off', - '13': 'auto_select', + 0: 'time', + 1: 'distance', + 2: 'position_start', + 3: 'position_lap', + 4: 'position_waypoint', + 5: 'position_marked', + 6: 'off', + 13: 'auto_select', }, 'lap_trigger': { - '0': 'manual', - '1': 'time', - '2': 'distance', - '3': 'position_start', - '4': 'position_lap', - '5': 'position_waypoint', - '6': 'position_marked', - '7': 'session_end', - '8': 'fitness_equipment', + 0: 'manual', + 1: 'time', + 2: 'distance', + 3: 'position_start', + 4: 'position_lap', + 5: 'position_waypoint', + 6: 'position_marked', + 7: 'session_end', + 8: 'fitness_equipment', }, 'time_mode': { - '0': 'hour12', - '1': 'hour24', # Does not use a leading zero and has a colon - '2': 'military', # Uses a leading zero and does not have a colon - '3': 'hour_12_with_seconds', - '4': 'hour_24_with_seconds', - '5': 'utc', + 0: 'hour12', + 1: 'hour24', # Does not use a leading zero and has a colon + 2: 'military', # Uses a leading zero and does not have a colon + 3: 'hour_12_with_seconds', + 4: 'hour_24_with_seconds', + 5: 'utc', }, 'backlight_mode': { - '0': 'off', - '1': 'manual', - '2': 'key_and_messages', - '3': 'auto_brightness', - '4': 'smart_notifications', - '5': 'key_and_messages_night', - '6': 'key_and_messages_and_smart_notifications', + 0: 'off', + 1: 'manual', + 2: 'key_and_messages', + 3: 'auto_brightness', + 4: 'smart_notifications', + 5: 'key_and_messages_night', + 6: 'key_and_messages_and_smart_notifications', }, 'date_mode': { - '0': 'day_month', - '1': 'month_day', + 0: 'day_month', + 1: 'month_day', }, 'backlight_timeout': { - '0': 'infinite', # Backlight stays on forever. + 0: 'infinite', # Backlight stays on forever. }, 'event': { - '0': 'timer', # Group 0. Start / stop_all - '3': 'workout', # start / stop - '4': 'workout_step', # Start at beginning of workout. Stop at end of each step. - '5': 'power_down', # stop_all group 0 - '6': 'power_up', # stop_all group 0 - '7': 'off_course', # start / stop group 0 - '8': 'session', # Stop at end of each session. - '9': 'lap', # Stop at end of each lap. - '10': 'course_point', # marker - '11': 'battery', # marker - '12': 'virtual_partner_pace', # Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled. - '13': 'hr_high_alert', # Group 0. Start / stop when in alert condition. - '14': 'hr_low_alert', # Group 0. Start / stop when in alert condition. - '15': 'speed_high_alert', # Group 0. Start / stop when in alert condition. - '16': 'speed_low_alert', # Group 0. Start / stop when in alert condition. - '17': 'cad_high_alert', # Group 0. Start / stop when in alert condition. - '18': 'cad_low_alert', # Group 0. Start / stop when in alert condition. - '19': 'power_high_alert', # Group 0. Start / stop when in alert condition. - '20': 'power_low_alert', # Group 0. Start / stop when in alert condition. - '21': 'recovery_hr', # marker - '22': 'battery_low', # marker - '23': 'time_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. - '24': 'distance_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. - '25': 'calorie_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. - '26': 'activity', # Group 1.. Stop at end of activity. - '27': 'fitness_equipment', # marker - '28': 'length', # Stop at end of each length. - '32': 'user_marker', # marker - '33': 'sport_point', # marker - '36': 'calibration', # start/stop/marker - '42': 'front_gear_change', # marker - '43': 'rear_gear_change', # marker - '44': 'rider_position_change', # marker - '45': 'elev_high_alert', # Group 0. Start / stop when in alert condition. - '46': 'elev_low_alert', # Group 0. Start / stop when in alert condition. - '47': 'comm_timeout', # marker - '54': 'auto_activity_detect', # marker - '56': 'dive_alert', # marker - '57': 'dive_gas_switched', # marker - '71': 'tank_pressure_reserve', # marker - '72': 'tank_pressure_critical', # marker - '73': 'tank_lost', # marker - '75': 'radar_threat_alert', # start/stop/marker - '76': 'tank_battery_low', # marker - '81': 'tank_pod_connected', # marker - tank pod has connected - '82': 'tank_pod_disconnected', # marker - tank pod has lost connection + 0: 'timer', # Group 0. Start / stop_all + 3: 'workout', # start / stop + 4: 'workout_step', # Start at beginning of workout. Stop at end of each step. + 5: 'power_down', # stop_all group 0 + 6: 'power_up', # stop_all group 0 + 7: 'off_course', # start / stop group 0 + 8: 'session', # Stop at end of each session. + 9: 'lap', # Stop at end of each lap. + 10: 'course_point', # marker + 11: 'battery', # marker + 12: 'virtual_partner_pace', # Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled. + 13: 'hr_high_alert', # Group 0. Start / stop when in alert condition. + 14: 'hr_low_alert', # Group 0. Start / stop when in alert condition. + 15: 'speed_high_alert', # Group 0. Start / stop when in alert condition. + 16: 'speed_low_alert', # Group 0. Start / stop when in alert condition. + 17: 'cad_high_alert', # Group 0. Start / stop when in alert condition. + 18: 'cad_low_alert', # Group 0. Start / stop when in alert condition. + 19: 'power_high_alert', # Group 0. Start / stop when in alert condition. + 20: 'power_low_alert', # Group 0. Start / stop when in alert condition. + 21: 'recovery_hr', # marker + 22: 'battery_low', # marker + 23: 'time_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. + 24: 'distance_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. + 25: 'calorie_duration_alert', # Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. + 26: 'activity', # Group 1.. Stop at end of activity. + 27: 'fitness_equipment', # marker + 28: 'length', # Stop at end of each length. + 32: 'user_marker', # marker + 33: 'sport_point', # marker + 36: 'calibration', # start/stop/marker + 42: 'front_gear_change', # marker + 43: 'rear_gear_change', # marker + 44: 'rider_position_change', # marker + 45: 'elev_high_alert', # Group 0. Start / stop when in alert condition. + 46: 'elev_low_alert', # Group 0. Start / stop when in alert condition. + 47: 'comm_timeout', # marker + 54: 'auto_activity_detect', # marker + 56: 'dive_alert', # marker + 57: 'dive_gas_switched', # marker + 71: 'tank_pressure_reserve', # marker + 72: 'tank_pressure_critical', # marker + 73: 'tank_lost', # marker + 75: 'radar_threat_alert', # start/stop/marker + 76: 'tank_battery_low', # marker + 81: 'tank_pod_connected', # marker - tank pod has connected + 82: 'tank_pod_disconnected', # marker - tank pod has lost connection }, 'event_type': { - '0': 'start', - '1': 'stop', - '2': 'consecutive_depreciated', - '3': 'marker', - '4': 'stop_all', - '5': 'begin_depreciated', - '6': 'end_depreciated', - '7': 'end_all_depreciated', - '8': 'stop_disable', - '9': 'stop_disable_all', + 0: 'start', + 1: 'stop', + 2: 'consecutive_depreciated', + 3: 'marker', + 4: 'stop_all', + 5: 'begin_depreciated', + 6: 'end_depreciated', + 7: 'end_all_depreciated', + 8: 'stop_disable', + 9: 'stop_disable_all', }, 'timer_trigger': { - '0': 'manual', - '1': 'auto', - '2': 'fitness_equipment', + 0: 'manual', + 1: 'auto', + 2: 'fitness_equipment', }, 'fitness_equipment_state': { - '0': 'ready', - '1': 'in_use', - '2': 'paused', - '3': 'unknown', # lost connection to fitness equipment + 0: 'ready', + 1: 'in_use', + 2: 'paused', + 3: 'unknown', # lost connection to fitness equipment }, 'tone': { - '0': 'off', - '1': 'tone', - '2': 'vibrate', - '3': 'tone_and_vibrate', + 0: 'off', + 1: 'tone', + 2: 'vibrate', + 3: 'tone_and_vibrate', }, 'autoscroll': { - '0': 'none', - '1': 'slow', - '2': 'medium', - '3': 'fast', + 0: 'none', + 1: 'slow', + 2: 'medium', + 3: 'fast', }, 'activity_class': { - '0x7F': 'level', # 0 to 100 - '100': 'level_max', - '0x80': 'athlete', + 0x7F: 'level', # 0 to 100 + 100: 'level_max', + 0x80: 'athlete', }, 'hr_zone_calc': { - '0': 'custom', - '1': 'percent_max_hr', - '2': 'percent_hrr', - '3': 'percent_lthr', + 0: 'custom', + 1: 'percent_max_hr', + 2: 'percent_hrr', + 3: 'percent_lthr', }, 'pwr_zone_calc': { - '0': 'custom', - '1': 'percent_ftp', + 0: 'custom', + 1: 'percent_ftp', }, 'wkt_step_duration': { - '0': 'time', - '1': 'distance', - '2': 'hr_less_than', - '3': 'hr_greater_than', - '4': 'calories', - '5': 'open', - '6': 'repeat_until_steps_cmplt', - '7': 'repeat_until_time', - '8': 'repeat_until_distance', - '9': 'repeat_until_calories', - '10': 'repeat_until_hr_less_than', - '11': 'repeat_until_hr_greater_than', - '12': 'repeat_until_power_less_than', - '13': 'repeat_until_power_greater_than', - '14': 'power_less_than', - '15': 'power_greater_than', - '16': 'training_peaks_tss', - '17': 'repeat_until_power_last_lap_less_than', - '18': 'repeat_until_max_power_last_lap_less_than', - '19': 'power_3s_less_than', - '20': 'power_10s_less_than', - '21': 'power_30s_less_than', - '22': 'power_3s_greater_than', - '23': 'power_10s_greater_than', - '24': 'power_30s_greater_than', - '25': 'power_lap_less_than', - '26': 'power_lap_greater_than', - '27': 'repeat_until_training_peaks_tss', - '28': 'repetition_time', - '29': 'reps', - '31': 'time_only', + 0: 'time', + 1: 'distance', + 2: 'hr_less_than', + 3: 'hr_greater_than', + 4: 'calories', + 5: 'open', + 6: 'repeat_until_steps_cmplt', + 7: 'repeat_until_time', + 8: 'repeat_until_distance', + 9: 'repeat_until_calories', + 10: 'repeat_until_hr_less_than', + 11: 'repeat_until_hr_greater_than', + 12: 'repeat_until_power_less_than', + 13: 'repeat_until_power_greater_than', + 14: 'power_less_than', + 15: 'power_greater_than', + 16: 'training_peaks_tss', + 17: 'repeat_until_power_last_lap_less_than', + 18: 'repeat_until_max_power_last_lap_less_than', + 19: 'power_3s_less_than', + 20: 'power_10s_less_than', + 21: 'power_30s_less_than', + 22: 'power_3s_greater_than', + 23: 'power_10s_greater_than', + 24: 'power_30s_greater_than', + 25: 'power_lap_less_than', + 26: 'power_lap_greater_than', + 27: 'repeat_until_training_peaks_tss', + 28: 'repetition_time', + 29: 'reps', + 31: 'time_only', }, 'wkt_step_target': { - '0': 'speed', - '1': 'heart_rate', - '2': 'open', - '3': 'cadence', - '4': 'power', - '5': 'grade', - '6': 'resistance', - '7': 'power_3s', - '8': 'power_10s', - '9': 'power_30s', - '10': 'power_lap', - '11': 'swim_stroke', - '12': 'speed_lap', - '13': 'heart_rate_lap', + 0: 'speed', + 1: 'heart_rate', + 2: 'open', + 3: 'cadence', + 4: 'power', + 5: 'grade', + 6: 'resistance', + 7: 'power_3s', + 8: 'power_10s', + 9: 'power_30s', + 10: 'power_lap', + 11: 'swim_stroke', + 12: 'speed_lap', + 13: 'heart_rate_lap', }, 'goal': { - '0': 'time', - '1': 'distance', - '2': 'calories', - '3': 'frequency', - '4': 'steps', - '5': 'ascent', - '6': 'active_minutes', + 0: 'time', + 1: 'distance', + 2: 'calories', + 3: 'frequency', + 4: 'steps', + 5: 'ascent', + 6: 'active_minutes', }, 'goal_recurrence': { - '0': 'off', - '1': 'daily', - '2': 'weekly', - '3': 'monthly', - '4': 'yearly', - '5': 'custom', + 0: 'off', + 1: 'daily', + 2: 'weekly', + 3: 'monthly', + 4: 'yearly', + 5: 'custom', }, 'goal_source': { - '0': 'auto', # Device generated - '1': 'community', # Social network sourced goal - '2': 'user', # Manually generated + 0: 'auto', # Device generated + 1: 'community', # Social network sourced goal + 2: 'user', # Manually generated }, 'schedule': { - '0': 'workout', - '1': 'course', + 0: 'workout', + 1: 'course', }, 'course_point': { - '0': 'generic', - '1': 'summit', - '2': 'valley', - '3': 'water', - '4': 'food', - '5': 'danger', - '6': 'left', - '7': 'right', - '8': 'straight', - '9': 'first_aid', - '10': 'fourth_category', - '11': 'third_category', - '12': 'second_category', - '13': 'first_category', - '14': 'hors_category', - '15': 'sprint', - '16': 'left_fork', - '17': 'right_fork', - '18': 'middle_fork', - '19': 'slight_left', - '20': 'sharp_left', - '21': 'slight_right', - '22': 'sharp_right', - '23': 'u_turn', - '24': 'segment_start', - '25': 'segment_end', - '27': 'campsite', - '28': 'aid_station', - '29': 'rest_area', - '30': 'general_distance', # Used with UpAhead - '31': 'service', - '32': 'energy_gel', - '33': 'sports_drink', - '34': 'mile_marker', - '35': 'checkpoint', - '36': 'shelter', - '37': 'meeting_spot', - '38': 'overlook', - '39': 'toilet', - '40': 'shower', - '41': 'gear', - '42': 'sharp_curve', - '43': 'steep_incline', - '44': 'tunnel', - '45': 'bridge', - '46': 'obstacle', - '47': 'crossing', - '48': 'store', - '49': 'transition', - '50': 'navaid', - '51': 'transport', - '52': 'alert', - '53': 'info', + 0: 'generic', + 1: 'summit', + 2: 'valley', + 3: 'water', + 4: 'food', + 5: 'danger', + 6: 'left', + 7: 'right', + 8: 'straight', + 9: 'first_aid', + 10: 'fourth_category', + 11: 'third_category', + 12: 'second_category', + 13: 'first_category', + 14: 'hors_category', + 15: 'sprint', + 16: 'left_fork', + 17: 'right_fork', + 18: 'middle_fork', + 19: 'slight_left', + 20: 'sharp_left', + 21: 'slight_right', + 22: 'sharp_right', + 23: 'u_turn', + 24: 'segment_start', + 25: 'segment_end', + 27: 'campsite', + 28: 'aid_station', + 29: 'rest_area', + 30: 'general_distance', # Used with UpAhead + 31: 'service', + 32: 'energy_gel', + 33: 'sports_drink', + 34: 'mile_marker', + 35: 'checkpoint', + 36: 'shelter', + 37: 'meeting_spot', + 38: 'overlook', + 39: 'toilet', + 40: 'shower', + 41: 'gear', + 42: 'sharp_curve', + 43: 'steep_incline', + 44: 'tunnel', + 45: 'bridge', + 46: 'obstacle', + 47: 'crossing', + 48: 'store', + 49: 'transition', + 50: 'navaid', + 51: 'transport', + 52: 'alert', + 53: 'info', }, 'manufacturer': { - '1': 'garmin', - '2': 'garmin_fr405_antfs', # Do not use. Used by FR405 for ANTFS man id. - '3': 'zephyr', - '4': 'dayton', - '5': 'idt', - '6': 'srm', - '7': 'quarq', - '8': 'ibike', - '9': 'saris', - '10': 'spark_hk', - '11': 'tanita', - '12': 'echowell', - '13': 'dynastream_oem', - '14': 'nautilus', - '15': 'dynastream', - '16': 'timex', - '17': 'metrigear', - '18': 'xelic', - '19': 'beurer', - '20': 'cardiosport', - '21': 'a_and_d', - '22': 'hmm', - '23': 'suunto', - '24': 'thita_elektronik', - '25': 'gpulse', - '26': 'clean_mobile', - '27': 'pedal_brain', - '28': 'peaksware', - '29': 'saxonar', - '30': 'lemond_fitness', - '31': 'dexcom', - '32': 'wahoo_fitness', - '33': 'octane_fitness', - '34': 'archinoetics', - '35': 'the_hurt_box', - '36': 'citizen_systems', - '37': 'magellan', - '38': 'osynce', - '39': 'holux', - '40': 'concept2', - '41': 'shimano', - '42': 'one_giant_leap', - '43': 'ace_sensor', - '44': 'brim_brothers', - '45': 'xplova', - '46': 'perception_digital', - '47': 'bf1systems', - '48': 'pioneer', - '49': 'spantec', - '50': 'metalogics', - '51': '4iiiis', - '52': 'seiko_epson', - '53': 'seiko_epson_oem', - '54': 'ifor_powell', - '55': 'maxwell_guider', - '56': 'star_trac', - '57': 'breakaway', - '58': 'alatech_technology_ltd', - '59': 'mio_technology_europe', - '60': 'rotor', - '61': 'geonaute', - '62': 'id_bike', - '63': 'specialized', - '64': 'wtek', - '65': 'physical_enterprises', - '66': 'north_pole_engineering', - '67': 'bkool', - '68': 'cateye', - '69': 'stages_cycling', - '70': 'sigmasport', - '71': 'tomtom', - '72': 'peripedal', - '73': 'wattbike', - '76': 'moxy', - '77': 'ciclosport', - '78': 'powerbahn', - '79': 'acorn_projects_aps', - '80': 'lifebeam', - '81': 'bontrager', - '82': 'wellgo', - '83': 'scosche', - '84': 'magura', - '85': 'woodway', - '86': 'elite', - '87': 'nielsen_kellerman', - '88': 'dk_city', - '89': 'tacx', - '90': 'direction_technology', - '91': 'magtonic', - '92': '1partcarbon', - '93': 'inside_ride_technologies', - '94': 'sound_of_motion', - '95': 'stryd', - '96': 'icg', # Indoorcycling Group - '97': 'MiPulse', - '98': 'bsx_athletics', - '99': 'look', - '100': 'campagnolo_srl', - '101': 'body_bike_smart', - '102': 'praxisworks', - '103': 'limits_technology', # Limits Technology Ltd. - '104': 'topaction_technology', # TopAction Technology Inc. - '105': 'cosinuss', - '106': 'fitcare', - '107': 'magene', - '108': 'giant_manufacturing_co', - '109': 'tigrasport', # Tigrasport - '110': 'salutron', - '111': 'technogym', - '112': 'bryton_sensors', - '113': 'latitude_limited', - '114': 'soaring_technology', - '115': 'igpsport', - '116': 'thinkrider', - '117': 'gopher_sport', - '118': 'waterrower', - '119': 'orangetheory', - '120': 'inpeak', - '121': 'kinetic', - '122': 'johnson_health_tech', - '123': 'polar_electro', - '124': 'seesense', - '125': 'nci_technology', - '126': 'iqsquare', - '127': 'leomo', - '128': 'ifit_com', - '129': 'coros_byte', - '130': 'versa_design', - '131': 'chileaf', - '132': 'cycplus', - '133': 'gravaa_byte', - '134': 'sigeyi', - '135': 'coospo', - '136': 'geoid', - '137': 'bosch', - '138': 'kyto', - '139': 'kinetic_sports', - '140': 'decathlon_byte', - '141': 'tq_systems', - '142': 'tag_heuer', - '143': 'keiser_fitness', - '144': 'zwift_byte', - '145': 'porsche_ep', - '146': 'blackbird', - '147': 'meilan_byte', - '148': 'ezon', - '149': 'laisi', - '150': 'myzone', - '151': 'abawo', - '152': 'bafang', - '153': 'luhong_technology', - '255': 'development', - '257': 'healthandlife', - '258': 'lezyne', - '259': 'scribe_labs', - '260': 'zwift', - '261': 'watteam', - '262': 'recon', - '263': 'favero_electronics', - '264': 'dynovelo', - '265': 'strava', - '266': 'precor', # Amer Sports - '267': 'bryton', - '268': 'sram', - '269': 'navman', # MiTAC Global Corporation (Mio Technology) - '270': 'cobi', # COBI GmbH - '271': 'spivi', - '272': 'mio_magellan', - '273': 'evesports', - '274': 'sensitivus_gauge', - '275': 'podoon', - '276': 'life_time_fitness', - '277': 'falco_e_motors', # Falco eMotors Inc. - '278': 'minoura', - '279': 'cycliq', - '280': 'luxottica', - '281': 'trainer_road', - '282': 'the_sufferfest', - '283': 'fullspeedahead', - '284': 'virtualtraining', - '285': 'feedbacksports', - '286': 'omata', - '287': 'vdo', - '288': 'magneticdays', - '289': 'hammerhead', - '290': 'kinetic_by_kurt', - '291': 'shapelog', - '292': 'dabuziduo', - '293': 'jetblack', - '294': 'coros', - '295': 'virtugo', - '296': 'velosense', - '297': 'cycligentinc', - '298': 'trailforks', - '299': 'mahle_ebikemotion', - '300': 'nurvv', - '301': 'microprogram', - '302': 'zone5cloud', - '303': 'greenteg', - '304': 'yamaha_motors', - '305': 'whoop', - '306': 'gravaa', - '307': 'onelap', - '308': 'monark_exercise', - '309': 'form', - '310': 'decathlon', - '311': 'syncros', - '312': 'heatup', - '313': 'cannondale', - '314': 'true_fitness', - '315': 'RGT_cycling', - '316': 'vasa', - '317': 'race_republic', - '318': 'fazua', - '319': 'oreka_training', - '320': 'lsec', # Lishun Electric & Communication - '321': 'lululemon_studio', - '322': 'shanyue', - '323': 'spinning_mda', - '324': 'hilldating', - '325': 'aero_sensor', - '326': 'nike', - '327': 'magicshine', - '328': 'ictrainer', - '329': 'absolute_cycling', - '330': 'eo_swimbetter', - '331': 'mywhoosh', - '332': 'ravemen', - '333': 'tektro_racing_products', - '334': 'darad_innovation_corporation', - '335': 'cycloptim', - '337': 'runna', - '339': 'zepp', - '340': 'peloton', - '341': 'carv', - '342': 'tissot', - '345': 'real_velo', - '346': 'wetech', - '347': 'jespr', - '348': 'huawei', - '349': 'gotoes', - '350': 'cadence_app', - '5759': 'actigraphcorp', + 1: 'garmin', + 2: 'garmin_fr405_antfs', # Do not use. Used by FR405 for ANTFS man id. + 3: 'zephyr', + 4: 'dayton', + 5: 'idt', + 6: 'srm', + 7: 'quarq', + 8: 'ibike', + 9: 'saris', + 10: 'spark_hk', + 11: 'tanita', + 12: 'echowell', + 13: 'dynastream_oem', + 14: 'nautilus', + 15: 'dynastream', + 16: 'timex', + 17: 'metrigear', + 18: 'xelic', + 19: 'beurer', + 20: 'cardiosport', + 21: 'a_and_d', + 22: 'hmm', + 23: 'suunto', + 24: 'thita_elektronik', + 25: 'gpulse', + 26: 'clean_mobile', + 27: 'pedal_brain', + 28: 'peaksware', + 29: 'saxonar', + 30: 'lemond_fitness', + 31: 'dexcom', + 32: 'wahoo_fitness', + 33: 'octane_fitness', + 34: 'archinoetics', + 35: 'the_hurt_box', + 36: 'citizen_systems', + 37: 'magellan', + 38: 'osynce', + 39: 'holux', + 40: 'concept2', + 41: 'shimano', + 42: 'one_giant_leap', + 43: 'ace_sensor', + 44: 'brim_brothers', + 45: 'xplova', + 46: 'perception_digital', + 47: 'bf1systems', + 48: 'pioneer', + 49: 'spantec', + 50: 'metalogics', + 51: '4iiiis', + 52: 'seiko_epson', + 53: 'seiko_epson_oem', + 54: 'ifor_powell', + 55: 'maxwell_guider', + 56: 'star_trac', + 57: 'breakaway', + 58: 'alatech_technology_ltd', + 59: 'mio_technology_europe', + 60: 'rotor', + 61: 'geonaute', + 62: 'id_bike', + 63: 'specialized', + 64: 'wtek', + 65: 'physical_enterprises', + 66: 'north_pole_engineering', + 67: 'bkool', + 68: 'cateye', + 69: 'stages_cycling', + 70: 'sigmasport', + 71: 'tomtom', + 72: 'peripedal', + 73: 'wattbike', + 76: 'moxy', + 77: 'ciclosport', + 78: 'powerbahn', + 79: 'acorn_projects_aps', + 80: 'lifebeam', + 81: 'bontrager', + 82: 'wellgo', + 83: 'scosche', + 84: 'magura', + 85: 'woodway', + 86: 'elite', + 87: 'nielsen_kellerman', + 88: 'dk_city', + 89: 'tacx', + 90: 'direction_technology', + 91: 'magtonic', + 92: '1partcarbon', + 93: 'inside_ride_technologies', + 94: 'sound_of_motion', + 95: 'stryd', + 96: 'icg', # Indoorcycling Group + 97: 'MiPulse', + 98: 'bsx_athletics', + 99: 'look', + 100: 'campagnolo_srl', + 101: 'body_bike_smart', + 102: 'praxisworks', + 103: 'limits_technology', # Limits Technology Ltd. + 104: 'topaction_technology', # TopAction Technology Inc. + 105: 'cosinuss', + 106: 'fitcare', + 107: 'magene', + 108: 'giant_manufacturing_co', + 109: 'tigrasport', # Tigrasport + 110: 'salutron', + 111: 'technogym', + 112: 'bryton_sensors', + 113: 'latitude_limited', + 114: 'soaring_technology', + 115: 'igpsport', + 116: 'thinkrider', + 117: 'gopher_sport', + 118: 'waterrower', + 119: 'orangetheory', + 120: 'inpeak', + 121: 'kinetic', + 122: 'johnson_health_tech', + 123: 'polar_electro', + 124: 'seesense', + 125: 'nci_technology', + 126: 'iqsquare', + 127: 'leomo', + 128: 'ifit_com', + 129: 'coros_byte', + 130: 'versa_design', + 131: 'chileaf', + 132: 'cycplus', + 133: 'gravaa_byte', + 134: 'sigeyi', + 135: 'coospo', + 136: 'geoid', + 137: 'bosch', + 138: 'kyto', + 139: 'kinetic_sports', + 140: 'decathlon_byte', + 141: 'tq_systems', + 142: 'tag_heuer', + 143: 'keiser_fitness', + 144: 'zwift_byte', + 145: 'porsche_ep', + 146: 'blackbird', + 147: 'meilan_byte', + 148: 'ezon', + 149: 'laisi', + 150: 'myzone', + 151: 'abawo', + 152: 'bafang', + 153: 'luhong_technology', + 255: 'development', + 257: 'healthandlife', + 258: 'lezyne', + 259: 'scribe_labs', + 260: 'zwift', + 261: 'watteam', + 262: 'recon', + 263: 'favero_electronics', + 264: 'dynovelo', + 265: 'strava', + 266: 'precor', # Amer Sports + 267: 'bryton', + 268: 'sram', + 269: 'navman', # MiTAC Global Corporation (Mio Technology) + 270: 'cobi', # COBI GmbH + 271: 'spivi', + 272: 'mio_magellan', + 273: 'evesports', + 274: 'sensitivus_gauge', + 275: 'podoon', + 276: 'life_time_fitness', + 277: 'falco_e_motors', # Falco eMotors Inc. + 278: 'minoura', + 279: 'cycliq', + 280: 'luxottica', + 281: 'trainer_road', + 282: 'the_sufferfest', + 283: 'fullspeedahead', + 284: 'virtualtraining', + 285: 'feedbacksports', + 286: 'omata', + 287: 'vdo', + 288: 'magneticdays', + 289: 'hammerhead', + 290: 'kinetic_by_kurt', + 291: 'shapelog', + 292: 'dabuziduo', + 293: 'jetblack', + 294: 'coros', + 295: 'virtugo', + 296: 'velosense', + 297: 'cycligentinc', + 298: 'trailforks', + 299: 'mahle_ebikemotion', + 300: 'nurvv', + 301: 'microprogram', + 302: 'zone5cloud', + 303: 'greenteg', + 304: 'yamaha_motors', + 305: 'whoop', + 306: 'gravaa', + 307: 'onelap', + 308: 'monark_exercise', + 309: 'form', + 310: 'decathlon', + 311: 'syncros', + 312: 'heatup', + 313: 'cannondale', + 314: 'true_fitness', + 315: 'RGT_cycling', + 316: 'vasa', + 317: 'race_republic', + 318: 'fazua', + 319: 'oreka_training', + 320: 'lsec', # Lishun Electric & Communication + 321: 'lululemon_studio', + 322: 'shanyue', + 323: 'spinning_mda', + 324: 'hilldating', + 325: 'aero_sensor', + 326: 'nike', + 327: 'magicshine', + 328: 'ictrainer', + 329: 'absolute_cycling', + 330: 'eo_swimbetter', + 331: 'mywhoosh', + 332: 'ravemen', + 333: 'tektro_racing_products', + 334: 'darad_innovation_corporation', + 335: 'cycloptim', + 337: 'runna', + 339: 'zepp', + 340: 'peloton', + 341: 'carv', + 342: 'tissot', + 345: 'real_velo', + 346: 'wetech', + 347: 'jespr', + 348: 'huawei', + 349: 'gotoes', + 350: 'cadence_app', + 5759: 'actigraphcorp', }, 'garmin_product': { - '1': 'hrm1', - '2': 'axh01', # AXH01 HRM chipset - '3': 'axb01', - '4': 'axb02', - '5': 'hrm2ss', - '6': 'dsi_alf02', - '7': 'hrm3ss', - '8': 'hrm_run_single_byte_product_id', # hrm_run model for HRM ANT+ messaging - '9': 'bsm', # BSM model for ANT+ messaging - '10': 'bcm', # BCM model for ANT+ messaging - '11': 'axs01', # AXS01 HRM Bike Chipset model for ANT+ messaging - '12': 'hrm_tri_single_byte_product_id', # hrm_tri model for HRM ANT+ messaging - '13': 'hrm4_run_single_byte_product_id', # hrm4 run model for HRM ANT+ messaging - '14': 'fr225_single_byte_product_id', # fr225 model for HRM ANT+ messaging - '15': 'gen3_bsm_single_byte_product_id', # gen3_bsm model for Bike Speed ANT+ messaging - '16': 'gen3_bcm_single_byte_product_id', # gen3_bcm model for Bike Cadence ANT+ messaging - '22': 'hrm_fit_single_byte_product_id', - '255': 'OHR', # Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting - '473': 'fr301_china', - '474': 'fr301_japan', - '475': 'fr301_korea', - '494': 'fr301_taiwan', - '717': 'fr405', # Forerunner 405 - '782': 'fr50', # Forerunner 50 - '987': 'fr405_japan', - '988': 'fr60', # Forerunner 60 - '1011': 'dsi_alf01', - '1018': 'fr310xt', # Forerunner 310 - '1036': 'edge500', - '1124': 'fr110', # Forerunner 110 - '1169': 'edge800', - '1199': 'edge500_taiwan', - '1213': 'edge500_japan', - '1253': 'chirp', - '1274': 'fr110_japan', - '1325': 'edge200', - '1328': 'fr910xt', - '1333': 'edge800_taiwan', - '1334': 'edge800_japan', - '1341': 'alf04', - '1345': 'fr610', - '1360': 'fr210_japan', - '1380': 'vector_ss', - '1381': 'vector_cp', - '1386': 'edge800_china', - '1387': 'edge500_china', - '1405': 'approach_g10', - '1410': 'fr610_japan', - '1422': 'edge500_korea', - '1436': 'fr70', - '1446': 'fr310xt_4t', - '1461': 'amx', - '1482': 'fr10', - '1497': 'edge800_korea', - '1499': 'swim', - '1537': 'fr910xt_china', - '1551': 'fenix', - '1555': 'edge200_taiwan', - '1561': 'edge510', - '1567': 'edge810', - '1570': 'tempe', - '1600': 'fr910xt_japan', - '1623': 'fr620', - '1632': 'fr220', - '1664': 'fr910xt_korea', - '1688': 'fr10_japan', - '1721': 'edge810_japan', - '1735': 'virb_elite', - '1736': 'edge_touring', # Also Edge Touring Plus - '1742': 'edge510_japan', - '1743': 'hrm_tri', # Also HRM-Swim - '1752': 'hrm_run', - '1765': 'fr920xt', - '1821': 'edge510_asia', - '1822': 'edge810_china', - '1823': 'edge810_taiwan', - '1836': 'edge1000', - '1837': 'vivo_fit', - '1853': 'virb_remote', - '1885': 'vivo_ki', - '1903': 'fr15', - '1907': 'vivo_active', - '1918': 'edge510_korea', - '1928': 'fr620_japan', - '1929': 'fr620_china', - '1930': 'fr220_japan', - '1931': 'fr220_china', - '1936': 'approach_s6', - '1956': 'vivo_smart', - '1967': 'fenix2', - '1988': 'epix', - '2050': 'fenix3', - '2052': 'edge1000_taiwan', - '2053': 'edge1000_japan', - '2061': 'fr15_japan', - '2067': 'edge520', - '2070': 'edge1000_china', - '2072': 'fr620_russia', - '2073': 'fr220_russia', - '2079': 'vector_s', - '2100': 'edge1000_korea', - '2130': 'fr920xt_taiwan', - '2131': 'fr920xt_china', - '2132': 'fr920xt_japan', - '2134': 'virbx', - '2135': 'vivo_smart_apac', - '2140': 'etrex_touch', - '2147': 'edge25', - '2148': 'fr25', - '2150': 'vivo_fit2', - '2153': 'fr225', - '2156': 'fr630', - '2157': 'fr230', - '2158': 'fr735xt', - '2160': 'vivo_active_apac', - '2161': 'vector_2', - '2162': 'vector_2s', - '2172': 'virbxe', - '2173': 'fr620_taiwan', - '2174': 'fr220_taiwan', - '2175': 'truswing', - '2187': 'd2airvenu', - '2188': 'fenix3_china', - '2189': 'fenix3_twn', - '2192': 'varia_headlight', - '2193': 'varia_taillight_old', - '2204': 'edge_explore_1000', - '2219': 'fr225_asia', - '2225': 'varia_radar_taillight', - '2226': 'varia_radar_display', - '2238': 'edge20', - '2260': 'edge520_asia', - '2261': 'edge520_japan', - '2262': 'd2_bravo', - '2266': 'approach_s20', - '2271': 'vivo_smart2', - '2274': 'edge1000_thai', - '2276': 'varia_remote', - '2288': 'edge25_asia', - '2289': 'edge25_jpn', - '2290': 'edge20_asia', - '2292': 'approach_x40', - '2293': 'fenix3_japan', - '2294': 'vivo_smart_emea', - '2310': 'fr630_asia', - '2311': 'fr630_jpn', - '2313': 'fr230_jpn', - '2327': 'hrm4_run', - '2332': 'epix_japan', - '2337': 'vivo_active_hr', - '2347': 'vivo_smart_gps_hr', - '2348': 'vivo_smart_hr', - '2361': 'vivo_smart_hr_asia', - '2362': 'vivo_smart_gps_hr_asia', - '2368': 'vivo_move', - '2379': 'varia_taillight', - '2396': 'fr235_asia', - '2397': 'fr235_japan', - '2398': 'varia_vision', - '2406': 'vivo_fit3', - '2407': 'fenix3_korea', - '2408': 'fenix3_sea', - '2413': 'fenix3_hr', - '2417': 'virb_ultra_30', - '2429': 'index_smart_scale', - '2431': 'fr235', - '2432': 'fenix3_chronos', - '2441': 'oregon7xx', - '2444': 'rino7xx', - '2457': 'epix_korea', - '2473': 'fenix3_hr_chn', - '2474': 'fenix3_hr_twn', - '2475': 'fenix3_hr_jpn', - '2476': 'fenix3_hr_sea', - '2477': 'fenix3_hr_kor', - '2496': 'nautix', - '2497': 'vivo_active_hr_apac', - '2503': 'fr35', - '2512': 'oregon7xx_ww', - '2530': 'edge_820', - '2531': 'edge_explore_820', - '2533': 'fr735xt_apac', - '2534': 'fr735xt_japan', - '2544': 'fenix5s', - '2547': 'd2_bravo_titanium', - '2567': 'varia_ut800', # Varia UT 800 SW - '2593': 'running_dynamics_pod', - '2599': 'edge_820_china', - '2600': 'edge_820_japan', - '2604': 'fenix5x', - '2606': 'vivo_fit_jr', - '2622': 'vivo_smart3', - '2623': 'vivo_sport', - '2628': 'edge_820_taiwan', - '2629': 'edge_820_korea', - '2630': 'edge_820_sea', - '2650': 'fr35_hebrew', - '2656': 'approach_s60', - '2667': 'fr35_apac', - '2668': 'fr35_japan', - '2675': 'fenix3_chronos_asia', - '2687': 'virb_360', - '2691': 'fr935', - '2697': 'fenix5', - '2700': 'vivoactive3', - '2733': 'fr235_china_nfc', - '2769': 'foretrex_601_701', - '2772': 'vivo_move_hr', - '2713': 'edge_1030', - '2727': 'fr35_sea', - '2787': 'vector_3', - '2796': 'fenix5_asia', - '2797': 'fenix5s_asia', - '2798': 'fenix5x_asia', - '2806': 'approach_z80', - '2814': 'fr35_korea', - '2819': 'd2charlie', - '2831': 'vivo_smart3_apac', - '2832': 'vivo_sport_apac', - '2833': 'fr935_asia', - '2859': 'descent', - '2878': 'vivo_fit4', - '2886': 'fr645', - '2888': 'fr645m', - '2891': 'fr30', - '2900': 'fenix5s_plus', - '2909': 'Edge_130', - '2924': 'edge_1030_asia', - '2927': 'vivosmart_4', - '2945': 'vivo_move_hr_asia', - '2962': 'approach_x10', - '2977': 'fr30_asia', - '2988': 'vivoactive3m_w', - '3003': 'fr645_asia', - '3004': 'fr645m_asia', - '3011': 'edge_explore', - '3028': 'gpsmap66', - '3049': 'approach_s10', - '3066': 'vivoactive3m_l', - '3076': 'fr245', - '3077': 'fr245_music', - '3085': 'approach_g80', - '3092': 'edge_130_asia', - '3095': 'edge_1030_bontrager', - '3110': 'fenix5_plus', - '3111': 'fenix5x_plus', - '3112': 'edge_520_plus', - '3113': 'fr945', - '3121': 'edge_530', - '3122': 'edge_830', - '3126': 'instinct_esports', - '3134': 'fenix5s_plus_apac', - '3135': 'fenix5x_plus_apac', - '3142': 'edge_520_plus_apac', - '3143': 'descent_t1', - '3144': 'fr235l_asia', - '3145': 'fr245_asia', - '3163': 'vivo_active3m_apac', - '3192': 'gen3_bsm', # gen3 bike speed sensor - '3193': 'gen3_bcm', # gen3 bike cadence sensor - '3218': 'vivo_smart4_asia', - '3224': 'vivoactive4_small', - '3225': 'vivoactive4_large', - '3226': 'venu', - '3246': 'marq_driver', - '3247': 'marq_aviator', - '3248': 'marq_captain', - '3249': 'marq_commander', - '3250': 'marq_expedition', - '3251': 'marq_athlete', - '3258': 'descent_mk2', - '3282': 'fr45', - '3284': 'gpsmap66i', - '3287': 'fenix6S_sport', - '3288': 'fenix6S', - '3289': 'fenix6_sport', - '3290': 'fenix6', - '3291': 'fenix6x', - '3299': 'hrm_dual', # HRM-Dual - '3300': 'hrm_pro', # HRM-Pro - '3308': 'vivo_move3_premium', - '3314': 'approach_s40', - '3321': 'fr245m_asia', - '3349': 'edge_530_apac', - '3350': 'edge_830_apac', - '3378': 'vivo_move3', - '3387': 'vivo_active4_small_asia', - '3388': 'vivo_active4_large_asia', - '3389': 'vivo_active4_oled_asia', - '3405': 'swim2', - '3420': 'marq_driver_asia', - '3421': 'marq_aviator_asia', - '3422': 'vivo_move3_asia', - '3441': 'fr945_asia', - '3446': 'vivo_active3t_chn', - '3448': 'marq_captain_asia', - '3449': 'marq_commander_asia', - '3450': 'marq_expedition_asia', - '3451': 'marq_athlete_asia', - '3461': 'index_smart_scale_2', - '3466': 'instinct_solar', - '3469': 'fr45_asia', - '3473': 'vivoactive3_daimler', - '3498': 'legacy_rey', - '3499': 'legacy_darth_vader', - '3500': 'legacy_captain_marvel', - '3501': 'legacy_first_avenger', - '3512': 'fenix6s_sport_asia', - '3513': 'fenix6s_asia', - '3514': 'fenix6_sport_asia', - '3515': 'fenix6_asia', - '3516': 'fenix6x_asia', - '3535': 'legacy_captain_marvel_asia', - '3536': 'legacy_first_avenger_asia', - '3537': 'legacy_rey_asia', - '3538': 'legacy_darth_vader_asia', - '3542': 'descent_mk2s', - '3558': 'edge_130_plus', - '3570': 'edge_1030_plus', - '3578': 'rally_200', # Rally 100/200 Power Meter Series - '3589': 'fr745', - '3596': 'venusq_music', - '3599': 'venusq_music_v2', - '3600': 'venusq', - '3615': 'lily', - '3624': 'marq_adventurer', - '3638': 'enduro', - '3639': 'swim2_apac', - '3648': 'marq_adventurer_asia', - '3652': 'fr945_lte', - '3702': 'descent_mk2_asia', # Mk2 and Mk2i - '3703': 'venu2', - '3704': 'venu2s', - '3737': 'venu_daimler_asia', - '3739': 'marq_golfer', - '3740': 'venu_daimler', - '3794': 'fr745_asia', - '3808': 'varia_rct715', - '3809': 'lily_asia', - '3812': 'edge_1030_plus_asia', - '3813': 'edge_130_plus_asia', - '3823': 'approach_s12', - '3872': 'enduro_asia', - '3837': 'venusq_asia', - '3843': 'edge_1040', - '3850': 'marq_golfer_asia', - '3851': 'venu2_plus', - '3865': 'gnss', # Airoha AG3335M Family - '3869': 'fr55', - '3888': 'instinct_2', - '3889': 'instinct_2s', - '3905': 'fenix7s', - '3906': 'fenix7', - '3907': 'fenix7x', - '3908': 'fenix7s_apac', - '3909': 'fenix7_apac', - '3910': 'fenix7x_apac', - ' 3927': 'approach_g12', - '3930': 'descent_mk2s_asia', - '3934': 'approach_s42', - '3943': 'epix_gen2', - '3944': 'epix_gen2_apac', - '3949': 'venu2s_asia', - '3950': 'venu2_asia', - '3978': 'fr945_lte_asia', - '3982': 'vivo_move_sport', - '3983': 'vivomove_trend', - '3986': 'approach_S12_asia', - '3990': 'fr255_music', - '3991': 'fr255_small_music', - '3992': 'fr255', - '3993': 'fr255_small', - ' 4001': 'approach_g12_asia', - '4002': 'approach_s42_asia', - '4005': 'descent_g1', - '4017': 'venu2_plus_asia', - '4024': 'fr955', - '4033': 'fr55_asia', - '4061': 'edge_540', - '4062': 'edge_840', - '4063': 'vivosmart_5', - '4071': 'instinct_2_asia', - '4105': 'marq_gen2', # Adventurer, Athlete, Captain, Golfer - '4115': 'venusq2', - '4116': 'venusq2music', - '4124': 'marq_gen2_aviator', - '4125': 'd2_air_x10', - '4130': 'hrm_pro_plus', - '4132': 'descent_g1_asia', - '4135': 'tactix7', - '4155': 'instinct_crossover', - '4169': 'edge_explore2', - '4222': 'descent_mk3', - '4223': 'descent_mk3i', - '4233': 'approach_s70', - '4257': 'fr265_large', - '4258': 'fr265_small', - '4260': 'venu3', - '4261': 'venu3s', - '4265': 'tacx_neo_smart', # Neo Smart, Tacx - '4266': 'tacx_neo2_smart', # Neo 2 Smart, Tacx - '4267': 'tacx_neo2_t_smart', # Neo 2T Smart, Tacx - '4268': 'tacx_neo_smart_bike', # Neo Smart Bike, Tacx - '4269': 'tacx_satori_smart', # Satori Smart, Tacx - '4270': 'tacx_flow_smart', # Flow Smart, Tacx - '4271': 'tacx_vortex_smart', # Vortex Smart, Tacx - '4272': 'tacx_bushido_smart', # Bushido Smart, Tacx - '4273': 'tacx_genius_smart', # Genius Smart, Tacx - '4274': 'tacx_flux_flux_s_smart', # Flux/Flux S Smart, Tacx - '4275': 'tacx_flux2_smart', # Flux 2 Smart, Tacx - '4276': 'tacx_magnum', # Magnum, Tacx - '4305': 'edge_1040_asia', - '4312': 'epix_gen2_pro_42', - '4313': 'epix_gen2_pro_47', - '4314': 'epix_gen2_pro_51', - '4315': 'fr965', - '4341': 'enduro2', - '4374': 'fenix7s_pro_solar', - '4375': 'fenix7_pro_solar', - '4376': 'fenix7x_pro_solar', - '4380': 'lily2', - '4394': 'instinct_2x', - '4426': 'vivoactive5', - '4432': 'fr165', - '4433': 'fr165_music', - '4440': 'edge_1050', - '4442': 'descent_t2', - '4446': 'hrm_fit', - '4472': 'marq_gen2_commander', - '4477': 'lily_athlete', # aka the Lily 2 Active - '4525': 'rally_x10', # Rally 110/210 - '4532': 'fenix8_solar', - '4533': 'fenix8_solar_large', - '4534': 'fenix8_small', - '4536': 'fenix8', - '4556': 'd2_mach1_pro', - '4575': 'enduro3', - '4583': 'instinctE_40mm', - '4584': 'instinctE_45mm', - '4585': 'instinct3_solar_45mm', - '4586': 'instinct3_amoled_45mm', - '4587': 'instinct3_amoled_50mm', - '4588': 'descent_g2', - '4603': 'venu_x1', - '4606': 'hrm_200', - '4625': 'vivoactive6', - '4631': 'fenix8_pro', - '4633': 'edge_550', - '4634': 'edge_850', - '4643': 'venu4', - '4644': 'venu4s', - '4647': 'approachS44', - '4655': 'edge_mtb', - '4656': 'approachS50', - '4666': 'fenix_e', - '4745': 'bounce2', - '4759': 'instinct3_solar_50mm', - '4775': 'tactix8_amoled', - '4776': 'tactix8_solar', - '4814': 'fr170_music', - '4815': 'fr170', - '4825': 'approach_j1', - '4879': 'd2_mach2', - '4916': 'fr70_2026', - '4678': 'instinct_crossover_amoled', - '4944': 'd2_air_x15', - '5056': 'd2_mach2_pro', - '10007': 'sdm4', # SDM4 footpod - '10014': 'edge_remote', - '20533': 'tacx_training_app_win', - '20534': 'tacx_training_app_mac', - '20565': 'tacx_training_app_mac_catalyst', - '20119': 'training_center', - '30045': 'tacx_training_app_android', - '30046': 'tacx_training_app_ios', - '30047': 'tacx_training_app_legacy', - '65531': 'connectiq_simulator', - '65532': 'android_antplus_plugin', - '65534': 'connect', # Garmin Connect website + 1: 'hrm1', + 2: 'axh01', # AXH01 HRM chipset + 3: 'axb01', + 4: 'axb02', + 5: 'hrm2ss', + 6: 'dsi_alf02', + 7: 'hrm3ss', + 8: 'hrm_run_single_byte_product_id', # hrm_run model for HRM ANT+ messaging + 9: 'bsm', # BSM model for ANT+ messaging + 10: 'bcm', # BCM model for ANT+ messaging + 11: 'axs01', # AXS01 HRM Bike Chipset model for ANT+ messaging + 12: 'hrm_tri_single_byte_product_id', # hrm_tri model for HRM ANT+ messaging + 13: 'hrm4_run_single_byte_product_id', # hrm4 run model for HRM ANT+ messaging + 14: 'fr225_single_byte_product_id', # fr225 model for HRM ANT+ messaging + 15: 'gen3_bsm_single_byte_product_id', # gen3_bsm model for Bike Speed ANT+ messaging + 16: 'gen3_bcm_single_byte_product_id', # gen3_bcm model for Bike Cadence ANT+ messaging + 22: 'hrm_fit_single_byte_product_id', + 255: 'OHR', # Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting + 473: 'fr301_china', + 474: 'fr301_japan', + 475: 'fr301_korea', + 494: 'fr301_taiwan', + 717: 'fr405', # Forerunner 405 + 782: 'fr50', # Forerunner 50 + 987: 'fr405_japan', + 988: 'fr60', # Forerunner 60 + 1011: 'dsi_alf01', + 1018: 'fr310xt', # Forerunner 310 + 1036: 'edge500', + 1124: 'fr110', # Forerunner 110 + 1169: 'edge800', + 1199: 'edge500_taiwan', + 1213: 'edge500_japan', + 1253: 'chirp', + 1274: 'fr110_japan', + 1325: 'edge200', + 1328: 'fr910xt', + 1333: 'edge800_taiwan', + 1334: 'edge800_japan', + 1341: 'alf04', + 1345: 'fr610', + 1360: 'fr210_japan', + 1380: 'vector_ss', + 1381: 'vector_cp', + 1386: 'edge800_china', + 1387: 'edge500_china', + 1405: 'approach_g10', + 1410: 'fr610_japan', + 1422: 'edge500_korea', + 1436: 'fr70', + 1446: 'fr310xt_4t', + 1461: 'amx', + 1482: 'fr10', + 1497: 'edge800_korea', + 1499: 'swim', + 1537: 'fr910xt_china', + 1551: 'fenix', + 1555: 'edge200_taiwan', + 1561: 'edge510', + 1567: 'edge810', + 1570: 'tempe', + 1600: 'fr910xt_japan', + 1623: 'fr620', + 1632: 'fr220', + 1664: 'fr910xt_korea', + 1688: 'fr10_japan', + 1721: 'edge810_japan', + 1735: 'virb_elite', + 1736: 'edge_touring', # Also Edge Touring Plus + 1742: 'edge510_japan', + 1743: 'hrm_tri', # Also HRM-Swim + 1752: 'hrm_run', + 1765: 'fr920xt', + 1821: 'edge510_asia', + 1822: 'edge810_china', + 1823: 'edge810_taiwan', + 1836: 'edge1000', + 1837: 'vivo_fit', + 1853: 'virb_remote', + 1885: 'vivo_ki', + 1903: 'fr15', + 1907: 'vivo_active', + 1918: 'edge510_korea', + 1928: 'fr620_japan', + 1929: 'fr620_china', + 1930: 'fr220_japan', + 1931: 'fr220_china', + 1936: 'approach_s6', + 1956: 'vivo_smart', + 1967: 'fenix2', + 1988: 'epix', + 2050: 'fenix3', + 2052: 'edge1000_taiwan', + 2053: 'edge1000_japan', + 2061: 'fr15_japan', + 2067: 'edge520', + 2070: 'edge1000_china', + 2072: 'fr620_russia', + 2073: 'fr220_russia', + 2079: 'vector_s', + 2100: 'edge1000_korea', + 2130: 'fr920xt_taiwan', + 2131: 'fr920xt_china', + 2132: 'fr920xt_japan', + 2134: 'virbx', + 2135: 'vivo_smart_apac', + 2140: 'etrex_touch', + 2147: 'edge25', + 2148: 'fr25', + 2150: 'vivo_fit2', + 2153: 'fr225', + 2156: 'fr630', + 2157: 'fr230', + 2158: 'fr735xt', + 2160: 'vivo_active_apac', + 2161: 'vector_2', + 2162: 'vector_2s', + 2172: 'virbxe', + 2173: 'fr620_taiwan', + 2174: 'fr220_taiwan', + 2175: 'truswing', + 2187: 'd2airvenu', + 2188: 'fenix3_china', + 2189: 'fenix3_twn', + 2192: 'varia_headlight', + 2193: 'varia_taillight_old', + 2204: 'edge_explore_1000', + 2219: 'fr225_asia', + 2225: 'varia_radar_taillight', + 2226: 'varia_radar_display', + 2238: 'edge20', + 2260: 'edge520_asia', + 2261: 'edge520_japan', + 2262: 'd2_bravo', + 2266: 'approach_s20', + 2271: 'vivo_smart2', + 2274: 'edge1000_thai', + 2276: 'varia_remote', + 2288: 'edge25_asia', + 2289: 'edge25_jpn', + 2290: 'edge20_asia', + 2292: 'approach_x40', + 2293: 'fenix3_japan', + 2294: 'vivo_smart_emea', + 2310: 'fr630_asia', + 2311: 'fr630_jpn', + 2313: 'fr230_jpn', + 2327: 'hrm4_run', + 2332: 'epix_japan', + 2337: 'vivo_active_hr', + 2347: 'vivo_smart_gps_hr', + 2348: 'vivo_smart_hr', + 2361: 'vivo_smart_hr_asia', + 2362: 'vivo_smart_gps_hr_asia', + 2368: 'vivo_move', + 2379: 'varia_taillight', + 2396: 'fr235_asia', + 2397: 'fr235_japan', + 2398: 'varia_vision', + 2406: 'vivo_fit3', + 2407: 'fenix3_korea', + 2408: 'fenix3_sea', + 2413: 'fenix3_hr', + 2417: 'virb_ultra_30', + 2429: 'index_smart_scale', + 2431: 'fr235', + 2432: 'fenix3_chronos', + 2441: 'oregon7xx', + 2444: 'rino7xx', + 2457: 'epix_korea', + 2473: 'fenix3_hr_chn', + 2474: 'fenix3_hr_twn', + 2475: 'fenix3_hr_jpn', + 2476: 'fenix3_hr_sea', + 2477: 'fenix3_hr_kor', + 2496: 'nautix', + 2497: 'vivo_active_hr_apac', + 2503: 'fr35', + 2512: 'oregon7xx_ww', + 2530: 'edge_820', + 2531: 'edge_explore_820', + 2533: 'fr735xt_apac', + 2534: 'fr735xt_japan', + 2544: 'fenix5s', + 2547: 'd2_bravo_titanium', + 2567: 'varia_ut800', # Varia UT 800 SW + 2593: 'running_dynamics_pod', + 2599: 'edge_820_china', + 2600: 'edge_820_japan', + 2604: 'fenix5x', + 2606: 'vivo_fit_jr', + 2622: 'vivo_smart3', + 2623: 'vivo_sport', + 2628: 'edge_820_taiwan', + 2629: 'edge_820_korea', + 2630: 'edge_820_sea', + 2650: 'fr35_hebrew', + 2656: 'approach_s60', + 2667: 'fr35_apac', + 2668: 'fr35_japan', + 2675: 'fenix3_chronos_asia', + 2687: 'virb_360', + 2691: 'fr935', + 2697: 'fenix5', + 2700: 'vivoactive3', + 2733: 'fr235_china_nfc', + 2769: 'foretrex_601_701', + 2772: 'vivo_move_hr', + 2713: 'edge_1030', + 2727: 'fr35_sea', + 2787: 'vector_3', + 2796: 'fenix5_asia', + 2797: 'fenix5s_asia', + 2798: 'fenix5x_asia', + 2806: 'approach_z80', + 2814: 'fr35_korea', + 2819: 'd2charlie', + 2831: 'vivo_smart3_apac', + 2832: 'vivo_sport_apac', + 2833: 'fr935_asia', + 2859: 'descent', + 2878: 'vivo_fit4', + 2886: 'fr645', + 2888: 'fr645m', + 2891: 'fr30', + 2900: 'fenix5s_plus', + 2909: 'Edge_130', + 2924: 'edge_1030_asia', + 2927: 'vivosmart_4', + 2945: 'vivo_move_hr_asia', + 2962: 'approach_x10', + 2977: 'fr30_asia', + 2988: 'vivoactive3m_w', + 3003: 'fr645_asia', + 3004: 'fr645m_asia', + 3011: 'edge_explore', + 3028: 'gpsmap66', + 3049: 'approach_s10', + 3066: 'vivoactive3m_l', + 3076: 'fr245', + 3077: 'fr245_music', + 3085: 'approach_g80', + 3092: 'edge_130_asia', + 3095: 'edge_1030_bontrager', + 3110: 'fenix5_plus', + 3111: 'fenix5x_plus', + 3112: 'edge_520_plus', + 3113: 'fr945', + 3121: 'edge_530', + 3122: 'edge_830', + 3126: 'instinct_esports', + 3134: 'fenix5s_plus_apac', + 3135: 'fenix5x_plus_apac', + 3142: 'edge_520_plus_apac', + 3143: 'descent_t1', + 3144: 'fr235l_asia', + 3145: 'fr245_asia', + 3163: 'vivo_active3m_apac', + 3192: 'gen3_bsm', # gen3 bike speed sensor + 3193: 'gen3_bcm', # gen3 bike cadence sensor + 3218: 'vivo_smart4_asia', + 3224: 'vivoactive4_small', + 3225: 'vivoactive4_large', + 3226: 'venu', + 3246: 'marq_driver', + 3247: 'marq_aviator', + 3248: 'marq_captain', + 3249: 'marq_commander', + 3250: 'marq_expedition', + 3251: 'marq_athlete', + 3258: 'descent_mk2', + 3282: 'fr45', + 3284: 'gpsmap66i', + 3287: 'fenix6S_sport', + 3288: 'fenix6S', + 3289: 'fenix6_sport', + 3290: 'fenix6', + 3291: 'fenix6x', + 3299: 'hrm_dual', # HRM-Dual + 3300: 'hrm_pro', # HRM-Pro + 3308: 'vivo_move3_premium', + 3314: 'approach_s40', + 3321: 'fr245m_asia', + 3349: 'edge_530_apac', + 3350: 'edge_830_apac', + 3378: 'vivo_move3', + 3387: 'vivo_active4_small_asia', + 3388: 'vivo_active4_large_asia', + 3389: 'vivo_active4_oled_asia', + 3405: 'swim2', + 3420: 'marq_driver_asia', + 3421: 'marq_aviator_asia', + 3422: 'vivo_move3_asia', + 3441: 'fr945_asia', + 3446: 'vivo_active3t_chn', + 3448: 'marq_captain_asia', + 3449: 'marq_commander_asia', + 3450: 'marq_expedition_asia', + 3451: 'marq_athlete_asia', + 3461: 'index_smart_scale_2', + 3466: 'instinct_solar', + 3469: 'fr45_asia', + 3473: 'vivoactive3_daimler', + 3498: 'legacy_rey', + 3499: 'legacy_darth_vader', + 3500: 'legacy_captain_marvel', + 3501: 'legacy_first_avenger', + 3512: 'fenix6s_sport_asia', + 3513: 'fenix6s_asia', + 3514: 'fenix6_sport_asia', + 3515: 'fenix6_asia', + 3516: 'fenix6x_asia', + 3535: 'legacy_captain_marvel_asia', + 3536: 'legacy_first_avenger_asia', + 3537: 'legacy_rey_asia', + 3538: 'legacy_darth_vader_asia', + 3542: 'descent_mk2s', + 3558: 'edge_130_plus', + 3570: 'edge_1030_plus', + 3578: 'rally_200', # Rally 100/200 Power Meter Series + 3589: 'fr745', + 3596: 'venusq_music', + 3599: 'venusq_music_v2', + 3600: 'venusq', + 3615: 'lily', + 3624: 'marq_adventurer', + 3638: 'enduro', + 3639: 'swim2_apac', + 3648: 'marq_adventurer_asia', + 3652: 'fr945_lte', + 3702: 'descent_mk2_asia', # Mk2 and Mk2i + 3703: 'venu2', + 3704: 'venu2s', + 3737: 'venu_daimler_asia', + 3739: 'marq_golfer', + 3740: 'venu_daimler', + 3794: 'fr745_asia', + 3808: 'varia_rct715', + 3809: 'lily_asia', + 3812: 'edge_1030_plus_asia', + 3813: 'edge_130_plus_asia', + 3823: 'approach_s12', + 3872: 'enduro_asia', + 3837: 'venusq_asia', + 3843: 'edge_1040', + 3850: 'marq_golfer_asia', + 3851: 'venu2_plus', + 3865: 'gnss', # Airoha AG3335M Family + 3869: 'fr55', + 3888: 'instinct_2', + 3889: 'instinct_2s', + 3905: 'fenix7s', + 3906: 'fenix7', + 3907: 'fenix7x', + 3908: 'fenix7s_apac', + 3909: 'fenix7_apac', + 3910: 'fenix7x_apac', + 3927: 'approach_g12', + 3930: 'descent_mk2s_asia', + 3934: 'approach_s42', + 3943: 'epix_gen2', + 3944: 'epix_gen2_apac', + 3949: 'venu2s_asia', + 3950: 'venu2_asia', + 3978: 'fr945_lte_asia', + 3982: 'vivo_move_sport', + 3983: 'vivomove_trend', + 3986: 'approach_S12_asia', + 3990: 'fr255_music', + 3991: 'fr255_small_music', + 3992: 'fr255', + 3993: 'fr255_small', + 4001: 'approach_g12_asia', + 4002: 'approach_s42_asia', + 4005: 'descent_g1', + 4017: 'venu2_plus_asia', + 4024: 'fr955', + 4033: 'fr55_asia', + 4061: 'edge_540', + 4062: 'edge_840', + 4063: 'vivosmart_5', + 4071: 'instinct_2_asia', + 4105: 'marq_gen2', # Adventurer, Athlete, Captain, Golfer + 4115: 'venusq2', + 4116: 'venusq2music', + 4124: 'marq_gen2_aviator', + 4125: 'd2_air_x10', + 4130: 'hrm_pro_plus', + 4132: 'descent_g1_asia', + 4135: 'tactix7', + 4155: 'instinct_crossover', + 4169: 'edge_explore2', + 4222: 'descent_mk3', + 4223: 'descent_mk3i', + 4233: 'approach_s70', + 4257: 'fr265_large', + 4258: 'fr265_small', + 4260: 'venu3', + 4261: 'venu3s', + 4265: 'tacx_neo_smart', # Neo Smart, Tacx + 4266: 'tacx_neo2_smart', # Neo 2 Smart, Tacx + 4267: 'tacx_neo2_t_smart', # Neo 2T Smart, Tacx + 4268: 'tacx_neo_smart_bike', # Neo Smart Bike, Tacx + 4269: 'tacx_satori_smart', # Satori Smart, Tacx + 4270: 'tacx_flow_smart', # Flow Smart, Tacx + 4271: 'tacx_vortex_smart', # Vortex Smart, Tacx + 4272: 'tacx_bushido_smart', # Bushido Smart, Tacx + 4273: 'tacx_genius_smart', # Genius Smart, Tacx + 4274: 'tacx_flux_flux_s_smart', # Flux/Flux S Smart, Tacx + 4275: 'tacx_flux2_smart', # Flux 2 Smart, Tacx + 4276: 'tacx_magnum', # Magnum, Tacx + 4305: 'edge_1040_asia', + 4312: 'epix_gen2_pro_42', + 4313: 'epix_gen2_pro_47', + 4314: 'epix_gen2_pro_51', + 4315: 'fr965', + 4341: 'enduro2', + 4374: 'fenix7s_pro_solar', + 4375: 'fenix7_pro_solar', + 4376: 'fenix7x_pro_solar', + 4380: 'lily2', + 4394: 'instinct_2x', + 4426: 'vivoactive5', + 4432: 'fr165', + 4433: 'fr165_music', + 4440: 'edge_1050', + 4442: 'descent_t2', + 4446: 'hrm_fit', + 4472: 'marq_gen2_commander', + 4477: 'lily_athlete', # aka the Lily 2 Active + 4525: 'rally_x10', # Rally 110/210 + 4532: 'fenix8_solar', + 4533: 'fenix8_solar_large', + 4534: 'fenix8_small', + 4536: 'fenix8', + 4556: 'd2_mach1_pro', + 4575: 'enduro3', + 4583: 'instinctE_40mm', + 4584: 'instinctE_45mm', + 4585: 'instinct3_solar_45mm', + 4586: 'instinct3_amoled_45mm', + 4587: 'instinct3_amoled_50mm', + 4588: 'descent_g2', + 4603: 'venu_x1', + 4606: 'hrm_200', + 4625: 'vivoactive6', + 4631: 'fenix8_pro', + 4633: 'edge_550', + 4634: 'edge_850', + 4643: 'venu4', + 4644: 'venu4s', + 4647: 'approachS44', + 4655: 'edge_mtb', + 4656: 'approachS50', + 4666: 'fenix_e', + 4745: 'bounce2', + 4759: 'instinct3_solar_50mm', + 4775: 'tactix8_amoled', + 4776: 'tactix8_solar', + 4814: 'fr170_music', + 4815: 'fr170', + 4825: 'approach_j1', + 4879: 'd2_mach2', + 4916: 'fr70_2026', + 4678: 'instinct_crossover_amoled', + 4944: 'd2_air_x15', + 5056: 'd2_mach2_pro', + 10007: 'sdm4', # SDM4 footpod + 10014: 'edge_remote', + 20533: 'tacx_training_app_win', + 20534: 'tacx_training_app_mac', + 20565: 'tacx_training_app_mac_catalyst', + 20119: 'training_center', + 30045: 'tacx_training_app_android', + 30046: 'tacx_training_app_ios', + 30047: 'tacx_training_app_legacy', + 65531: 'connectiq_simulator', + 65532: 'android_antplus_plugin', + 65534: 'connect', # Garmin Connect website }, 'antplus_device_type': { - '1': 'antfs', - '11': 'bike_power', - '12': 'environment_sensor_legacy', - '15': 'multi_sport_speed_distance', - '16': 'control', - '17': 'fitness_equipment', - '18': 'blood_pressure', - '19': 'geocache_node', - '20': 'light_electric_vehicle', - '25': 'env_sensor', - '26': 'racquet', - '27': 'control_hub', - '31': 'muscle_oxygen', - '34': 'shifting', - '35': 'bike_light_main', - '36': 'bike_light_shared', - '38': 'exd', - '40': 'bike_radar', - '46': 'bike_aero', - '119': 'weight_scale', - '120': 'heart_rate', - '121': 'bike_speed_cadence', - '122': 'bike_cadence', - '123': 'bike_speed', - '124': 'stride_speed_distance', + 1: 'antfs', + 11: 'bike_power', + 12: 'environment_sensor_legacy', + 15: 'multi_sport_speed_distance', + 16: 'control', + 17: 'fitness_equipment', + 18: 'blood_pressure', + 19: 'geocache_node', + 20: 'light_electric_vehicle', + 25: 'env_sensor', + 26: 'racquet', + 27: 'control_hub', + 31: 'muscle_oxygen', + 34: 'shifting', + 35: 'bike_light_main', + 36: 'bike_light_shared', + 38: 'exd', + 40: 'bike_radar', + 46: 'bike_aero', + 119: 'weight_scale', + 120: 'heart_rate', + 121: 'bike_speed_cadence', + 122: 'bike_cadence', + 123: 'bike_speed', + 124: 'stride_speed_distance', }, 'ant_network': { - '0': 'public', - '1': 'antplus', - '2': 'antfs', - '3': 'private', + 0: 'public', + 1: 'antplus', + 2: 'antfs', + 3: 'private', }, 'workout_capabilities': { - '0x00000001': 'interval', - '0x00000002': 'custom', - '0x00000004': 'fitness_equipment', - '0x00000008': 'firstbeat', - '0x00000010': 'new_leaf', - '0x00000020': 'tcx', # For backwards compatibility. Watch should add missing id fields then clear flag. - '0x00000080': 'speed', # Speed source required for workout step. - '0x00000100': 'heart_rate', # Heart rate source required for workout step. - '0x00000200': 'distance', # Distance source required for workout step. - '0x00000400': 'cadence', # Cadence source required for workout step. - '0x00000800': 'power', # Power source required for workout step. - '0x00001000': 'grade', # Grade source required for workout step. - '0x00002000': 'resistance', # Resistance source required for workout step. - '0x00004000': 'protected', + 0x00000001: 'interval', + 0x00000002: 'custom', + 0x00000004: 'fitness_equipment', + 0x00000008: 'firstbeat', + 0x00000010: 'new_leaf', + 0x00000020: 'tcx', # For backwards compatibility. Watch should add missing id fields then clear flag. + 0x00000080: 'speed', # Speed source required for workout step. + 0x00000100: 'heart_rate', # Heart rate source required for workout step. + 0x00000200: 'distance', # Distance source required for workout step. + 0x00000400: 'cadence', # Cadence source required for workout step. + 0x00000800: 'power', # Power source required for workout step. + 0x00001000: 'grade', # Grade source required for workout step. + 0x00002000: 'resistance', # Resistance source required for workout step. + 0x00004000: 'protected', }, 'battery_status': { - '1': 'new', - '2': 'good', - '3': 'ok', - '4': 'low', - '5': 'critical', - '6': 'charging', - '7': 'unknown', + 1: 'new', + 2: 'good', + 3: 'ok', + 4: 'low', + 5: 'critical', + 6: 'charging', + 7: 'unknown', }, 'hr_type': { - '0': 'normal', - '1': 'irregular', + 0: 'normal', + 1: 'irregular', }, 'course_capabilities': { - '0x00000001': 'processed', - '0x00000002': 'valid', - '0x00000004': 'time', - '0x00000008': 'distance', - '0x00000010': 'position', - '0x00000020': 'heart_rate', - '0x00000040': 'power', - '0x00000080': 'cadence', - '0x00000100': 'training', - '0x00000200': 'navigation', - '0x00000400': 'bikeway', - '0x00001000': 'aviation', # Denote course files to be used as flight plans + 0x00000001: 'processed', + 0x00000002: 'valid', + 0x00000004: 'time', + 0x00000008: 'distance', + 0x00000010: 'position', + 0x00000020: 'heart_rate', + 0x00000040: 'power', + 0x00000080: 'cadence', + 0x00000100: 'training', + 0x00000200: 'navigation', + 0x00000400: 'bikeway', + 0x00001000: 'aviation', # Denote course files to be used as flight plans }, 'weight': { - '0xFFFE': 'calculating', + 0xFFFE: 'calculating', }, 'workout_hr': { - '100': 'bpm_offset', + 100: 'bpm_offset', }, 'workout_power': { - '1000': 'watts_offset', + 1000: 'watts_offset', }, 'bp_status': { - '0': 'no_error', - '1': 'error_incomplete_data', - '2': 'error_no_measurement', - '3': 'error_data_out_of_range', - '4': 'error_irregular_heart_rate', + 0: 'no_error', + 1: 'error_incomplete_data', + 2: 'error_no_measurement', + 3: 'error_data_out_of_range', + 4: 'error_irregular_heart_rate', }, 'user_local_id': { - '0x0000': 'local_min', - '0x000F': 'local_max', - '0x0010': 'stationary_min', - '0x00FF': 'stationary_max', - '0x0100': 'portable_min', - '0xFFFE': 'portable_max', + 0x0000: 'local_min', + 0x000F: 'local_max', + 0x0010: 'stationary_min', + 0x00FF: 'stationary_max', + 0x0100: 'portable_min', + 0xFFFE: 'portable_max', }, 'swim_stroke': { - '0': 'freestyle', - '1': 'backstroke', - '2': 'breaststroke', - '3': 'butterfly', - '4': 'drill', - '5': 'mixed', - '6': 'im', # IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order. - '7': 'im_by_round', # For repeated workout steps, a new individual medly stroke is used for each round. - '8': 'rimo', # Reverse IM Order + 0: 'freestyle', + 1: 'backstroke', + 2: 'breaststroke', + 3: 'butterfly', + 4: 'drill', + 5: 'mixed', + 6: 'im', # IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order. + 7: 'im_by_round', # For repeated workout steps, a new individual medly stroke is used for each round. + 8: 'rimo', # Reverse IM Order }, 'activity_type': { - '0': 'generic', - '1': 'running', - '2': 'cycling', - '3': 'transition', # Mulitsport transition - '4': 'fitness_equipment', - '5': 'swimming', - '6': 'walking', - '8': 'sedentary', - '254': 'all', # All is for goals only to include all sports. + 0: 'generic', + 1: 'running', + 2: 'cycling', + 3: 'transition', # Mulitsport transition + 4: 'fitness_equipment', + 5: 'swimming', + 6: 'walking', + 8: 'sedentary', + 254: 'all', # All is for goals only to include all sports. }, 'activity_subtype': { - '0': 'generic', - '1': 'treadmill', # Run - '2': 'street', # Run - '3': 'trail', # Run - '4': 'track', # Run - '5': 'spin', # Cycling - '6': 'indoor_cycling', # Cycling - '7': 'road', # Cycling - '8': 'mountain', # Cycling - '9': 'downhill', # Cycling - '10': 'recumbent', # Cycling - '11': 'cyclocross', # Cycling - '12': 'hand_cycling', # Cycling - '13': 'track_cycling', # Cycling - '14': 'indoor_rowing', # Fitness Equipment - '15': 'elliptical', # Fitness Equipment - '16': 'stair_climbing', # Fitness Equipment - '17': 'lap_swimming', # Swimming - '18': 'open_water', # Swimming - '254': 'all', + 0: 'generic', + 1: 'treadmill', # Run + 2: 'street', # Run + 3: 'trail', # Run + 4: 'track', # Run + 5: 'spin', # Cycling + 6: 'indoor_cycling', # Cycling + 7: 'road', # Cycling + 8: 'mountain', # Cycling + 9: 'downhill', # Cycling + 10: 'recumbent', # Cycling + 11: 'cyclocross', # Cycling + 12: 'hand_cycling', # Cycling + 13: 'track_cycling', # Cycling + 14: 'indoor_rowing', # Fitness Equipment + 15: 'elliptical', # Fitness Equipment + 16: 'stair_climbing', # Fitness Equipment + 17: 'lap_swimming', # Swimming + 18: 'open_water', # Swimming + 254: 'all', }, 'activity_level': { - '0': 'low', - '1': 'medium', - '2': 'high', + 0: 'low', + 1: 'medium', + 2: 'high', }, 'side': { - '0': 'right', - '1': 'left', + 0: 'right', + 1: 'left', }, 'left_right_balance': { - '0x7F': 'mask', # % contribution - '0x80': 'right', # data corresponds to right if set, otherwise unknown + 0x7F: 'mask', # % contribution + 0x80: 'right', # data corresponds to right if set, otherwise unknown }, 'left_right_balance_100': { - '0x3FFF': 'mask', # % contribution scaled by 100 - '0x8000': 'right', # data corresponds to right if set, otherwise unknown + 0x3FFF: 'mask', # % contribution scaled by 100 + 0x8000: 'right', # data corresponds to right if set, otherwise unknown }, 'length_type': { - '0': 'idle', # Rest period. Length with no strokes - '1': 'active', # Length with strokes. + 0: 'idle', # Rest period. Length with no strokes + 1: 'active', # Length with strokes. }, 'day_of_week': { - '0': 'sunday', - '1': 'monday', - '2': 'tuesday', - '3': 'wednesday', - '4': 'thursday', - '5': 'friday', - '6': 'saturday', + 0: 'sunday', + 1: 'monday', + 2: 'tuesday', + 3: 'wednesday', + 4: 'thursday', + 5: 'friday', + 6: 'saturday', }, 'connectivity_capabilities': { - '0x00000001': 'bluetooth', - '0x00000002': 'bluetooth_le', - '0x00000004': 'ant', - '0x00000008': 'activity_upload', - '0x00000010': 'course_download', - '0x00000020': 'workout_download', - '0x00000040': 'live_track', - '0x00000080': 'weather_conditions', - '0x00000100': 'weather_alerts', - '0x00000200': 'gps_ephemeris_download', - '0x00000400': 'explicit_archive', - '0x00000800': 'setup_incomplete', - '0x00001000': 'continue_sync_after_software_update', - '0x00002000': 'connect_iq_app_download', - '0x00004000': 'golf_course_download', - '0x00008000': 'device_initiates_sync', # Indicates device is in control of initiating all syncs - '0x00010000': 'connect_iq_watch_app_download', - '0x00020000': 'connect_iq_widget_download', - '0x00040000': 'connect_iq_watch_face_download', - '0x00080000': 'connect_iq_data_field_download', - '0x00100000': 'connect_iq_app_managment', # Device supports delete and reorder of apps via GCM - '0x00200000': 'swing_sensor', - '0x00400000': 'swing_sensor_remote', - '0x00800000': 'incident_detection', # Device supports incident detection - '0x01000000': 'audio_prompts', - '0x02000000': 'wifi_verification', # Device supports reporting wifi verification via GCM - '0x04000000': 'true_up', # Device supports True Up - '0x08000000': 'find_my_watch', # Device supports Find My Watch - '0x10000000': 'remote_manual_sync', - '0x20000000': 'live_track_auto_start', # Device supports LiveTrack auto start - '0x40000000': 'live_track_messaging', # Device supports LiveTrack Messaging - '0x80000000': 'instant_input', # Device supports instant input feature + 0x00000001: 'bluetooth', + 0x00000002: 'bluetooth_le', + 0x00000004: 'ant', + 0x00000008: 'activity_upload', + 0x00000010: 'course_download', + 0x00000020: 'workout_download', + 0x00000040: 'live_track', + 0x00000080: 'weather_conditions', + 0x00000100: 'weather_alerts', + 0x00000200: 'gps_ephemeris_download', + 0x00000400: 'explicit_archive', + 0x00000800: 'setup_incomplete', + 0x00001000: 'continue_sync_after_software_update', + 0x00002000: 'connect_iq_app_download', + 0x00004000: 'golf_course_download', + 0x00008000: 'device_initiates_sync', # Indicates device is in control of initiating all syncs + 0x00010000: 'connect_iq_watch_app_download', + 0x00020000: 'connect_iq_widget_download', + 0x00040000: 'connect_iq_watch_face_download', + 0x00080000: 'connect_iq_data_field_download', + 0x00100000: 'connect_iq_app_managment', # Device supports delete and reorder of apps via GCM + 0x00200000: 'swing_sensor', + 0x00400000: 'swing_sensor_remote', + 0x00800000: 'incident_detection', # Device supports incident detection + 0x01000000: 'audio_prompts', + 0x02000000: 'wifi_verification', # Device supports reporting wifi verification via GCM + 0x04000000: 'true_up', # Device supports True Up + 0x08000000: 'find_my_watch', # Device supports Find My Watch + 0x10000000: 'remote_manual_sync', + 0x20000000: 'live_track_auto_start', # Device supports LiveTrack auto start + 0x40000000: 'live_track_messaging', # Device supports LiveTrack Messaging + 0x80000000: 'instant_input', # Device supports instant input feature }, 'weather_report': { - '0': 'current', - '1': 'forecast', # Deprecated use hourly_forecast instead - '1': 'hourly_forecast', - '2': 'daily_forecast', + 0: 'current', + 1: 'forecast', # Deprecated use hourly_forecast instead + 1: 'hourly_forecast', + 2: 'daily_forecast', }, 'weather_status': { - '0': 'clear', - '1': 'partly_cloudy', - '2': 'mostly_cloudy', - '3': 'rain', - '4': 'snow', - '5': 'windy', - '6': 'thunderstorms', - '7': 'wintry_mix', - '8': 'fog', - '11': 'hazy', - '12': 'hail', - '13': 'scattered_showers', - '14': 'scattered_thunderstorms', - '15': 'unknown_precipitation', - '16': 'light_rain', - '17': 'heavy_rain', - '18': 'light_snow', - '19': 'heavy_snow', - '20': 'light_rain_snow', - '21': 'heavy_rain_snow', - '22': 'cloudy', + 0: 'clear', + 1: 'partly_cloudy', + 2: 'mostly_cloudy', + 3: 'rain', + 4: 'snow', + 5: 'windy', + 6: 'thunderstorms', + 7: 'wintry_mix', + 8: 'fog', + 11: 'hazy', + 12: 'hail', + 13: 'scattered_showers', + 14: 'scattered_thunderstorms', + 15: 'unknown_precipitation', + 16: 'light_rain', + 17: 'heavy_rain', + 18: 'light_snow', + 19: 'heavy_snow', + 20: 'light_rain_snow', + 21: 'heavy_rain_snow', + 22: 'cloudy', }, 'weather_severity': { - '0': 'unknown', - '1': 'warning', - '2': 'watch', - '3': 'advisory', - '4': 'statement', + 0: 'unknown', + 1: 'warning', + 2: 'watch', + 3: 'advisory', + 4: 'statement', }, 'weather_severe_type': { - '0': 'unspecified', - '1': 'tornado', - '2': 'tsunami', - '3': 'hurricane', - '4': 'extreme_wind', - '5': 'typhoon', - '6': 'inland_hurricane', - '7': 'hurricane_force_wind', - '8': 'waterspout', - '9': 'severe_thunderstorm', - '10': 'wreckhouse_winds', - '11': 'les_suetes_wind', - '12': 'avalanche', - '13': 'flash_flood', - '14': 'tropical_storm', - '15': 'inland_tropical_storm', - '16': 'blizzard', - '17': 'ice_storm', - '18': 'freezing_rain', - '19': 'debris_flow', - '20': 'flash_freeze', - '21': 'dust_storm', - '22': 'high_wind', - '23': 'winter_storm', - '24': 'heavy_freezing_spray', - '25': 'extreme_cold', - '26': 'wind_chill', - '27': 'cold_wave', - '28': 'heavy_snow_alert', - '29': 'lake_effect_blowing_snow', - '30': 'snow_squall', - '31': 'lake_effect_snow', - '32': 'winter_weather', - '33': 'sleet', - '34': 'snowfall', - '35': 'snow_and_blowing_snow', - '36': 'blowing_snow', - '37': 'snow_alert', - '38': 'arctic_outflow', - '39': 'freezing_drizzle', - '40': 'storm', - '41': 'storm_surge', - '42': 'rainfall', - '43': 'areal_flood', - '44': 'coastal_flood', - '45': 'lakeshore_flood', - '46': 'excessive_heat', - '47': 'heat', - '48': 'weather', - '49': 'high_heat_and_humidity', - '50': 'humidex_and_health', - '51': 'humidex', - '52': 'gale', - '53': 'freezing_spray', - '54': 'special_marine', - '55': 'squall', - '56': 'strong_wind', - '57': 'lake_wind', - '58': 'marine_weather', - '59': 'wind', - '60': 'small_craft_hazardous_seas', - '61': 'hazardous_seas', - '62': 'small_craft', - '63': 'small_craft_winds', - '64': 'small_craft_rough_bar', - '65': 'high_water_level', - '66': 'ashfall', - '67': 'freezing_fog', - '68': 'dense_fog', - '69': 'dense_smoke', - '70': 'blowing_dust', - '71': 'hard_freeze', - '72': 'freeze', - '73': 'frost', - '74': 'fire_weather', - '75': 'flood', - '76': 'rip_tide', - '77': 'high_surf', - '78': 'smog', - '79': 'air_quality', - '80': 'brisk_wind', - '81': 'air_stagnation', - '82': 'low_water', - '83': 'hydrological', - '84': 'special_weather', + 0: 'unspecified', + 1: 'tornado', + 2: 'tsunami', + 3: 'hurricane', + 4: 'extreme_wind', + 5: 'typhoon', + 6: 'inland_hurricane', + 7: 'hurricane_force_wind', + 8: 'waterspout', + 9: 'severe_thunderstorm', + 10: 'wreckhouse_winds', + 11: 'les_suetes_wind', + 12: 'avalanche', + 13: 'flash_flood', + 14: 'tropical_storm', + 15: 'inland_tropical_storm', + 16: 'blizzard', + 17: 'ice_storm', + 18: 'freezing_rain', + 19: 'debris_flow', + 20: 'flash_freeze', + 21: 'dust_storm', + 22: 'high_wind', + 23: 'winter_storm', + 24: 'heavy_freezing_spray', + 25: 'extreme_cold', + 26: 'wind_chill', + 27: 'cold_wave', + 28: 'heavy_snow_alert', + 29: 'lake_effect_blowing_snow', + 30: 'snow_squall', + 31: 'lake_effect_snow', + 32: 'winter_weather', + 33: 'sleet', + 34: 'snowfall', + 35: 'snow_and_blowing_snow', + 36: 'blowing_snow', + 37: 'snow_alert', + 38: 'arctic_outflow', + 39: 'freezing_drizzle', + 40: 'storm', + 41: 'storm_surge', + 42: 'rainfall', + 43: 'areal_flood', + 44: 'coastal_flood', + 45: 'lakeshore_flood', + 46: 'excessive_heat', + 47: 'heat', + 48: 'weather', + 49: 'high_heat_and_humidity', + 50: 'humidex_and_health', + 51: 'humidex', + 52: 'gale', + 53: 'freezing_spray', + 54: 'special_marine', + 55: 'squall', + 56: 'strong_wind', + 57: 'lake_wind', + 58: 'marine_weather', + 59: 'wind', + 60: 'small_craft_hazardous_seas', + 61: 'hazardous_seas', + 62: 'small_craft', + 63: 'small_craft_winds', + 64: 'small_craft_rough_bar', + 65: 'high_water_level', + 66: 'ashfall', + 67: 'freezing_fog', + 68: 'dense_fog', + 69: 'dense_smoke', + 70: 'blowing_dust', + 71: 'hard_freeze', + 72: 'freeze', + 73: 'frost', + 74: 'fire_weather', + 75: 'flood', + 76: 'rip_tide', + 77: 'high_surf', + 78: 'smog', + 79: 'air_quality', + 80: 'brisk_wind', + 81: 'air_stagnation', + 82: 'low_water', + 83: 'hydrological', + 84: 'special_weather', }, 'time_into_day': { }, 'localtime_into_day': { }, 'stroke_type': { - '0': 'no_event', - '1': 'other', # stroke was detected but cannot be identified - '2': 'serve', - '3': 'forehand', - '4': 'backhand', - '5': 'smash', + 0: 'no_event', + 1: 'other', # stroke was detected but cannot be identified + 2: 'serve', + 3: 'forehand', + 4: 'backhand', + 5: 'smash', }, 'body_location': { - '0': 'left_leg', - '1': 'left_calf', - '2': 'left_shin', - '3': 'left_hamstring', - '4': 'left_quad', - '5': 'left_glute', - '6': 'right_leg', - '7': 'right_calf', - '8': 'right_shin', - '9': 'right_hamstring', - '10': 'right_quad', - '11': 'right_glute', - '12': 'torso_back', - '13': 'left_lower_back', - '14': 'left_upper_back', - '15': 'right_lower_back', - '16': 'right_upper_back', - '17': 'torso_front', - '18': 'left_abdomen', - '19': 'left_chest', - '20': 'right_abdomen', - '21': 'right_chest', - '22': 'left_arm', - '23': 'left_shoulder', - '24': 'left_bicep', - '25': 'left_tricep', - '26': 'left_brachioradialis', # Left anterior forearm - '27': 'left_forearm_extensors', # Left posterior forearm - '28': 'right_arm', - '29': 'right_shoulder', - '30': 'right_bicep', - '31': 'right_tricep', - '32': 'right_brachioradialis', # Right anterior forearm - '33': 'right_forearm_extensors', # Right posterior forearm - '34': 'neck', - '35': 'throat', - '36': 'waist_mid_back', - '37': 'waist_front', - '38': 'waist_left', - '39': 'waist_right', + 0: 'left_leg', + 1: 'left_calf', + 2: 'left_shin', + 3: 'left_hamstring', + 4: 'left_quad', + 5: 'left_glute', + 6: 'right_leg', + 7: 'right_calf', + 8: 'right_shin', + 9: 'right_hamstring', + 10: 'right_quad', + 11: 'right_glute', + 12: 'torso_back', + 13: 'left_lower_back', + 14: 'left_upper_back', + 15: 'right_lower_back', + 16: 'right_upper_back', + 17: 'torso_front', + 18: 'left_abdomen', + 19: 'left_chest', + 20: 'right_abdomen', + 21: 'right_chest', + 22: 'left_arm', + 23: 'left_shoulder', + 24: 'left_bicep', + 25: 'left_tricep', + 26: 'left_brachioradialis', # Left anterior forearm + 27: 'left_forearm_extensors', # Left posterior forearm + 28: 'right_arm', + 29: 'right_shoulder', + 30: 'right_bicep', + 31: 'right_tricep', + 32: 'right_brachioradialis', # Right anterior forearm + 33: 'right_forearm_extensors', # Right posterior forearm + 34: 'neck', + 35: 'throat', + 36: 'waist_mid_back', + 37: 'waist_front', + 38: 'waist_left', + 39: 'waist_right', }, 'segment_lap_status': { - '0': 'end', - '1': 'fail', + 0: 'end', + 1: 'fail', }, 'segment_leaderboard_type': { - '0': 'overall', - '1': 'personal_best', - '2': 'connections', - '3': 'group', - '4': 'challenger', - '5': 'kom', - '6': 'qom', - '7': 'pr', - '8': 'goal', - '9': 'carrot', - '10': 'club_leader', - '11': 'rival', - '12': 'last', - '13': 'recent_best', - '14': 'course_record', + 0: 'overall', + 1: 'personal_best', + 2: 'connections', + 3: 'group', + 4: 'challenger', + 5: 'kom', + 6: 'qom', + 7: 'pr', + 8: 'goal', + 9: 'carrot', + 10: 'club_leader', + 11: 'rival', + 12: 'last', + 13: 'recent_best', + 14: 'course_record', }, 'segment_delete_status': { - '0': 'do_not_delete', - '1': 'delete_one', - '2': 'delete_all', + 0: 'do_not_delete', + 1: 'delete_one', + 2: 'delete_all', }, 'segment_selection_type': { - '0': 'starred', - '1': 'suggested', + 0: 'starred', + 1: 'suggested', }, 'source_type': { - '0': 'ant', # External device connected with ANT - '1': 'antplus', # External device connected with ANT+ - '2': 'bluetooth', # External device connected with BT - '3': 'bluetooth_low_energy', # External device connected with BLE - '4': 'wifi', # External device connected with Wifi - '5': 'local', # Onboard device + 0: 'ant', # External device connected with ANT + 1: 'antplus', # External device connected with ANT+ + 2: 'bluetooth', # External device connected with BT + 3: 'bluetooth_low_energy', # External device connected with BLE + 4: 'wifi', # External device connected with Wifi + 5: 'local', # Onboard device }, 'local_device_type': { - '0': 'gps', # Onboard gps receiver - '1': 'glonass', # Onboard glonass receiver - '2': 'gps_glonass', # Onboard gps glonass receiver - '3': 'accelerometer', # Onboard sensor - '4': 'barometer', # Onboard sensor - '5': 'temperature', # Onboard sensor - '10': 'whr', # Onboard wrist HR sensor - '12': 'sensor_hub', # Onboard software package + 0: 'gps', # Onboard gps receiver + 1: 'glonass', # Onboard glonass receiver + 2: 'gps_glonass', # Onboard gps glonass receiver + 3: 'accelerometer', # Onboard sensor + 4: 'barometer', # Onboard sensor + 5: 'temperature', # Onboard sensor + 10: 'whr', # Onboard wrist HR sensor + 12: 'sensor_hub', # Onboard software package }, 'ble_device_type': { - '0': 'connected_gps', # GPS that is provided over a proprietary bluetooth service - '1': 'heart_rate', - '2': 'bike_power', - '3': 'bike_speed_cadence', - '4': 'bike_speed', - '5': 'bike_cadence', - '6': 'footpod', - '7': 'bike_trainer', # Indoor-Bike FTMS protocol + 0: 'connected_gps', # GPS that is provided over a proprietary bluetooth service + 1: 'heart_rate', + 2: 'bike_power', + 3: 'bike_speed_cadence', + 4: 'bike_speed', + 5: 'bike_cadence', + 6: 'footpod', + 7: 'bike_trainer', # Indoor-Bike FTMS protocol }, 'ant_channel_id': { - '0xF0000000': 'ant_extended_device_number_upper_nibble', - '0x0F000000': 'ant_transmission_type_lower_nibble', - '0x00FF0000': 'ant_device_type', - '0x0000FFFF': 'ant_device_number', + 0xF0000000: 'ant_extended_device_number_upper_nibble', + 0x0F000000: 'ant_transmission_type_lower_nibble', + 0x00FF0000: 'ant_device_type', + 0x0000FFFF: 'ant_device_number', }, 'display_orientation': { - '0': 'auto', # automatic if the device supports it - '1': 'portrait', - '2': 'landscape', - '3': 'portrait_flipped', # portrait mode but rotated 180 degrees - '4': 'landscape_flipped', # landscape mode but rotated 180 degrees + 0: 'auto', # automatic if the device supports it + 1: 'portrait', + 2: 'landscape', + 3: 'portrait_flipped', # portrait mode but rotated 180 degrees + 4: 'landscape_flipped', # landscape mode but rotated 180 degrees }, 'workout_equipment': { - '0': 'none', - '1': 'swim_fins', - '2': 'swim_kickboard', - '3': 'swim_paddles', - '4': 'swim_pull_buoy', - '5': 'swim_snorkel', + 0: 'none', + 1: 'swim_fins', + 2: 'swim_kickboard', + 3: 'swim_paddles', + 4: 'swim_pull_buoy', + 5: 'swim_snorkel', }, 'watchface_mode': { - '0': 'digital', - '1': 'analog', - '2': 'connect_iq', - '3': 'disabled', + 0: 'digital', + 1: 'analog', + 2: 'connect_iq', + 3: 'disabled', }, 'digital_watchface_layout': { - '0': 'traditional', - '1': 'modern', - '2': 'bold', + 0: 'traditional', + 1: 'modern', + 2: 'bold', }, 'analog_watchface_layout': { - '0': 'minimal', - '1': 'traditional', - '2': 'modern', + 0: 'minimal', + 1: 'traditional', + 2: 'modern', }, 'rider_position_type': { - '0': 'seated', - '1': 'standing', - '2': 'transition_to_seated', - '3': 'transition_to_standing', + 0: 'seated', + 1: 'standing', + 2: 'transition_to_seated', + 3: 'transition_to_standing', }, 'power_phase_type': { - '0': 'power_phase_start_angle', - '1': 'power_phase_end_angle', - '2': 'power_phase_arc_length', - '3': 'power_phase_center', + 0: 'power_phase_start_angle', + 1: 'power_phase_end_angle', + 2: 'power_phase_arc_length', + 3: 'power_phase_center', }, 'camera_event_type': { - '0': 'video_start', # Start of video recording - '1': 'video_split', # Mark of video file split (end of one file, beginning of the other) - '2': 'video_end', # End of video recording - '3': 'photo_taken', # Still photo taken - '4': 'video_second_stream_start', - '5': 'video_second_stream_split', - '6': 'video_second_stream_end', - '7': 'video_split_start', # Mark of video file split start - '8': 'video_second_stream_split_start', - '11': 'video_pause', # Mark when a video recording has been paused - '12': 'video_second_stream_pause', - '13': 'video_resume', # Mark when a video recording has been resumed - '14': 'video_second_stream_resume', + 0: 'video_start', # Start of video recording + 1: 'video_split', # Mark of video file split (end of one file, beginning of the other) + 2: 'video_end', # End of video recording + 3: 'photo_taken', # Still photo taken + 4: 'video_second_stream_start', + 5: 'video_second_stream_split', + 6: 'video_second_stream_end', + 7: 'video_split_start', # Mark of video file split start + 8: 'video_second_stream_split_start', + 11: 'video_pause', # Mark when a video recording has been paused + 12: 'video_second_stream_pause', + 13: 'video_resume', # Mark when a video recording has been resumed + 14: 'video_second_stream_resume', }, 'sensor_type': { - '0': 'accelerometer', - '1': 'gyroscope', - '2': 'compass', # Magnetometer - '3': 'barometer', + 0: 'accelerometer', + 1: 'gyroscope', + 2: 'compass', # Magnetometer + 3: 'barometer', }, 'bike_light_network_config_type': { - '0': 'auto', - '4': 'individual', - '5': 'high_visibility', - '6': 'trail', + 0: 'auto', + 4: 'individual', + 5: 'high_visibility', + 6: 'trail', }, 'comm_timeout_type': { - '0': 'wildcard_pairing_timeout', # Timeout pairing to any device - '1': 'pairing_timeout', # Timeout pairing to previously paired device - '2': 'connection_lost', # Temporary loss of communications - '3': 'connection_timeout', # Connection closed due to extended bad communications + 0: 'wildcard_pairing_timeout', # Timeout pairing to any device + 1: 'pairing_timeout', # Timeout pairing to previously paired device + 2: 'connection_lost', # Temporary loss of communications + 3: 'connection_timeout', # Connection closed due to extended bad communications }, 'camera_orientation_type': { - '0': 'camera_orientation_0', - '1': 'camera_orientation_90', - '2': 'camera_orientation_180', - '3': 'camera_orientation_270', + 0: 'camera_orientation_0', + 1: 'camera_orientation_90', + 2: 'camera_orientation_180', + 3: 'camera_orientation_270', }, 'attitude_stage': { - '0': 'failed', - '1': 'aligning', - '2': 'degraded', - '3': 'valid', + 0: 'failed', + 1: 'aligning', + 2: 'degraded', + 3: 'valid', }, 'attitude_validity': { - '0x0001': 'track_angle_heading_valid', - '0x0002': 'pitch_valid', - '0x0004': 'roll_valid', - '0x0008': 'lateral_body_accel_valid', - '0x0010': 'normal_body_accel_valid', - '0x0020': 'turn_rate_valid', - '0x0040': 'hw_fail', - '0x0080': 'mag_invalid', - '0x0100': 'no_gps', - '0x0200': 'gps_invalid', - '0x0400': 'solution_coasting', - '0x0800': 'true_track_angle', - '0x1000': 'magnetic_heading', + 0x0001: 'track_angle_heading_valid', + 0x0002: 'pitch_valid', + 0x0004: 'roll_valid', + 0x0008: 'lateral_body_accel_valid', + 0x0010: 'normal_body_accel_valid', + 0x0020: 'turn_rate_valid', + 0x0040: 'hw_fail', + 0x0080: 'mag_invalid', + 0x0100: 'no_gps', + 0x0200: 'gps_invalid', + 0x0400: 'solution_coasting', + 0x0800: 'true_track_angle', + 0x1000: 'magnetic_heading', }, 'auto_sync_frequency': { - '0': 'never', - '1': 'occasionally', - '2': 'frequent', - '3': 'once_a_day', - '4': 'remote', + 0: 'never', + 1: 'occasionally', + 2: 'frequent', + 3: 'once_a_day', + 4: 'remote', }, 'exd_layout': { - '0': 'full_screen', - '1': 'half_vertical', - '2': 'half_horizontal', - '3': 'half_vertical_right_split', - '4': 'half_horizontal_bottom_split', - '5': 'full_quarter_split', - '6': 'half_vertical_left_split', - '7': 'half_horizontal_top_split', - '8': 'dynamic', # The EXD may display the configured concepts in any layout it sees fit. + 0: 'full_screen', + 1: 'half_vertical', + 2: 'half_horizontal', + 3: 'half_vertical_right_split', + 4: 'half_horizontal_bottom_split', + 5: 'full_quarter_split', + 6: 'half_vertical_left_split', + 7: 'half_horizontal_top_split', + 8: 'dynamic', # The EXD may display the configured concepts in any layout it sees fit. }, 'exd_display_type': { - '0': 'numerical', - '1': 'simple', - '2': 'graph', - '3': 'bar', - '4': 'circle_graph', - '5': 'virtual_partner', - '6': 'balance', - '7': 'string_list', - '8': 'string', - '9': 'simple_dynamic_icon', - '10': 'gauge', + 0: 'numerical', + 1: 'simple', + 2: 'graph', + 3: 'bar', + 4: 'circle_graph', + 5: 'virtual_partner', + 6: 'balance', + 7: 'string_list', + 8: 'string', + 9: 'simple_dynamic_icon', + 10: 'gauge', }, 'exd_data_units': { - '0': 'no_units', - '1': 'laps', - '2': 'miles_per_hour', - '3': 'kilometers_per_hour', - '4': 'feet_per_hour', - '5': 'meters_per_hour', - '6': 'degrees_celsius', - '7': 'degrees_farenheit', - '8': 'zone', - '9': 'gear', - '10': 'rpm', - '11': 'bpm', - '12': 'degrees', - '13': 'millimeters', - '14': 'meters', - '15': 'kilometers', - '16': 'feet', - '17': 'yards', - '18': 'kilofeet', - '19': 'miles', - '20': 'time', - '21': 'enum_turn_type', - '22': 'percent', - '23': 'watts', - '24': 'watts_per_kilogram', - '25': 'enum_battery_status', - '26': 'enum_bike_light_beam_angle_mode', - '27': 'enum_bike_light_battery_status', - '28': 'enum_bike_light_network_config_type', - '29': 'lights', - '30': 'seconds', - '31': 'minutes', - '32': 'hours', - '33': 'calories', - '34': 'kilojoules', - '35': 'milliseconds', - '36': 'second_per_mile', - '37': 'second_per_kilometer', - '38': 'centimeter', - '39': 'enum_course_point', - '40': 'bradians', - '41': 'enum_sport', - '42': 'inches_hg', - '43': 'mm_hg', - '44': 'mbars', - '45': 'hecto_pascals', - '46': 'feet_per_min', - '47': 'meters_per_min', - '48': 'meters_per_sec', - '49': 'eight_cardinal', + 0: 'no_units', + 1: 'laps', + 2: 'miles_per_hour', + 3: 'kilometers_per_hour', + 4: 'feet_per_hour', + 5: 'meters_per_hour', + 6: 'degrees_celsius', + 7: 'degrees_farenheit', + 8: 'zone', + 9: 'gear', + 10: 'rpm', + 11: 'bpm', + 12: 'degrees', + 13: 'millimeters', + 14: 'meters', + 15: 'kilometers', + 16: 'feet', + 17: 'yards', + 18: 'kilofeet', + 19: 'miles', + 20: 'time', + 21: 'enum_turn_type', + 22: 'percent', + 23: 'watts', + 24: 'watts_per_kilogram', + 25: 'enum_battery_status', + 26: 'enum_bike_light_beam_angle_mode', + 27: 'enum_bike_light_battery_status', + 28: 'enum_bike_light_network_config_type', + 29: 'lights', + 30: 'seconds', + 31: 'minutes', + 32: 'hours', + 33: 'calories', + 34: 'kilojoules', + 35: 'milliseconds', + 36: 'second_per_mile', + 37: 'second_per_kilometer', + 38: 'centimeter', + 39: 'enum_course_point', + 40: 'bradians', + 41: 'enum_sport', + 42: 'inches_hg', + 43: 'mm_hg', + 44: 'mbars', + 45: 'hecto_pascals', + 46: 'feet_per_min', + 47: 'meters_per_min', + 48: 'meters_per_sec', + 49: 'eight_cardinal', }, 'exd_qualifiers': { - '0': 'no_qualifier', - '1': 'instantaneous', - '2': 'average', - '3': 'lap', - '4': 'maximum', - '5': 'maximum_average', - '6': 'maximum_lap', - '7': 'last_lap', - '8': 'average_lap', - '9': 'to_destination', - '10': 'to_go', - '11': 'to_next', - '12': 'next_course_point', - '13': 'total', - '14': 'three_second_average', - '15': 'ten_second_average', - '16': 'thirty_second_average', - '17': 'percent_maximum', - '18': 'percent_maximum_average', - '19': 'lap_percent_maximum', - '20': 'elapsed', - '21': 'sunrise', - '22': 'sunset', - '23': 'compared_to_virtual_partner', - '24': 'maximum_24h', - '25': 'minimum_24h', - '26': 'minimum', - '27': 'first', - '28': 'second', - '29': 'third', - '30': 'shifter', - '31': 'last_sport', - '32': 'moving', - '33': 'stopped', - '34': 'estimated_total', - '242': 'zone_9', - '243': 'zone_8', - '244': 'zone_7', - '245': 'zone_6', - '246': 'zone_5', - '247': 'zone_4', - '248': 'zone_3', - '249': 'zone_2', - '250': 'zone_1', + 0: 'no_qualifier', + 1: 'instantaneous', + 2: 'average', + 3: 'lap', + 4: 'maximum', + 5: 'maximum_average', + 6: 'maximum_lap', + 7: 'last_lap', + 8: 'average_lap', + 9: 'to_destination', + 10: 'to_go', + 11: 'to_next', + 12: 'next_course_point', + 13: 'total', + 14: 'three_second_average', + 15: 'ten_second_average', + 16: 'thirty_second_average', + 17: 'percent_maximum', + 18: 'percent_maximum_average', + 19: 'lap_percent_maximum', + 20: 'elapsed', + 21: 'sunrise', + 22: 'sunset', + 23: 'compared_to_virtual_partner', + 24: 'maximum_24h', + 25: 'minimum_24h', + 26: 'minimum', + 27: 'first', + 28: 'second', + 29: 'third', + 30: 'shifter', + 31: 'last_sport', + 32: 'moving', + 33: 'stopped', + 34: 'estimated_total', + 242: 'zone_9', + 243: 'zone_8', + 244: 'zone_7', + 245: 'zone_6', + 246: 'zone_5', + 247: 'zone_4', + 248: 'zone_3', + 249: 'zone_2', + 250: 'zone_1', }, 'exd_descriptors': { - '0': 'bike_light_battery_status', - '1': 'beam_angle_status', - '2': 'batery_level', - '3': 'light_network_mode', - '4': 'number_lights_connected', - '5': 'cadence', - '6': 'distance', - '7': 'estimated_time_of_arrival', - '8': 'heading', - '9': 'time', - '10': 'battery_level', - '11': 'trainer_resistance', - '12': 'trainer_target_power', - '13': 'time_seated', - '14': 'time_standing', - '15': 'elevation', - '16': 'grade', - '17': 'ascent', - '18': 'descent', - '19': 'vertical_speed', - '20': 'di2_battery_level', - '21': 'front_gear', - '22': 'rear_gear', - '23': 'gear_ratio', - '24': 'heart_rate', - '25': 'heart_rate_zone', - '26': 'time_in_heart_rate_zone', - '27': 'heart_rate_reserve', - '28': 'calories', - '29': 'gps_accuracy', - '30': 'gps_signal_strength', - '31': 'temperature', - '32': 'time_of_day', - '33': 'balance', - '34': 'pedal_smoothness', - '35': 'power', - '36': 'functional_threshold_power', - '37': 'intensity_factor', - '38': 'work', - '39': 'power_ratio', - '40': 'normalized_power', - '41': 'training_stress_Score', - '42': 'time_on_zone', - '43': 'speed', - '44': 'laps', - '45': 'reps', - '46': 'workout_step', - '47': 'course_distance', - '48': 'navigation_distance', - '49': 'course_estimated_time_of_arrival', - '50': 'navigation_estimated_time_of_arrival', - '51': 'course_time', - '52': 'navigation_time', - '53': 'course_heading', - '54': 'navigation_heading', - '55': 'power_zone', - '56': 'torque_effectiveness', - '57': 'timer_time', - '58': 'power_weight_ratio', - '59': 'left_platform_center_offset', - '60': 'right_platform_center_offset', - '61': 'left_power_phase_start_angle', - '62': 'right_power_phase_start_angle', - '63': 'left_power_phase_finish_angle', - '64': 'right_power_phase_finish_angle', - '65': 'gears', # Combined gear information - '66': 'pace', - '67': 'training_effect', - '68': 'vertical_oscillation', - '69': 'vertical_ratio', - '70': 'ground_contact_time', - '71': 'left_ground_contact_time_balance', - '72': 'right_ground_contact_time_balance', - '73': 'stride_length', - '74': 'running_cadence', - '75': 'performance_condition', - '76': 'course_type', - '77': 'time_in_power_zone', - '78': 'navigation_turn', - '79': 'course_location', - '80': 'navigation_location', - '81': 'compass', - '82': 'gear_combo', - '83': 'muscle_oxygen', - '84': 'icon', - '85': 'compass_heading', - '86': 'gps_heading', - '87': 'gps_elevation', - '88': 'anaerobic_training_effect', - '89': 'course', - '90': 'off_course', - '91': 'glide_ratio', - '92': 'vertical_distance', - '93': 'vmg', - '94': 'ambient_pressure', - '95': 'pressure', - '96': 'vam', + 0: 'bike_light_battery_status', + 1: 'beam_angle_status', + 2: 'batery_level', + 3: 'light_network_mode', + 4: 'number_lights_connected', + 5: 'cadence', + 6: 'distance', + 7: 'estimated_time_of_arrival', + 8: 'heading', + 9: 'time', + 10: 'battery_level', + 11: 'trainer_resistance', + 12: 'trainer_target_power', + 13: 'time_seated', + 14: 'time_standing', + 15: 'elevation', + 16: 'grade', + 17: 'ascent', + 18: 'descent', + 19: 'vertical_speed', + 20: 'di2_battery_level', + 21: 'front_gear', + 22: 'rear_gear', + 23: 'gear_ratio', + 24: 'heart_rate', + 25: 'heart_rate_zone', + 26: 'time_in_heart_rate_zone', + 27: 'heart_rate_reserve', + 28: 'calories', + 29: 'gps_accuracy', + 30: 'gps_signal_strength', + 31: 'temperature', + 32: 'time_of_day', + 33: 'balance', + 34: 'pedal_smoothness', + 35: 'power', + 36: 'functional_threshold_power', + 37: 'intensity_factor', + 38: 'work', + 39: 'power_ratio', + 40: 'normalized_power', + 41: 'training_stress_Score', + 42: 'time_on_zone', + 43: 'speed', + 44: 'laps', + 45: 'reps', + 46: 'workout_step', + 47: 'course_distance', + 48: 'navigation_distance', + 49: 'course_estimated_time_of_arrival', + 50: 'navigation_estimated_time_of_arrival', + 51: 'course_time', + 52: 'navigation_time', + 53: 'course_heading', + 54: 'navigation_heading', + 55: 'power_zone', + 56: 'torque_effectiveness', + 57: 'timer_time', + 58: 'power_weight_ratio', + 59: 'left_platform_center_offset', + 60: 'right_platform_center_offset', + 61: 'left_power_phase_start_angle', + 62: 'right_power_phase_start_angle', + 63: 'left_power_phase_finish_angle', + 64: 'right_power_phase_finish_angle', + 65: 'gears', # Combined gear information + 66: 'pace', + 67: 'training_effect', + 68: 'vertical_oscillation', + 69: 'vertical_ratio', + 70: 'ground_contact_time', + 71: 'left_ground_contact_time_balance', + 72: 'right_ground_contact_time_balance', + 73: 'stride_length', + 74: 'running_cadence', + 75: 'performance_condition', + 76: 'course_type', + 77: 'time_in_power_zone', + 78: 'navigation_turn', + 79: 'course_location', + 80: 'navigation_location', + 81: 'compass', + 82: 'gear_combo', + 83: 'muscle_oxygen', + 84: 'icon', + 85: 'compass_heading', + 86: 'gps_heading', + 87: 'gps_elevation', + 88: 'anaerobic_training_effect', + 89: 'course', + 90: 'off_course', + 91: 'glide_ratio', + 92: 'vertical_distance', + 93: 'vmg', + 94: 'ambient_pressure', + 95: 'pressure', + 96: 'vam', }, 'auto_activity_detect': { - '0x00000000': 'none', - '0x00000001': 'running', - '0x00000002': 'cycling', - '0x00000004': 'swimming', - '0x00000008': 'walking', - '0x00000020': 'elliptical', - '0x00000400': 'sedentary', + 0x00000000: 'none', + 0x00000001: 'running', + 0x00000002: 'cycling', + 0x00000004: 'swimming', + 0x00000008: 'walking', + 0x00000020: 'elliptical', + 0x00000400: 'sedentary', }, 'supported_exd_screen_layouts': { - '0x00000001': 'full_screen', - '0x00000002': 'half_vertical', - '0x00000004': 'half_horizontal', - '0x00000008': 'half_vertical_right_split', - '0x00000010': 'half_horizontal_bottom_split', - '0x00000020': 'full_quarter_split', - '0x00000040': 'half_vertical_left_split', - '0x00000080': 'half_horizontal_top_split', + 0x00000001: 'full_screen', + 0x00000002: 'half_vertical', + 0x00000004: 'half_horizontal', + 0x00000008: 'half_vertical_right_split', + 0x00000010: 'half_horizontal_bottom_split', + 0x00000020: 'full_quarter_split', + 0x00000040: 'half_vertical_left_split', + 0x00000080: 'half_horizontal_top_split', }, 'fit_base_type': { - '0': 'enum', - '1': 'sint8', - '2': 'uint8', - '131': 'sint16', - '132': 'uint16', - '133': 'sint32', - '134': 'uint32', - '7': 'string', - '136': 'float32', - '137': 'float64', - '10': 'uint8z', - '139': 'uint16z', - '140': 'uint32z', - '13': 'byte', - '142': 'sint64', - '143': 'uint64', - '144': 'uint64z', + 0: 'enum', + 1: 'sint8', + 2: 'uint8', + 131: 'sint16', + 132: 'uint16', + 133: 'sint32', + 134: 'uint32', + 7: 'string', + 136: 'float32', + 137: 'float64', + 10: 'uint8z', + 139: 'uint16z', + 140: 'uint32z', + 13: 'byte', + 142: 'sint64', + 143: 'uint64', + 144: 'uint64z', }, 'turn_type': { - '0': 'arriving_idx', - '1': 'arriving_left_idx', - '2': 'arriving_right_idx', - '3': 'arriving_via_idx', - '4': 'arriving_via_left_idx', - '5': 'arriving_via_right_idx', - '6': 'bear_keep_left_idx', - '7': 'bear_keep_right_idx', - '8': 'continue_idx', - '9': 'exit_left_idx', - '10': 'exit_right_idx', - '11': 'ferry_idx', - '12': 'roundabout_45_idx', - '13': 'roundabout_90_idx', - '14': 'roundabout_135_idx', - '15': 'roundabout_180_idx', - '16': 'roundabout_225_idx', - '17': 'roundabout_270_idx', - '18': 'roundabout_315_idx', - '19': 'roundabout_360_idx', - '20': 'roundabout_neg_45_idx', - '21': 'roundabout_neg_90_idx', - '22': 'roundabout_neg_135_idx', - '23': 'roundabout_neg_180_idx', - '24': 'roundabout_neg_225_idx', - '25': 'roundabout_neg_270_idx', - '26': 'roundabout_neg_315_idx', - '27': 'roundabout_neg_360_idx', - '28': 'roundabout_generic_idx', - '29': 'roundabout_neg_generic_idx', - '30': 'sharp_turn_left_idx', - '31': 'sharp_turn_right_idx', - '32': 'turn_left_idx', - '33': 'turn_right_idx', - '34': 'uturn_left_idx', - '35': 'uturn_right_idx', - '36': 'icon_inv_idx', - '37': 'icon_idx_cnt', + 0: 'arriving_idx', + 1: 'arriving_left_idx', + 2: 'arriving_right_idx', + 3: 'arriving_via_idx', + 4: 'arriving_via_left_idx', + 5: 'arriving_via_right_idx', + 6: 'bear_keep_left_idx', + 7: 'bear_keep_right_idx', + 8: 'continue_idx', + 9: 'exit_left_idx', + 10: 'exit_right_idx', + 11: 'ferry_idx', + 12: 'roundabout_45_idx', + 13: 'roundabout_90_idx', + 14: 'roundabout_135_idx', + 15: 'roundabout_180_idx', + 16: 'roundabout_225_idx', + 17: 'roundabout_270_idx', + 18: 'roundabout_315_idx', + 19: 'roundabout_360_idx', + 20: 'roundabout_neg_45_idx', + 21: 'roundabout_neg_90_idx', + 22: 'roundabout_neg_135_idx', + 23: 'roundabout_neg_180_idx', + 24: 'roundabout_neg_225_idx', + 25: 'roundabout_neg_270_idx', + 26: 'roundabout_neg_315_idx', + 27: 'roundabout_neg_360_idx', + 28: 'roundabout_generic_idx', + 29: 'roundabout_neg_generic_idx', + 30: 'sharp_turn_left_idx', + 31: 'sharp_turn_right_idx', + 32: 'turn_left_idx', + 33: 'turn_right_idx', + 34: 'uturn_left_idx', + 35: 'uturn_right_idx', + 36: 'icon_inv_idx', + 37: 'icon_idx_cnt', }, 'bike_light_beam_angle_mode': { - '0': 'manual', - '1': 'auto', + 0: 'manual', + 1: 'auto', }, 'fit_base_unit': { - '0': 'other', - '1': 'kilogram', - '2': 'pound', + 0: 'other', + 1: 'kilogram', + 2: 'pound', }, 'set_type': { - '0': 'rest', - '1': 'active', + 0: 'rest', + 1: 'active', }, 'max_met_category': { - '0': 'generic', - '1': 'cycling', + 0: 'generic', + 1: 'cycling', }, 'exercise_category': { - '0': 'bench_press', - '1': 'calf_raise', - '2': 'cardio', - '3': 'carry', - '4': 'chop', - '5': 'core', - '6': 'crunch', - '7': 'curl', - '8': 'deadlift', - '9': 'flye', - '10': 'hip_raise', - '11': 'hip_stability', - '12': 'hip_swing', - '13': 'hyperextension', - '14': 'lateral_raise', - '15': 'leg_curl', - '16': 'leg_raise', - '17': 'lunge', - '18': 'olympic_lift', - '19': 'plank', - '20': 'plyo', - '21': 'pull_up', - '22': 'push_up', - '23': 'row', - '24': 'shoulder_press', - '25': 'shoulder_stability', - '26': 'shrug', - '27': 'sit_up', - '28': 'squat', - '29': 'total_body', - '30': 'triceps_extension', - '31': 'warm_up', - '32': 'run', - '33': 'bike', - '34': 'cardio_sensors', # Exercises within workouts that use GPS/sensors rather than rep counting - '35': 'move', - '36': 'pose', - '37': 'banded_exercises', - '38': 'battle_rope', - '39': 'elliptical', - '40': 'floor_climb', - '41': 'indoor_bike', - '42': 'indoor_row', - '43': 'ladder', - '44': 'sandbag', - '45': 'sled', - '46': 'sledge_hammer', - '47': 'stair_stepper', - '49': 'suspension', - '50': 'tire', - '52': 'run_indoor', - '53': 'bike_outdoor', - '65534': 'unknown', + 0: 'bench_press', + 1: 'calf_raise', + 2: 'cardio', + 3: 'carry', + 4: 'chop', + 5: 'core', + 6: 'crunch', + 7: 'curl', + 8: 'deadlift', + 9: 'flye', + 10: 'hip_raise', + 11: 'hip_stability', + 12: 'hip_swing', + 13: 'hyperextension', + 14: 'lateral_raise', + 15: 'leg_curl', + 16: 'leg_raise', + 17: 'lunge', + 18: 'olympic_lift', + 19: 'plank', + 20: 'plyo', + 21: 'pull_up', + 22: 'push_up', + 23: 'row', + 24: 'shoulder_press', + 25: 'shoulder_stability', + 26: 'shrug', + 27: 'sit_up', + 28: 'squat', + 29: 'total_body', + 30: 'triceps_extension', + 31: 'warm_up', + 32: 'run', + 33: 'bike', + 34: 'cardio_sensors', # Exercises within workouts that use GPS/sensors rather than rep counting + 35: 'move', + 36: 'pose', + 37: 'banded_exercises', + 38: 'battle_rope', + 39: 'elliptical', + 40: 'floor_climb', + 41: 'indoor_bike', + 42: 'indoor_row', + 43: 'ladder', + 44: 'sandbag', + 45: 'sled', + 46: 'sledge_hammer', + 47: 'stair_stepper', + 49: 'suspension', + 50: 'tire', + 52: 'run_indoor', + 53: 'bike_outdoor', + 65534: 'unknown', }, 'bench_press_exercise_name': { - '0': 'alternating_dumbbell_chest_press_on_swiss_ball', - '1': 'barbell_bench_press', - '2': 'barbell_board_bench_press', - '3': 'barbell_floor_press', - '4': 'close_grip_barbell_bench_press', - '5': 'decline_dumbbell_bench_press', - '6': 'dumbbell_bench_press', - '7': 'dumbbell_floor_press', - '8': 'incline_barbell_bench_press', - '9': 'incline_dumbbell_bench_press', - '10': 'incline_smith_machine_bench_press', - '11': 'isometric_barbell_bench_press', - '12': 'kettlebell_chest_press', - '13': 'neutral_grip_dumbbell_bench_press', - '14': 'neutral_grip_dumbbell_incline_bench_press', - '15': 'one_arm_floor_press', - '16': 'weighted_one_arm_floor_press', - '17': 'partial_lockout', - '18': 'reverse_grip_barbell_bench_press', - '19': 'reverse_grip_incline_bench_press', - '20': 'single_arm_cable_chest_press', - '21': 'single_arm_dumbbell_bench_press', - '22': 'smith_machine_bench_press', - '23': 'swiss_ball_dumbbell_chest_press', - '24': 'triple_stop_barbell_bench_press', - '25': 'wide_grip_barbell_bench_press', - '26': 'alternating_dumbbell_chest_press', + 0: 'alternating_dumbbell_chest_press_on_swiss_ball', + 1: 'barbell_bench_press', + 2: 'barbell_board_bench_press', + 3: 'barbell_floor_press', + 4: 'close_grip_barbell_bench_press', + 5: 'decline_dumbbell_bench_press', + 6: 'dumbbell_bench_press', + 7: 'dumbbell_floor_press', + 8: 'incline_barbell_bench_press', + 9: 'incline_dumbbell_bench_press', + 10: 'incline_smith_machine_bench_press', + 11: 'isometric_barbell_bench_press', + 12: 'kettlebell_chest_press', + 13: 'neutral_grip_dumbbell_bench_press', + 14: 'neutral_grip_dumbbell_incline_bench_press', + 15: 'one_arm_floor_press', + 16: 'weighted_one_arm_floor_press', + 17: 'partial_lockout', + 18: 'reverse_grip_barbell_bench_press', + 19: 'reverse_grip_incline_bench_press', + 20: 'single_arm_cable_chest_press', + 21: 'single_arm_dumbbell_bench_press', + 22: 'smith_machine_bench_press', + 23: 'swiss_ball_dumbbell_chest_press', + 24: 'triple_stop_barbell_bench_press', + 25: 'wide_grip_barbell_bench_press', + 26: 'alternating_dumbbell_chest_press', }, 'calf_raise_exercise_name': { - '0': '3_way_calf_raise', - '1': '3_way_weighted_calf_raise', - '2': '3_way_single_leg_calf_raise', - '3': '3_way_weighted_single_leg_calf_raise', - '4': 'donkey_calf_raise', - '5': 'weighted_donkey_calf_raise', - '6': 'seated_calf_raise', - '7': 'weighted_seated_calf_raise', - '8': 'seated_dumbbell_toe_raise', - '9': 'single_leg_bent_knee_calf_raise', - '10': 'weighted_single_leg_bent_knee_calf_raise', - '11': 'single_leg_decline_push_up', - '12': 'single_leg_donkey_calf_raise', - '13': 'weighted_single_leg_donkey_calf_raise', - '14': 'single_leg_hip_raise_with_knee_hold', - '15': 'single_leg_standing_calf_raise', - '16': 'single_leg_standing_dumbbell_calf_raise', - '17': 'standing_barbell_calf_raise', - '18': 'standing_calf_raise', - '19': 'weighted_standing_calf_raise', - '20': 'standing_dumbbell_calf_raise', + 0: '3_way_calf_raise', + 1: '3_way_weighted_calf_raise', + 2: '3_way_single_leg_calf_raise', + 3: '3_way_weighted_single_leg_calf_raise', + 4: 'donkey_calf_raise', + 5: 'weighted_donkey_calf_raise', + 6: 'seated_calf_raise', + 7: 'weighted_seated_calf_raise', + 8: 'seated_dumbbell_toe_raise', + 9: 'single_leg_bent_knee_calf_raise', + 10: 'weighted_single_leg_bent_knee_calf_raise', + 11: 'single_leg_decline_push_up', + 12: 'single_leg_donkey_calf_raise', + 13: 'weighted_single_leg_donkey_calf_raise', + 14: 'single_leg_hip_raise_with_knee_hold', + 15: 'single_leg_standing_calf_raise', + 16: 'single_leg_standing_dumbbell_calf_raise', + 17: 'standing_barbell_calf_raise', + 18: 'standing_calf_raise', + 19: 'weighted_standing_calf_raise', + 20: 'standing_dumbbell_calf_raise', }, 'cardio_exercise_name': { - '0': 'bob_and_weave_circle', - '1': 'weighted_bob_and_weave_circle', - '2': 'cardio_core_crawl', - '3': 'weighted_cardio_core_crawl', - '4': 'double_under', - '5': 'weighted_double_under', - '6': 'jump_rope', - '7': 'weighted_jump_rope', - '8': 'jump_rope_crossover', - '9': 'weighted_jump_rope_crossover', - '10': 'jump_rope_jog', - '11': 'weighted_jump_rope_jog', - '12': 'jumping_jacks', - '13': 'weighted_jumping_jacks', - '14': 'ski_moguls', - '15': 'weighted_ski_moguls', - '16': 'split_jacks', - '17': 'weighted_split_jacks', - '18': 'squat_jacks', - '19': 'weighted_squat_jacks', - '20': 'triple_under', - '21': 'weighted_triple_under', - '22': 'elliptical', - '23': 'spinning', - '24': 'pole_paddle_forward_wheelchair', - '25': 'pole_paddle_backward_wheelchair', - '26': 'pole_handcycle_forward_wheelchair', - '27': 'pole_handcycle_backward_wheelchair', - '28': 'pole_rainbow_wheelchair', - '29': 'double_punch_forward_wheelchair', - '30': 'double_punch_down_wheelchair', - '31': 'double_punch_sideways_wheelchair', - '32': 'double_punch_up_wheelchair', - '33': 'sit_ski_wheelchair', - '34': 'sitting_jacks_wheelchair', - '35': 'punch_forward_wheelchair', - '36': 'punch_down_wheelchair', - '37': 'punch_sideways_wheelchair', - '38': 'punch_up_wheelchair', - '39': 'punch_bag_wheelchair', - '40': 'pole_dd_ff_uu_wheelchair', - '41': 'butterfly_arms_wheelchair', - '42': 'punch', + 0: 'bob_and_weave_circle', + 1: 'weighted_bob_and_weave_circle', + 2: 'cardio_core_crawl', + 3: 'weighted_cardio_core_crawl', + 4: 'double_under', + 5: 'weighted_double_under', + 6: 'jump_rope', + 7: 'weighted_jump_rope', + 8: 'jump_rope_crossover', + 9: 'weighted_jump_rope_crossover', + 10: 'jump_rope_jog', + 11: 'weighted_jump_rope_jog', + 12: 'jumping_jacks', + 13: 'weighted_jumping_jacks', + 14: 'ski_moguls', + 15: 'weighted_ski_moguls', + 16: 'split_jacks', + 17: 'weighted_split_jacks', + 18: 'squat_jacks', + 19: 'weighted_squat_jacks', + 20: 'triple_under', + 21: 'weighted_triple_under', + 22: 'elliptical', + 23: 'spinning', + 24: 'pole_paddle_forward_wheelchair', + 25: 'pole_paddle_backward_wheelchair', + 26: 'pole_handcycle_forward_wheelchair', + 27: 'pole_handcycle_backward_wheelchair', + 28: 'pole_rainbow_wheelchair', + 29: 'double_punch_forward_wheelchair', + 30: 'double_punch_down_wheelchair', + 31: 'double_punch_sideways_wheelchair', + 32: 'double_punch_up_wheelchair', + 33: 'sit_ski_wheelchair', + 34: 'sitting_jacks_wheelchair', + 35: 'punch_forward_wheelchair', + 36: 'punch_down_wheelchair', + 37: 'punch_sideways_wheelchair', + 38: 'punch_up_wheelchair', + 39: 'punch_bag_wheelchair', + 40: 'pole_dd_ff_uu_wheelchair', + 41: 'butterfly_arms_wheelchair', + 42: 'punch', }, 'carry_exercise_name': { - '0': 'bar_holds', - '1': 'farmers_walk', - '2': 'farmers_walk_on_toes', - '3': 'hex_dumbbell_hold', - '4': 'overhead_carry', - '5': 'dumbbell_waiter_carry', - '6': 'farmers_carry_walk_lunge', - '7': 'farmers_carry', - '8': 'farmers_carry_on_toes', + 0: 'bar_holds', + 1: 'farmers_walk', + 2: 'farmers_walk_on_toes', + 3: 'hex_dumbbell_hold', + 4: 'overhead_carry', + 5: 'dumbbell_waiter_carry', + 6: 'farmers_carry_walk_lunge', + 7: 'farmers_carry', + 8: 'farmers_carry_on_toes', }, 'chop_exercise_name': { - '0': 'cable_pull_through', - '1': 'cable_rotational_lift', - '2': 'cable_woodchop', - '3': 'cross_chop_to_knee', - '4': 'weighted_cross_chop_to_knee', - '5': 'dumbbell_chop', - '6': 'half_kneeling_rotation', - '7': 'weighted_half_kneeling_rotation', - '8': 'half_kneeling_rotational_chop', - '9': 'half_kneeling_rotational_reverse_chop', - '10': 'half_kneeling_stability_chop', - '11': 'half_kneeling_stability_reverse_chop', - '12': 'kneeling_rotational_chop', - '13': 'kneeling_rotational_reverse_chop', - '14': 'kneeling_stability_chop', - '15': 'kneeling_woodchopper', - '16': 'medicine_ball_wood_chops', - '17': 'power_squat_chops', - '18': 'weighted_power_squat_chops', - '19': 'standing_rotational_chop', - '20': 'standing_split_rotational_chop', - '21': 'standing_split_rotational_reverse_chop', - '22': 'standing_stability_reverse_chop', + 0: 'cable_pull_through', + 1: 'cable_rotational_lift', + 2: 'cable_woodchop', + 3: 'cross_chop_to_knee', + 4: 'weighted_cross_chop_to_knee', + 5: 'dumbbell_chop', + 6: 'half_kneeling_rotation', + 7: 'weighted_half_kneeling_rotation', + 8: 'half_kneeling_rotational_chop', + 9: 'half_kneeling_rotational_reverse_chop', + 10: 'half_kneeling_stability_chop', + 11: 'half_kneeling_stability_reverse_chop', + 12: 'kneeling_rotational_chop', + 13: 'kneeling_rotational_reverse_chop', + 14: 'kneeling_stability_chop', + 15: 'kneeling_woodchopper', + 16: 'medicine_ball_wood_chops', + 17: 'power_squat_chops', + 18: 'weighted_power_squat_chops', + 19: 'standing_rotational_chop', + 20: 'standing_split_rotational_chop', + 21: 'standing_split_rotational_reverse_chop', + 22: 'standing_stability_reverse_chop', }, 'core_exercise_name': { - '0': 'abs_jabs', - '1': 'weighted_abs_jabs', - '2': 'alternating_plate_reach', - '3': 'barbell_rollout', - '4': 'weighted_barbell_rollout', - '5': 'body_bar_oblique_twist', - '6': 'cable_core_press', - '7': 'cable_side_bend', - '8': 'side_bend', - '9': 'weighted_side_bend', - '10': 'crescent_circle', - '11': 'weighted_crescent_circle', - '12': 'cycling_russian_twist', - '13': 'weighted_cycling_russian_twist', - '14': 'elevated_feet_russian_twist', - '15': 'weighted_elevated_feet_russian_twist', - '16': 'half_turkish_get_up', - '17': 'kettlebell_windmill', - '18': 'kneeling_ab_wheel', - '19': 'weighted_kneeling_ab_wheel', - '20': 'modified_front_lever', - '21': 'open_knee_tucks', - '22': 'weighted_open_knee_tucks', - '23': 'side_abs_leg_lift', - '24': 'weighted_side_abs_leg_lift', - '25': 'swiss_ball_jackknife', - '26': 'weighted_swiss_ball_jackknife', - '27': 'swiss_ball_pike', - '28': 'weighted_swiss_ball_pike', - '29': 'swiss_ball_rollout', - '30': 'weighted_swiss_ball_rollout', - '31': 'triangle_hip_press', - '32': 'weighted_triangle_hip_press', - '33': 'trx_suspended_jackknife', - '34': 'weighted_trx_suspended_jackknife', - '35': 'u_boat', - '36': 'weighted_u_boat', - '37': 'windmill_switches', - '38': 'weighted_windmill_switches', - '39': 'alternating_slide_out', - '40': 'weighted_alternating_slide_out', - '41': 'ghd_back_extensions', - '42': 'weighted_ghd_back_extensions', - '43': 'overhead_walk', - '44': 'inchworm', - '45': 'weighted_modified_front_lever', - '46': 'russian_twist', - '47': 'abdominal_leg_rotations', # Deprecated do not use - '48': 'arm_and_leg_extension_on_knees', - '49': 'bicycle', - '50': 'bicep_curl_with_leg_extension', - '51': 'cat_cow', - '52': 'corkscrew', - '53': 'criss_cross', - '54': 'criss_cross_with_ball', # Deprecated do not use - '55': 'double_leg_stretch', - '56': 'knee_folds', - '57': 'lower_lift', - '58': 'neck_pull', - '59': 'pelvic_clocks', - '60': 'roll_over', - '61': 'roll_up', - '62': 'rolling', - '63': 'rowing_1', - '64': 'rowing_2', - '65': 'scissors', - '66': 'single_leg_circles', - '67': 'single_leg_stretch', - '68': 'snake_twist_1_and_2', # Deprecated do not use - '69': 'swan', - '70': 'swimming', - '71': 'teaser', - '72': 'the_hundred', - '73': 'bicep_curl_with_leg_extension_with_weights', - '75': 'hanging_l_sit', - '77': 'lower_lift_with_weights', - '79': 'ring_l_sit', - '80': 'rowing_1_with_weights', - '81': 'rowing_2_with_weights', - '82': 'scissors_with_weights', - '83': 'single_leg_stretch_with_weights', - '84': 'toes_to_elbows', - '85': 'weighted_criss_cross', - '86': 'weighted_double_leg_stretch', - '87': 'weighted_the_hundred', - '88': 'l_sit', - '89': 'turkish_get_up', - '90': 'weighted_ring_l_sit', - '91': 'weighted_hanging_l_sit', - '92': 'weighted_l_sit', - '93': 'side_bend_low_wheelchair', - '94': 'side_bend_mid_wheelchair', - '95': 'side_bend_high_wheelchair', - '96': 'seated_side_bend', + 0: 'abs_jabs', + 1: 'weighted_abs_jabs', + 2: 'alternating_plate_reach', + 3: 'barbell_rollout', + 4: 'weighted_barbell_rollout', + 5: 'body_bar_oblique_twist', + 6: 'cable_core_press', + 7: 'cable_side_bend', + 8: 'side_bend', + 9: 'weighted_side_bend', + 10: 'crescent_circle', + 11: 'weighted_crescent_circle', + 12: 'cycling_russian_twist', + 13: 'weighted_cycling_russian_twist', + 14: 'elevated_feet_russian_twist', + 15: 'weighted_elevated_feet_russian_twist', + 16: 'half_turkish_get_up', + 17: 'kettlebell_windmill', + 18: 'kneeling_ab_wheel', + 19: 'weighted_kneeling_ab_wheel', + 20: 'modified_front_lever', + 21: 'open_knee_tucks', + 22: 'weighted_open_knee_tucks', + 23: 'side_abs_leg_lift', + 24: 'weighted_side_abs_leg_lift', + 25: 'swiss_ball_jackknife', + 26: 'weighted_swiss_ball_jackknife', + 27: 'swiss_ball_pike', + 28: 'weighted_swiss_ball_pike', + 29: 'swiss_ball_rollout', + 30: 'weighted_swiss_ball_rollout', + 31: 'triangle_hip_press', + 32: 'weighted_triangle_hip_press', + 33: 'trx_suspended_jackknife', + 34: 'weighted_trx_suspended_jackknife', + 35: 'u_boat', + 36: 'weighted_u_boat', + 37: 'windmill_switches', + 38: 'weighted_windmill_switches', + 39: 'alternating_slide_out', + 40: 'weighted_alternating_slide_out', + 41: 'ghd_back_extensions', + 42: 'weighted_ghd_back_extensions', + 43: 'overhead_walk', + 44: 'inchworm', + 45: 'weighted_modified_front_lever', + 46: 'russian_twist', + 47: 'abdominal_leg_rotations', # Deprecated do not use + 48: 'arm_and_leg_extension_on_knees', + 49: 'bicycle', + 50: 'bicep_curl_with_leg_extension', + 51: 'cat_cow', + 52: 'corkscrew', + 53: 'criss_cross', + 54: 'criss_cross_with_ball', # Deprecated do not use + 55: 'double_leg_stretch', + 56: 'knee_folds', + 57: 'lower_lift', + 58: 'neck_pull', + 59: 'pelvic_clocks', + 60: 'roll_over', + 61: 'roll_up', + 62: 'rolling', + 63: 'rowing_1', + 64: 'rowing_2', + 65: 'scissors', + 66: 'single_leg_circles', + 67: 'single_leg_stretch', + 68: 'snake_twist_1_and_2', # Deprecated do not use + 69: 'swan', + 70: 'swimming', + 71: 'teaser', + 72: 'the_hundred', + 73: 'bicep_curl_with_leg_extension_with_weights', + 75: 'hanging_l_sit', + 77: 'lower_lift_with_weights', + 79: 'ring_l_sit', + 80: 'rowing_1_with_weights', + 81: 'rowing_2_with_weights', + 82: 'scissors_with_weights', + 83: 'single_leg_stretch_with_weights', + 84: 'toes_to_elbows', + 85: 'weighted_criss_cross', + 86: 'weighted_double_leg_stretch', + 87: 'weighted_the_hundred', + 88: 'l_sit', + 89: 'turkish_get_up', + 90: 'weighted_ring_l_sit', + 91: 'weighted_hanging_l_sit', + 92: 'weighted_l_sit', + 93: 'side_bend_low_wheelchair', + 94: 'side_bend_mid_wheelchair', + 95: 'side_bend_high_wheelchair', + 96: 'seated_side_bend', }, 'crunch_exercise_name': { - '0': 'bicycle_crunch', - '1': 'cable_crunch', - '2': 'circular_arm_crunch', - '3': 'crossed_arms_crunch', - '4': 'weighted_crossed_arms_crunch', - '5': 'cross_leg_reverse_crunch', - '6': 'weighted_cross_leg_reverse_crunch', - '7': 'crunch_chop', - '8': 'weighted_crunch_chop', - '9': 'double_crunch', - '10': 'weighted_double_crunch', - '11': 'elbow_to_knee_crunch', - '12': 'weighted_elbow_to_knee_crunch', - '13': 'flutter_kicks', - '14': 'weighted_flutter_kicks', - '15': 'foam_roller_reverse_crunch_on_bench', - '16': 'weighted_foam_roller_reverse_crunch_on_bench', - '17': 'foam_roller_reverse_crunch_with_dumbbell', - '18': 'foam_roller_reverse_crunch_with_medicine_ball', - '19': 'frog_press', - '20': 'hanging_knee_raise_oblique_crunch', - '21': 'weighted_hanging_knee_raise_oblique_crunch', - '22': 'hip_crossover', - '23': 'weighted_hip_crossover', - '24': 'hollow_rock', - '25': 'weighted_hollow_rock', - '26': 'incline_reverse_crunch', - '27': 'weighted_incline_reverse_crunch', - '28': 'kneeling_cable_crunch', - '29': 'kneeling_cross_crunch', - '30': 'weighted_kneeling_cross_crunch', - '31': 'kneeling_oblique_cable_crunch', - '32': 'knees_to_elbow', - '33': 'leg_extensions', - '34': 'weighted_leg_extensions', - '35': 'leg_levers', - '36': 'mcgill_curl_up', - '37': 'weighted_mcgill_curl_up', - '38': 'modified_pilates_roll_up_with_ball', - '39': 'weighted_modified_pilates_roll_up_with_ball', - '40': 'pilates_crunch', - '41': 'weighted_pilates_crunch', - '42': 'pilates_roll_up_with_ball', - '43': 'weighted_pilates_roll_up_with_ball', - '44': 'raised_legs_crunch', - '45': 'weighted_raised_legs_crunch', - '46': 'reverse_crunch', - '47': 'weighted_reverse_crunch', - '48': 'reverse_crunch_on_a_bench', - '49': 'weighted_reverse_crunch_on_a_bench', - '50': 'reverse_curl_and_lift', - '51': 'weighted_reverse_curl_and_lift', - '52': 'rotational_lift', - '53': 'weighted_rotational_lift', - '54': 'seated_alternating_reverse_crunch', - '55': 'weighted_seated_alternating_reverse_crunch', - '56': 'seated_leg_u', - '57': 'weighted_seated_leg_u', - '58': 'side_to_side_crunch_and_weave', - '59': 'weighted_side_to_side_crunch_and_weave', - '60': 'single_leg_reverse_crunch', - '61': 'weighted_single_leg_reverse_crunch', - '62': 'skater_crunch_cross', - '63': 'weighted_skater_crunch_cross', - '64': 'standing_cable_crunch', - '65': 'standing_side_crunch', - '66': 'step_climb', - '67': 'weighted_step_climb', - '68': 'swiss_ball_crunch', - '69': 'swiss_ball_reverse_crunch', - '70': 'weighted_swiss_ball_reverse_crunch', - '71': 'swiss_ball_russian_twist', - '72': 'weighted_swiss_ball_russian_twist', - '73': 'swiss_ball_side_crunch', - '74': 'weighted_swiss_ball_side_crunch', - '75': 'thoracic_crunches_on_foam_roller', - '76': 'weighted_thoracic_crunches_on_foam_roller', - '77': 'triceps_crunch', - '78': 'weighted_bicycle_crunch', - '79': 'weighted_crunch', - '80': 'weighted_swiss_ball_crunch', - '81': 'toes_to_bar', - '82': 'weighted_toes_to_bar', - '83': 'crunch', - '84': 'straight_leg_crunch_with_ball', - '86': 'leg_climb_crunch', + 0: 'bicycle_crunch', + 1: 'cable_crunch', + 2: 'circular_arm_crunch', + 3: 'crossed_arms_crunch', + 4: 'weighted_crossed_arms_crunch', + 5: 'cross_leg_reverse_crunch', + 6: 'weighted_cross_leg_reverse_crunch', + 7: 'crunch_chop', + 8: 'weighted_crunch_chop', + 9: 'double_crunch', + 10: 'weighted_double_crunch', + 11: 'elbow_to_knee_crunch', + 12: 'weighted_elbow_to_knee_crunch', + 13: 'flutter_kicks', + 14: 'weighted_flutter_kicks', + 15: 'foam_roller_reverse_crunch_on_bench', + 16: 'weighted_foam_roller_reverse_crunch_on_bench', + 17: 'foam_roller_reverse_crunch_with_dumbbell', + 18: 'foam_roller_reverse_crunch_with_medicine_ball', + 19: 'frog_press', + 20: 'hanging_knee_raise_oblique_crunch', + 21: 'weighted_hanging_knee_raise_oblique_crunch', + 22: 'hip_crossover', + 23: 'weighted_hip_crossover', + 24: 'hollow_rock', + 25: 'weighted_hollow_rock', + 26: 'incline_reverse_crunch', + 27: 'weighted_incline_reverse_crunch', + 28: 'kneeling_cable_crunch', + 29: 'kneeling_cross_crunch', + 30: 'weighted_kneeling_cross_crunch', + 31: 'kneeling_oblique_cable_crunch', + 32: 'knees_to_elbow', + 33: 'leg_extensions', + 34: 'weighted_leg_extensions', + 35: 'leg_levers', + 36: 'mcgill_curl_up', + 37: 'weighted_mcgill_curl_up', + 38: 'modified_pilates_roll_up_with_ball', + 39: 'weighted_modified_pilates_roll_up_with_ball', + 40: 'pilates_crunch', + 41: 'weighted_pilates_crunch', + 42: 'pilates_roll_up_with_ball', + 43: 'weighted_pilates_roll_up_with_ball', + 44: 'raised_legs_crunch', + 45: 'weighted_raised_legs_crunch', + 46: 'reverse_crunch', + 47: 'weighted_reverse_crunch', + 48: 'reverse_crunch_on_a_bench', + 49: 'weighted_reverse_crunch_on_a_bench', + 50: 'reverse_curl_and_lift', + 51: 'weighted_reverse_curl_and_lift', + 52: 'rotational_lift', + 53: 'weighted_rotational_lift', + 54: 'seated_alternating_reverse_crunch', + 55: 'weighted_seated_alternating_reverse_crunch', + 56: 'seated_leg_u', + 57: 'weighted_seated_leg_u', + 58: 'side_to_side_crunch_and_weave', + 59: 'weighted_side_to_side_crunch_and_weave', + 60: 'single_leg_reverse_crunch', + 61: 'weighted_single_leg_reverse_crunch', + 62: 'skater_crunch_cross', + 63: 'weighted_skater_crunch_cross', + 64: 'standing_cable_crunch', + 65: 'standing_side_crunch', + 66: 'step_climb', + 67: 'weighted_step_climb', + 68: 'swiss_ball_crunch', + 69: 'swiss_ball_reverse_crunch', + 70: 'weighted_swiss_ball_reverse_crunch', + 71: 'swiss_ball_russian_twist', + 72: 'weighted_swiss_ball_russian_twist', + 73: 'swiss_ball_side_crunch', + 74: 'weighted_swiss_ball_side_crunch', + 75: 'thoracic_crunches_on_foam_roller', + 76: 'weighted_thoracic_crunches_on_foam_roller', + 77: 'triceps_crunch', + 78: 'weighted_bicycle_crunch', + 79: 'weighted_crunch', + 80: 'weighted_swiss_ball_crunch', + 81: 'toes_to_bar', + 82: 'weighted_toes_to_bar', + 83: 'crunch', + 84: 'straight_leg_crunch_with_ball', + 86: 'leg_climb_crunch', }, 'curl_exercise_name': { - '0': 'alternating_dumbbell_biceps_curl', - '1': 'alternating_dumbbell_biceps_curl_on_swiss_ball', - '2': 'alternating_incline_dumbbell_biceps_curl', - '3': 'barbell_biceps_curl', - '4': 'barbell_reverse_wrist_curl', - '5': 'barbell_wrist_curl', - '6': 'behind_the_back_barbell_reverse_wrist_curl', - '7': 'behind_the_back_one_arm_cable_curl', - '8': 'cable_biceps_curl', - '9': 'cable_hammer_curl', - '10': 'cheating_barbell_biceps_curl', - '11': 'close_grip_ez_bar_biceps_curl', - '12': 'cross_body_dumbbell_hammer_curl', - '13': 'dead_hang_biceps_curl', - '14': 'decline_hammer_curl', - '15': 'dumbbell_biceps_curl_with_static_hold', - '16': 'dumbbell_hammer_curl', - '17': 'dumbbell_reverse_wrist_curl', - '18': 'dumbbell_wrist_curl', - '19': 'ez_bar_preacher_curl', - '20': 'forward_bend_biceps_curl', - '21': 'hammer_curl_to_press', - '22': 'incline_dumbbell_biceps_curl', - '23': 'incline_offset_thumb_dumbbell_curl', - '24': 'kettlebell_biceps_curl', - '25': 'lying_concentration_cable_curl', - '26': 'one_arm_preacher_curl', - '27': 'plate_pinch_curl', - '28': 'preacher_curl_with_cable', - '29': 'reverse_ez_bar_curl', - '30': 'reverse_grip_wrist_curl', - '31': 'reverse_grip_barbell_biceps_curl', - '32': 'seated_alternating_dumbbell_biceps_curl', - '33': 'seated_dumbbell_biceps_curl', - '34': 'seated_reverse_dumbbell_curl', - '35': 'split_stance_offset_pinky_dumbbell_curl', - '36': 'standing_alternating_dumbbell_curls', - '37': 'standing_dumbbell_biceps_curl', - '38': 'standing_ez_bar_biceps_curl', - '39': 'static_curl', - '40': 'swiss_ball_dumbbell_overhead_triceps_extension', - '41': 'swiss_ball_ez_bar_preacher_curl', - '42': 'twisting_standing_dumbbell_biceps_curl', - '43': 'wide_grip_ez_bar_biceps_curl', - '44': 'one_arm_concentration_curl', - '45': 'standing_zottman_biceps_curl', - '46': 'dumbbell_biceps_curl', - '47': 'drag_curl_wheelchair', - '48': 'dumbbell_biceps_curl_wheelchair', - '49': 'bottle_curl', - '50': 'seated_bottle_curl', + 0: 'alternating_dumbbell_biceps_curl', + 1: 'alternating_dumbbell_biceps_curl_on_swiss_ball', + 2: 'alternating_incline_dumbbell_biceps_curl', + 3: 'barbell_biceps_curl', + 4: 'barbell_reverse_wrist_curl', + 5: 'barbell_wrist_curl', + 6: 'behind_the_back_barbell_reverse_wrist_curl', + 7: 'behind_the_back_one_arm_cable_curl', + 8: 'cable_biceps_curl', + 9: 'cable_hammer_curl', + 10: 'cheating_barbell_biceps_curl', + 11: 'close_grip_ez_bar_biceps_curl', + 12: 'cross_body_dumbbell_hammer_curl', + 13: 'dead_hang_biceps_curl', + 14: 'decline_hammer_curl', + 15: 'dumbbell_biceps_curl_with_static_hold', + 16: 'dumbbell_hammer_curl', + 17: 'dumbbell_reverse_wrist_curl', + 18: 'dumbbell_wrist_curl', + 19: 'ez_bar_preacher_curl', + 20: 'forward_bend_biceps_curl', + 21: 'hammer_curl_to_press', + 22: 'incline_dumbbell_biceps_curl', + 23: 'incline_offset_thumb_dumbbell_curl', + 24: 'kettlebell_biceps_curl', + 25: 'lying_concentration_cable_curl', + 26: 'one_arm_preacher_curl', + 27: 'plate_pinch_curl', + 28: 'preacher_curl_with_cable', + 29: 'reverse_ez_bar_curl', + 30: 'reverse_grip_wrist_curl', + 31: 'reverse_grip_barbell_biceps_curl', + 32: 'seated_alternating_dumbbell_biceps_curl', + 33: 'seated_dumbbell_biceps_curl', + 34: 'seated_reverse_dumbbell_curl', + 35: 'split_stance_offset_pinky_dumbbell_curl', + 36: 'standing_alternating_dumbbell_curls', + 37: 'standing_dumbbell_biceps_curl', + 38: 'standing_ez_bar_biceps_curl', + 39: 'static_curl', + 40: 'swiss_ball_dumbbell_overhead_triceps_extension', + 41: 'swiss_ball_ez_bar_preacher_curl', + 42: 'twisting_standing_dumbbell_biceps_curl', + 43: 'wide_grip_ez_bar_biceps_curl', + 44: 'one_arm_concentration_curl', + 45: 'standing_zottman_biceps_curl', + 46: 'dumbbell_biceps_curl', + 47: 'drag_curl_wheelchair', + 48: 'dumbbell_biceps_curl_wheelchair', + 49: 'bottle_curl', + 50: 'seated_bottle_curl', }, 'deadlift_exercise_name': { - '0': 'barbell_deadlift', - '1': 'barbell_straight_leg_deadlift', - '2': 'dumbbell_deadlift', - '3': 'dumbbell_single_leg_deadlift_to_row', - '4': 'dumbbell_straight_leg_deadlift', - '5': 'kettlebell_floor_to_shelf', - '6': 'one_arm_one_leg_deadlift', - '7': 'rack_pull', - '8': 'rotational_dumbbell_straight_leg_deadlift', - '9': 'single_arm_deadlift', - '10': 'single_leg_barbell_deadlift', - '11': 'single_leg_barbell_straight_leg_deadlift', - '12': 'single_leg_deadlift_with_barbell', - '13': 'single_leg_rdl_circuit', - '14': 'single_leg_romanian_deadlift_with_dumbbell', - '15': 'sumo_deadlift', - '16': 'sumo_deadlift_high_pull', - '17': 'trap_bar_deadlift', - '18': 'wide_grip_barbell_deadlift', - '20': 'kettlebell_deadlift', - '21': 'kettlebell_sumo_deadlift', - '23': 'romanian_deadlift', - '24': 'single_leg_romanian_deadlift_circuit', - '25': 'straight_leg_deadlift', + 0: 'barbell_deadlift', + 1: 'barbell_straight_leg_deadlift', + 2: 'dumbbell_deadlift', + 3: 'dumbbell_single_leg_deadlift_to_row', + 4: 'dumbbell_straight_leg_deadlift', + 5: 'kettlebell_floor_to_shelf', + 6: 'one_arm_one_leg_deadlift', + 7: 'rack_pull', + 8: 'rotational_dumbbell_straight_leg_deadlift', + 9: 'single_arm_deadlift', + 10: 'single_leg_barbell_deadlift', + 11: 'single_leg_barbell_straight_leg_deadlift', + 12: 'single_leg_deadlift_with_barbell', + 13: 'single_leg_rdl_circuit', + 14: 'single_leg_romanian_deadlift_with_dumbbell', + 15: 'sumo_deadlift', + 16: 'sumo_deadlift_high_pull', + 17: 'trap_bar_deadlift', + 18: 'wide_grip_barbell_deadlift', + 20: 'kettlebell_deadlift', + 21: 'kettlebell_sumo_deadlift', + 23: 'romanian_deadlift', + 24: 'single_leg_romanian_deadlift_circuit', + 25: 'straight_leg_deadlift', }, 'flye_exercise_name': { - '0': 'cable_crossover', - '1': 'decline_dumbbell_flye', - '2': 'dumbbell_flye', - '3': 'incline_dumbbell_flye', - '4': 'kettlebell_flye', - '5': 'kneeling_rear_flye', - '6': 'single_arm_standing_cable_reverse_flye', - '7': 'swiss_ball_dumbbell_flye', - '8': 'arm_rotations', - '9': 'hug_a_tree', - '10': 'face_down_incline_reverse_flye', - '11': 'incline_reverse_flye', - '12': 'rear_delt_fly_wheelchair', + 0: 'cable_crossover', + 1: 'decline_dumbbell_flye', + 2: 'dumbbell_flye', + 3: 'incline_dumbbell_flye', + 4: 'kettlebell_flye', + 5: 'kneeling_rear_flye', + 6: 'single_arm_standing_cable_reverse_flye', + 7: 'swiss_ball_dumbbell_flye', + 8: 'arm_rotations', + 9: 'hug_a_tree', + 10: 'face_down_incline_reverse_flye', + 11: 'incline_reverse_flye', + 12: 'rear_delt_fly_wheelchair', }, 'hip_raise_exercise_name': { - '0': 'barbell_hip_thrust_on_floor', - '1': 'barbell_hip_thrust_with_bench', - '2': 'bent_knee_swiss_ball_reverse_hip_raise', - '3': 'weighted_bent_knee_swiss_ball_reverse_hip_raise', - '4': 'bridge_with_leg_extension', - '5': 'weighted_bridge_with_leg_extension', - '6': 'clam_bridge', - '7': 'front_kick_tabletop', - '8': 'weighted_front_kick_tabletop', - '9': 'hip_extension_and_cross', - '10': 'weighted_hip_extension_and_cross', - '11': 'hip_raise', - '12': 'weighted_hip_raise', - '13': 'hip_raise_with_feet_on_swiss_ball', - '14': 'weighted_hip_raise_with_feet_on_swiss_ball', - '15': 'hip_raise_with_head_on_bosu_ball', - '16': 'weighted_hip_raise_with_head_on_bosu_ball', - '17': 'hip_raise_with_head_on_swiss_ball', - '18': 'weighted_hip_raise_with_head_on_swiss_ball', - '19': 'hip_raise_with_knee_squeeze', - '20': 'weighted_hip_raise_with_knee_squeeze', - '21': 'incline_rear_leg_extension', - '22': 'weighted_incline_rear_leg_extension', - '23': 'kettlebell_swing', - '24': 'marching_hip_raise', - '25': 'weighted_marching_hip_raise', - '26': 'marching_hip_raise_with_feet_on_a_swiss_ball', - '27': 'weighted_marching_hip_raise_with_feet_on_a_swiss_ball', - '28': 'reverse_hip_raise', - '29': 'weighted_reverse_hip_raise', - '30': 'single_leg_hip_raise', - '31': 'weighted_single_leg_hip_raise', - '32': 'single_leg_hip_raise_with_foot_on_bench', - '33': 'weighted_single_leg_hip_raise_with_foot_on_bench', - '34': 'single_leg_hip_raise_with_foot_on_bosu_ball', - '35': 'weighted_single_leg_hip_raise_with_foot_on_bosu_ball', - '36': 'single_leg_hip_raise_with_foot_on_foam_roller', - '37': 'weighted_single_leg_hip_raise_with_foot_on_foam_roller', - '38': 'single_leg_hip_raise_with_foot_on_medicine_ball', - '39': 'weighted_single_leg_hip_raise_with_foot_on_medicine_ball', - '40': 'single_leg_hip_raise_with_head_on_bosu_ball', - '41': 'weighted_single_leg_hip_raise_with_head_on_bosu_ball', - '42': 'weighted_clam_bridge', - '43': 'single_leg_swiss_ball_hip_raise_and_leg_curl', - '44': 'clams', - '45': 'inner_thigh_circles', # Deprecated do not use - '46': 'inner_thigh_side_lift', # Deprecated do not use - '47': 'leg_circles', - '48': 'leg_lift', - '49': 'leg_lift_in_external_rotation', + 0: 'barbell_hip_thrust_on_floor', + 1: 'barbell_hip_thrust_with_bench', + 2: 'bent_knee_swiss_ball_reverse_hip_raise', + 3: 'weighted_bent_knee_swiss_ball_reverse_hip_raise', + 4: 'bridge_with_leg_extension', + 5: 'weighted_bridge_with_leg_extension', + 6: 'clam_bridge', + 7: 'front_kick_tabletop', + 8: 'weighted_front_kick_tabletop', + 9: 'hip_extension_and_cross', + 10: 'weighted_hip_extension_and_cross', + 11: 'hip_raise', + 12: 'weighted_hip_raise', + 13: 'hip_raise_with_feet_on_swiss_ball', + 14: 'weighted_hip_raise_with_feet_on_swiss_ball', + 15: 'hip_raise_with_head_on_bosu_ball', + 16: 'weighted_hip_raise_with_head_on_bosu_ball', + 17: 'hip_raise_with_head_on_swiss_ball', + 18: 'weighted_hip_raise_with_head_on_swiss_ball', + 19: 'hip_raise_with_knee_squeeze', + 20: 'weighted_hip_raise_with_knee_squeeze', + 21: 'incline_rear_leg_extension', + 22: 'weighted_incline_rear_leg_extension', + 23: 'kettlebell_swing', + 24: 'marching_hip_raise', + 25: 'weighted_marching_hip_raise', + 26: 'marching_hip_raise_with_feet_on_a_swiss_ball', + 27: 'weighted_marching_hip_raise_with_feet_on_a_swiss_ball', + 28: 'reverse_hip_raise', + 29: 'weighted_reverse_hip_raise', + 30: 'single_leg_hip_raise', + 31: 'weighted_single_leg_hip_raise', + 32: 'single_leg_hip_raise_with_foot_on_bench', + 33: 'weighted_single_leg_hip_raise_with_foot_on_bench', + 34: 'single_leg_hip_raise_with_foot_on_bosu_ball', + 35: 'weighted_single_leg_hip_raise_with_foot_on_bosu_ball', + 36: 'single_leg_hip_raise_with_foot_on_foam_roller', + 37: 'weighted_single_leg_hip_raise_with_foot_on_foam_roller', + 38: 'single_leg_hip_raise_with_foot_on_medicine_ball', + 39: 'weighted_single_leg_hip_raise_with_foot_on_medicine_ball', + 40: 'single_leg_hip_raise_with_head_on_bosu_ball', + 41: 'weighted_single_leg_hip_raise_with_head_on_bosu_ball', + 42: 'weighted_clam_bridge', + 43: 'single_leg_swiss_ball_hip_raise_and_leg_curl', + 44: 'clams', + 45: 'inner_thigh_circles', # Deprecated do not use + 46: 'inner_thigh_side_lift', # Deprecated do not use + 47: 'leg_circles', + 48: 'leg_lift', + 49: 'leg_lift_in_external_rotation', }, 'hip_stability_exercise_name': { - '0': 'band_side_lying_leg_raise', - '1': 'dead_bug', - '2': 'weighted_dead_bug', - '3': 'external_hip_raise', - '4': 'weighted_external_hip_raise', - '5': 'fire_hydrant_kicks', - '6': 'weighted_fire_hydrant_kicks', - '7': 'hip_circles', - '8': 'weighted_hip_circles', - '9': 'inner_thigh_lift', - '10': 'weighted_inner_thigh_lift', - '11': 'lateral_walks_with_band_at_ankles', - '12': 'pretzel_side_kick', - '13': 'weighted_pretzel_side_kick', - '14': 'prone_hip_internal_rotation', - '15': 'weighted_prone_hip_internal_rotation', - '16': 'quadruped', - '17': 'quadruped_hip_extension', - '18': 'weighted_quadruped_hip_extension', - '19': 'quadruped_with_leg_lift', - '20': 'weighted_quadruped_with_leg_lift', - '21': 'side_lying_leg_raise', - '22': 'weighted_side_lying_leg_raise', - '23': 'sliding_hip_adduction', - '24': 'weighted_sliding_hip_adduction', - '25': 'standing_adduction', - '26': 'weighted_standing_adduction', - '27': 'standing_cable_hip_abduction', - '28': 'standing_hip_abduction', - '29': 'weighted_standing_hip_abduction', - '30': 'standing_rear_leg_raise', - '31': 'weighted_standing_rear_leg_raise', - '32': 'supine_hip_internal_rotation', - '33': 'weighted_supine_hip_internal_rotation', - '34': 'lying_abduction_stretch', + 0: 'band_side_lying_leg_raise', + 1: 'dead_bug', + 2: 'weighted_dead_bug', + 3: 'external_hip_raise', + 4: 'weighted_external_hip_raise', + 5: 'fire_hydrant_kicks', + 6: 'weighted_fire_hydrant_kicks', + 7: 'hip_circles', + 8: 'weighted_hip_circles', + 9: 'inner_thigh_lift', + 10: 'weighted_inner_thigh_lift', + 11: 'lateral_walks_with_band_at_ankles', + 12: 'pretzel_side_kick', + 13: 'weighted_pretzel_side_kick', + 14: 'prone_hip_internal_rotation', + 15: 'weighted_prone_hip_internal_rotation', + 16: 'quadruped', + 17: 'quadruped_hip_extension', + 18: 'weighted_quadruped_hip_extension', + 19: 'quadruped_with_leg_lift', + 20: 'weighted_quadruped_with_leg_lift', + 21: 'side_lying_leg_raise', + 22: 'weighted_side_lying_leg_raise', + 23: 'sliding_hip_adduction', + 24: 'weighted_sliding_hip_adduction', + 25: 'standing_adduction', + 26: 'weighted_standing_adduction', + 27: 'standing_cable_hip_abduction', + 28: 'standing_hip_abduction', + 29: 'weighted_standing_hip_abduction', + 30: 'standing_rear_leg_raise', + 31: 'weighted_standing_rear_leg_raise', + 32: 'supine_hip_internal_rotation', + 33: 'weighted_supine_hip_internal_rotation', + 34: 'lying_abduction_stretch', }, 'hip_swing_exercise_name': { - '0': 'single_arm_kettlebell_swing', - '1': 'single_arm_dumbbell_swing', - '2': 'step_out_swing', - '3': 'one_arm_swing', + 0: 'single_arm_kettlebell_swing', + 1: 'single_arm_dumbbell_swing', + 2: 'step_out_swing', + 3: 'one_arm_swing', }, 'hyperextension_exercise_name': { - '0': 'back_extension_with_opposite_arm_and_leg_reach', - '1': 'weighted_back_extension_with_opposite_arm_and_leg_reach', - '2': 'base_rotations', - '3': 'weighted_base_rotations', - '4': 'bent_knee_reverse_hyperextension', - '5': 'weighted_bent_knee_reverse_hyperextension', - '6': 'hollow_hold_and_roll', - '7': 'weighted_hollow_hold_and_roll', - '8': 'kicks', - '9': 'weighted_kicks', - '10': 'knee_raises', - '11': 'weighted_knee_raises', - '12': 'kneeling_superman', - '13': 'weighted_kneeling_superman', - '14': 'lat_pull_down_with_row', - '15': 'medicine_ball_deadlift_to_reach', - '16': 'one_arm_one_leg_row', - '17': 'one_arm_row_with_band', - '18': 'overhead_lunge_with_medicine_ball', - '19': 'plank_knee_tucks', - '20': 'weighted_plank_knee_tucks', - '21': 'side_step', - '22': 'weighted_side_step', - '23': 'single_leg_back_extension', - '24': 'weighted_single_leg_back_extension', - '25': 'spine_extension', - '26': 'weighted_spine_extension', - '27': 'static_back_extension', - '28': 'weighted_static_back_extension', - '29': 'superman_from_floor', - '30': 'weighted_superman_from_floor', - '31': 'swiss_ball_back_extension', - '32': 'weighted_swiss_ball_back_extension', - '33': 'swiss_ball_hyperextension', - '34': 'weighted_swiss_ball_hyperextension', - '35': 'swiss_ball_opposite_arm_and_leg_lift', - '36': 'weighted_swiss_ball_opposite_arm_and_leg_lift', - '37': 'superman_on_swiss_ball', - '38': 'cobra', - '39': 'supine_floor_barre', # Deprecated do not use + 0: 'back_extension_with_opposite_arm_and_leg_reach', + 1: 'weighted_back_extension_with_opposite_arm_and_leg_reach', + 2: 'base_rotations', + 3: 'weighted_base_rotations', + 4: 'bent_knee_reverse_hyperextension', + 5: 'weighted_bent_knee_reverse_hyperextension', + 6: 'hollow_hold_and_roll', + 7: 'weighted_hollow_hold_and_roll', + 8: 'kicks', + 9: 'weighted_kicks', + 10: 'knee_raises', + 11: 'weighted_knee_raises', + 12: 'kneeling_superman', + 13: 'weighted_kneeling_superman', + 14: 'lat_pull_down_with_row', + 15: 'medicine_ball_deadlift_to_reach', + 16: 'one_arm_one_leg_row', + 17: 'one_arm_row_with_band', + 18: 'overhead_lunge_with_medicine_ball', + 19: 'plank_knee_tucks', + 20: 'weighted_plank_knee_tucks', + 21: 'side_step', + 22: 'weighted_side_step', + 23: 'single_leg_back_extension', + 24: 'weighted_single_leg_back_extension', + 25: 'spine_extension', + 26: 'weighted_spine_extension', + 27: 'static_back_extension', + 28: 'weighted_static_back_extension', + 29: 'superman_from_floor', + 30: 'weighted_superman_from_floor', + 31: 'swiss_ball_back_extension', + 32: 'weighted_swiss_ball_back_extension', + 33: 'swiss_ball_hyperextension', + 34: 'weighted_swiss_ball_hyperextension', + 35: 'swiss_ball_opposite_arm_and_leg_lift', + 36: 'weighted_swiss_ball_opposite_arm_and_leg_lift', + 37: 'superman_on_swiss_ball', + 38: 'cobra', + 39: 'supine_floor_barre', # Deprecated do not use }, 'lateral_raise_exercise_name': { - '0': '45_degree_cable_external_rotation', - '1': 'alternating_lateral_raise_with_static_hold', - '2': 'bar_muscle_up', - '3': 'bent_over_lateral_raise', - '4': 'cable_diagonal_raise', - '5': 'cable_front_raise', - '6': 'calorie_row', - '7': 'combo_shoulder_raise', - '8': 'dumbbell_diagonal_raise', - '9': 'dumbbell_v_raise', - '10': 'front_raise', - '11': 'leaning_dumbbell_lateral_raise', - '12': 'lying_dumbbell_raise', - '13': 'muscle_up', - '14': 'one_arm_cable_lateral_raise', - '15': 'overhand_grip_rear_lateral_raise', - '16': 'plate_raises', - '17': 'ring_dip', - '18': 'weighted_ring_dip', - '19': 'ring_muscle_up', - '20': 'weighted_ring_muscle_up', - '21': 'rope_climb', - '22': 'weighted_rope_climb', - '23': 'scaption', - '24': 'seated_lateral_raise', - '25': 'seated_rear_lateral_raise', - '26': 'side_lying_lateral_raise', - '27': 'standing_lift', - '28': 'suspended_row', - '29': 'underhand_grip_rear_lateral_raise', - '30': 'wall_slide', - '31': 'weighted_wall_slide', - '32': 'arm_circles', - '33': 'shaving_the_head', - '34': 'dumbbell_lateral_raise', - '36': 'ring_dip_kipping', - '37': 'wall_walk', - '38': 'dumbbell_front_raise_wheelchair', - '39': 'dumbbell_lateral_raise_wheelchair', - '40': 'pole_double_arm_overhead_and_forward_wheelchair', - '41': 'pole_straight_arm_overhead_wheelchair', + 0: '45_degree_cable_external_rotation', + 1: 'alternating_lateral_raise_with_static_hold', + 2: 'bar_muscle_up', + 3: 'bent_over_lateral_raise', + 4: 'cable_diagonal_raise', + 5: 'cable_front_raise', + 6: 'calorie_row', + 7: 'combo_shoulder_raise', + 8: 'dumbbell_diagonal_raise', + 9: 'dumbbell_v_raise', + 10: 'front_raise', + 11: 'leaning_dumbbell_lateral_raise', + 12: 'lying_dumbbell_raise', + 13: 'muscle_up', + 14: 'one_arm_cable_lateral_raise', + 15: 'overhand_grip_rear_lateral_raise', + 16: 'plate_raises', + 17: 'ring_dip', + 18: 'weighted_ring_dip', + 19: 'ring_muscle_up', + 20: 'weighted_ring_muscle_up', + 21: 'rope_climb', + 22: 'weighted_rope_climb', + 23: 'scaption', + 24: 'seated_lateral_raise', + 25: 'seated_rear_lateral_raise', + 26: 'side_lying_lateral_raise', + 27: 'standing_lift', + 28: 'suspended_row', + 29: 'underhand_grip_rear_lateral_raise', + 30: 'wall_slide', + 31: 'weighted_wall_slide', + 32: 'arm_circles', + 33: 'shaving_the_head', + 34: 'dumbbell_lateral_raise', + 36: 'ring_dip_kipping', + 37: 'wall_walk', + 38: 'dumbbell_front_raise_wheelchair', + 39: 'dumbbell_lateral_raise_wheelchair', + 40: 'pole_double_arm_overhead_and_forward_wheelchair', + 41: 'pole_straight_arm_overhead_wheelchair', }, 'leg_curl_exercise_name': { - '0': 'leg_curl', - '1': 'weighted_leg_curl', - '2': 'good_morning', - '3': 'seated_barbell_good_morning', - '4': 'single_leg_barbell_good_morning', - '5': 'single_leg_sliding_leg_curl', - '6': 'sliding_leg_curl', - '7': 'split_barbell_good_morning', - '8': 'split_stance_extension', - '9': 'staggered_stance_good_morning', - '10': 'swiss_ball_hip_raise_and_leg_curl', - '11': 'zercher_good_morning', - '12': 'band_good_morning', - '13': 'bar_good_morning', + 0: 'leg_curl', + 1: 'weighted_leg_curl', + 2: 'good_morning', + 3: 'seated_barbell_good_morning', + 4: 'single_leg_barbell_good_morning', + 5: 'single_leg_sliding_leg_curl', + 6: 'sliding_leg_curl', + 7: 'split_barbell_good_morning', + 8: 'split_stance_extension', + 9: 'staggered_stance_good_morning', + 10: 'swiss_ball_hip_raise_and_leg_curl', + 11: 'zercher_good_morning', + 12: 'band_good_morning', + 13: 'bar_good_morning', }, 'leg_raise_exercise_name': { - '0': 'hanging_knee_raise', - '1': 'hanging_leg_raise', - '2': 'weighted_hanging_leg_raise', - '3': 'hanging_single_leg_raise', - '4': 'weighted_hanging_single_leg_raise', - '5': 'kettlebell_leg_raises', - '6': 'leg_lowering_drill', - '7': 'weighted_leg_lowering_drill', - '8': 'lying_straight_leg_raise', - '9': 'weighted_lying_straight_leg_raise', - '10': 'medicine_ball_leg_drops', - '11': 'quadruped_leg_raise', - '12': 'weighted_quadruped_leg_raise', - '13': 'reverse_leg_raise', - '14': 'weighted_reverse_leg_raise', - '15': 'reverse_leg_raise_on_swiss_ball', - '16': 'weighted_reverse_leg_raise_on_swiss_ball', - '17': 'single_leg_lowering_drill', - '18': 'weighted_single_leg_lowering_drill', - '19': 'weighted_hanging_knee_raise', - '20': 'lateral_stepover', - '21': 'weighted_lateral_stepover', + 0: 'hanging_knee_raise', + 1: 'hanging_leg_raise', + 2: 'weighted_hanging_leg_raise', + 3: 'hanging_single_leg_raise', + 4: 'weighted_hanging_single_leg_raise', + 5: 'kettlebell_leg_raises', + 6: 'leg_lowering_drill', + 7: 'weighted_leg_lowering_drill', + 8: 'lying_straight_leg_raise', + 9: 'weighted_lying_straight_leg_raise', + 10: 'medicine_ball_leg_drops', + 11: 'quadruped_leg_raise', + 12: 'weighted_quadruped_leg_raise', + 13: 'reverse_leg_raise', + 14: 'weighted_reverse_leg_raise', + 15: 'reverse_leg_raise_on_swiss_ball', + 16: 'weighted_reverse_leg_raise_on_swiss_ball', + 17: 'single_leg_lowering_drill', + 18: 'weighted_single_leg_lowering_drill', + 19: 'weighted_hanging_knee_raise', + 20: 'lateral_stepover', + 21: 'weighted_lateral_stepover', }, 'lunge_exercise_name': { - '0': 'overhead_lunge', - '1': 'lunge_matrix', - '2': 'weighted_lunge_matrix', - '3': 'alternating_barbell_forward_lunge', - '4': 'alternating_dumbbell_lunge_with_reach', - '5': 'back_foot_elevated_dumbbell_split_squat', - '6': 'barbell_box_lunge', - '7': 'barbell_bulgarian_split_squat', - '8': 'barbell_crossover_lunge', - '9': 'barbell_front_split_squat', - '10': 'barbell_lunge', - '11': 'barbell_reverse_lunge', - '12': 'barbell_side_lunge', - '13': 'barbell_split_squat', - '14': 'core_control_rear_lunge', - '15': 'diagonal_lunge', - '16': 'drop_lunge', - '17': 'dumbbell_box_lunge', - '18': 'dumbbell_bulgarian_split_squat', - '19': 'dumbbell_crossover_lunge', - '20': 'dumbbell_diagonal_lunge', - '21': 'dumbbell_lunge', - '22': 'dumbbell_lunge_and_rotation', - '23': 'dumbbell_overhead_bulgarian_split_squat', - '24': 'dumbbell_reverse_lunge_to_high_knee_and_press', - '25': 'dumbbell_side_lunge', - '26': 'elevated_front_foot_barbell_split_squat', - '27': 'front_foot_elevated_dumbbell_split_squat', - '28': 'gunslinger_lunge', - '29': 'lawnmower_lunge', - '30': 'low_lunge_with_isometric_adduction', - '31': 'low_side_to_side_lunge', - '32': 'lunge', - '33': 'weighted_lunge', - '34': 'lunge_with_arm_reach', - '35': 'lunge_with_diagonal_reach', - '36': 'lunge_with_side_bend', - '37': 'offset_dumbbell_lunge', - '38': 'offset_dumbbell_reverse_lunge', - '39': 'overhead_bulgarian_split_squat', - '40': 'overhead_dumbbell_reverse_lunge', - '41': 'overhead_dumbbell_split_squat', - '42': 'overhead_lunge_with_rotation', - '43': 'reverse_barbell_box_lunge', - '44': 'reverse_box_lunge', - '45': 'reverse_dumbbell_box_lunge', - '46': 'reverse_dumbbell_crossover_lunge', - '47': 'reverse_dumbbell_diagonal_lunge', - '48': 'reverse_lunge_with_reach_back', - '49': 'weighted_reverse_lunge_with_reach_back', - '50': 'reverse_lunge_with_twist_and_overhead_reach', - '51': 'weighted_reverse_lunge_with_twist_and_overhead_reach', - '52': 'reverse_sliding_box_lunge', - '53': 'weighted_reverse_sliding_box_lunge', - '54': 'reverse_sliding_lunge', - '55': 'weighted_reverse_sliding_lunge', - '56': 'runners_lunge_to_balance', - '57': 'weighted_runners_lunge_to_balance', - '58': 'shifting_side_lunge', - '59': 'side_and_crossover_lunge', - '60': 'weighted_side_and_crossover_lunge', - '61': 'side_lunge', - '62': 'weighted_side_lunge', - '63': 'side_lunge_and_press', - '64': 'side_lunge_jump_off', - '65': 'side_lunge_sweep', - '66': 'weighted_side_lunge_sweep', - '67': 'side_lunge_to_crossover_tap', - '68': 'weighted_side_lunge_to_crossover_tap', - '69': 'side_to_side_lunge_chops', - '70': 'weighted_side_to_side_lunge_chops', - '71': 'siff_jump_lunge', - '72': 'weighted_siff_jump_lunge', - '73': 'single_arm_reverse_lunge_and_press', - '74': 'sliding_lateral_lunge', - '75': 'weighted_sliding_lateral_lunge', - '76': 'walking_barbell_lunge', - '77': 'walking_dumbbell_lunge', - '78': 'walking_lunge', - '79': 'weighted_walking_lunge', - '80': 'wide_grip_overhead_barbell_split_squat', - '81': 'alternating_dumbbell_lunge', - '82': 'dumbbell_reverse_lunge', - '83': 'overhead_dumbbell_lunge', - '84': 'scissor_power_switch', - '85': 'dumbbell_overhead_walking_lunge', - '86': 'curtsy_lunge', - '87': 'weighted_curtsy_lunge', - '88': 'weighted_shifting_side_lunge', - '89': 'weighted_side_lunge_and_press', - '90': 'weighted_side_lunge_jump_off', + 0: 'overhead_lunge', + 1: 'lunge_matrix', + 2: 'weighted_lunge_matrix', + 3: 'alternating_barbell_forward_lunge', + 4: 'alternating_dumbbell_lunge_with_reach', + 5: 'back_foot_elevated_dumbbell_split_squat', + 6: 'barbell_box_lunge', + 7: 'barbell_bulgarian_split_squat', + 8: 'barbell_crossover_lunge', + 9: 'barbell_front_split_squat', + 10: 'barbell_lunge', + 11: 'barbell_reverse_lunge', + 12: 'barbell_side_lunge', + 13: 'barbell_split_squat', + 14: 'core_control_rear_lunge', + 15: 'diagonal_lunge', + 16: 'drop_lunge', + 17: 'dumbbell_box_lunge', + 18: 'dumbbell_bulgarian_split_squat', + 19: 'dumbbell_crossover_lunge', + 20: 'dumbbell_diagonal_lunge', + 21: 'dumbbell_lunge', + 22: 'dumbbell_lunge_and_rotation', + 23: 'dumbbell_overhead_bulgarian_split_squat', + 24: 'dumbbell_reverse_lunge_to_high_knee_and_press', + 25: 'dumbbell_side_lunge', + 26: 'elevated_front_foot_barbell_split_squat', + 27: 'front_foot_elevated_dumbbell_split_squat', + 28: 'gunslinger_lunge', + 29: 'lawnmower_lunge', + 30: 'low_lunge_with_isometric_adduction', + 31: 'low_side_to_side_lunge', + 32: 'lunge', + 33: 'weighted_lunge', + 34: 'lunge_with_arm_reach', + 35: 'lunge_with_diagonal_reach', + 36: 'lunge_with_side_bend', + 37: 'offset_dumbbell_lunge', + 38: 'offset_dumbbell_reverse_lunge', + 39: 'overhead_bulgarian_split_squat', + 40: 'overhead_dumbbell_reverse_lunge', + 41: 'overhead_dumbbell_split_squat', + 42: 'overhead_lunge_with_rotation', + 43: 'reverse_barbell_box_lunge', + 44: 'reverse_box_lunge', + 45: 'reverse_dumbbell_box_lunge', + 46: 'reverse_dumbbell_crossover_lunge', + 47: 'reverse_dumbbell_diagonal_lunge', + 48: 'reverse_lunge_with_reach_back', + 49: 'weighted_reverse_lunge_with_reach_back', + 50: 'reverse_lunge_with_twist_and_overhead_reach', + 51: 'weighted_reverse_lunge_with_twist_and_overhead_reach', + 52: 'reverse_sliding_box_lunge', + 53: 'weighted_reverse_sliding_box_lunge', + 54: 'reverse_sliding_lunge', + 55: 'weighted_reverse_sliding_lunge', + 56: 'runners_lunge_to_balance', + 57: 'weighted_runners_lunge_to_balance', + 58: 'shifting_side_lunge', + 59: 'side_and_crossover_lunge', + 60: 'weighted_side_and_crossover_lunge', + 61: 'side_lunge', + 62: 'weighted_side_lunge', + 63: 'side_lunge_and_press', + 64: 'side_lunge_jump_off', + 65: 'side_lunge_sweep', + 66: 'weighted_side_lunge_sweep', + 67: 'side_lunge_to_crossover_tap', + 68: 'weighted_side_lunge_to_crossover_tap', + 69: 'side_to_side_lunge_chops', + 70: 'weighted_side_to_side_lunge_chops', + 71: 'siff_jump_lunge', + 72: 'weighted_siff_jump_lunge', + 73: 'single_arm_reverse_lunge_and_press', + 74: 'sliding_lateral_lunge', + 75: 'weighted_sliding_lateral_lunge', + 76: 'walking_barbell_lunge', + 77: 'walking_dumbbell_lunge', + 78: 'walking_lunge', + 79: 'weighted_walking_lunge', + 80: 'wide_grip_overhead_barbell_split_squat', + 81: 'alternating_dumbbell_lunge', + 82: 'dumbbell_reverse_lunge', + 83: 'overhead_dumbbell_lunge', + 84: 'scissor_power_switch', + 85: 'dumbbell_overhead_walking_lunge', + 86: 'curtsy_lunge', + 87: 'weighted_curtsy_lunge', + 88: 'weighted_shifting_side_lunge', + 89: 'weighted_side_lunge_and_press', + 90: 'weighted_side_lunge_jump_off', }, 'olympic_lift_exercise_name': { - '0': 'barbell_hang_power_clean', - '1': 'barbell_hang_squat_clean', - '2': 'barbell_power_clean', - '3': 'barbell_power_snatch', - '4': 'barbell_squat_clean', - '5': 'clean_and_jerk', - '6': 'barbell_hang_power_snatch', - '7': 'barbell_hang_pull', - '8': 'barbell_high_pull', - '9': 'barbell_snatch', - '10': 'barbell_split_jerk', - '11': 'clean', - '12': 'dumbbell_clean', - '13': 'dumbbell_hang_pull', - '14': 'one_hand_dumbbell_split_snatch', - '15': 'push_jerk', - '16': 'single_arm_dumbbell_snatch', - '17': 'single_arm_hang_snatch', - '18': 'single_arm_kettlebell_snatch', - '19': 'split_jerk', - '20': 'squat_clean_and_jerk', - '21': 'dumbbell_hang_snatch', - '22': 'dumbbell_power_clean_and_jerk', - '23': 'dumbbell_power_clean_and_push_press', - '24': 'dumbbell_power_clean_and_strict_press', - '25': 'dumbbell_snatch', - '26': 'medicine_ball_clean', - '27': 'clean_and_press', - '28': 'snatch', + 0: 'barbell_hang_power_clean', + 1: 'barbell_hang_squat_clean', + 2: 'barbell_power_clean', + 3: 'barbell_power_snatch', + 4: 'barbell_squat_clean', + 5: 'clean_and_jerk', + 6: 'barbell_hang_power_snatch', + 7: 'barbell_hang_pull', + 8: 'barbell_high_pull', + 9: 'barbell_snatch', + 10: 'barbell_split_jerk', + 11: 'clean', + 12: 'dumbbell_clean', + 13: 'dumbbell_hang_pull', + 14: 'one_hand_dumbbell_split_snatch', + 15: 'push_jerk', + 16: 'single_arm_dumbbell_snatch', + 17: 'single_arm_hang_snatch', + 18: 'single_arm_kettlebell_snatch', + 19: 'split_jerk', + 20: 'squat_clean_and_jerk', + 21: 'dumbbell_hang_snatch', + 22: 'dumbbell_power_clean_and_jerk', + 23: 'dumbbell_power_clean_and_push_press', + 24: 'dumbbell_power_clean_and_strict_press', + 25: 'dumbbell_snatch', + 26: 'medicine_ball_clean', + 27: 'clean_and_press', + 28: 'snatch', }, 'plank_exercise_name': { - '0': '45_degree_plank', - '1': 'weighted_45_degree_plank', - '2': '90_degree_static_hold', - '3': 'weighted_90_degree_static_hold', - '4': 'bear_crawl', - '5': 'weighted_bear_crawl', - '6': 'cross_body_mountain_climber', - '7': 'weighted_cross_body_mountain_climber', - '8': 'elbow_plank_pike_jacks', - '9': 'weighted_elbow_plank_pike_jacks', - '10': 'elevated_feet_plank', - '11': 'weighted_elevated_feet_plank', - '12': 'elevator_abs', - '13': 'weighted_elevator_abs', - '14': 'extended_plank', - '15': 'weighted_extended_plank', - '16': 'full_plank_passe_twist', - '17': 'weighted_full_plank_passe_twist', - '18': 'inching_elbow_plank', - '19': 'weighted_inching_elbow_plank', - '20': 'inchworm_to_side_plank', - '21': 'weighted_inchworm_to_side_plank', - '22': 'kneeling_plank', - '23': 'weighted_kneeling_plank', - '24': 'kneeling_side_plank_with_leg_lift', - '25': 'weighted_kneeling_side_plank_with_leg_lift', - '26': 'lateral_roll', - '27': 'weighted_lateral_roll', - '28': 'lying_reverse_plank', - '29': 'weighted_lying_reverse_plank', - '30': 'medicine_ball_mountain_climber', - '31': 'weighted_medicine_ball_mountain_climber', - '32': 'modified_mountain_climber_and_extension', - '33': 'weighted_modified_mountain_climber_and_extension', - '34': 'mountain_climber', - '35': 'weighted_mountain_climber', - '36': 'mountain_climber_on_sliding_discs', - '37': 'weighted_mountain_climber_on_sliding_discs', - '38': 'mountain_climber_with_feet_on_bosu_ball', - '39': 'weighted_mountain_climber_with_feet_on_bosu_ball', - '40': 'mountain_climber_with_hands_on_bench', - '41': 'mountain_climber_with_hands_on_swiss_ball', - '42': 'weighted_mountain_climber_with_hands_on_swiss_ball', - '43': 'plank', - '44': 'plank_jacks_with_feet_on_sliding_discs', - '45': 'weighted_plank_jacks_with_feet_on_sliding_discs', - '46': 'plank_knee_twist', - '47': 'weighted_plank_knee_twist', - '48': 'plank_pike_jumps', - '49': 'weighted_plank_pike_jumps', - '50': 'plank_pikes', - '51': 'weighted_plank_pikes', - '52': 'plank_to_stand_up', - '53': 'weighted_plank_to_stand_up', - '54': 'plank_with_arm_raise', - '55': 'weighted_plank_with_arm_raise', - '56': 'plank_with_knee_to_elbow', - '57': 'weighted_plank_with_knee_to_elbow', - '58': 'plank_with_oblique_crunch', - '59': 'weighted_plank_with_oblique_crunch', - '60': 'plyometric_side_plank', - '61': 'weighted_plyometric_side_plank', - '62': 'rolling_side_plank', - '63': 'weighted_rolling_side_plank', - '64': 'side_kick_plank', - '65': 'weighted_side_kick_plank', - '66': 'side_plank', - '67': 'weighted_side_plank', - '68': 'side_plank_and_row', - '69': 'weighted_side_plank_and_row', - '70': 'side_plank_lift', - '71': 'weighted_side_plank_lift', - '72': 'side_plank_with_elbow_on_bosu_ball', - '73': 'weighted_side_plank_with_elbow_on_bosu_ball', - '74': 'side_plank_with_feet_on_bench', - '75': 'weighted_side_plank_with_feet_on_bench', - '76': 'side_plank_with_knee_circle', - '77': 'weighted_side_plank_with_knee_circle', - '78': 'side_plank_with_knee_tuck', - '79': 'weighted_side_plank_with_knee_tuck', - '80': 'side_plank_with_leg_lift', - '81': 'weighted_side_plank_with_leg_lift', - '82': 'side_plank_with_reach_under', - '83': 'weighted_side_plank_with_reach_under', - '84': 'single_leg_elevated_feet_plank', - '85': 'weighted_single_leg_elevated_feet_plank', - '86': 'single_leg_flex_and_extend', - '87': 'weighted_single_leg_flex_and_extend', - '88': 'single_leg_side_plank', - '89': 'weighted_single_leg_side_plank', - '90': 'spiderman_plank', - '91': 'weighted_spiderman_plank', - '92': 'straight_arm_plank', - '93': 'weighted_straight_arm_plank', - '94': 'straight_arm_plank_with_shoulder_touch', - '95': 'weighted_straight_arm_plank_with_shoulder_touch', - '96': 'swiss_ball_plank', - '97': 'weighted_swiss_ball_plank', - '98': 'swiss_ball_plank_leg_lift', - '99': 'weighted_swiss_ball_plank_leg_lift', - '100': 'swiss_ball_plank_leg_lift_and_hold', - '101': 'swiss_ball_plank_with_feet_on_bench', - '102': 'weighted_swiss_ball_plank_with_feet_on_bench', - '103': 'swiss_ball_prone_jackknife', - '104': 'weighted_swiss_ball_prone_jackknife', - '105': 'swiss_ball_side_plank', - '106': 'weighted_swiss_ball_side_plank', - '107': 'three_way_plank', - '108': 'weighted_three_way_plank', - '109': 'towel_plank_and_knee_in', - '110': 'weighted_towel_plank_and_knee_in', - '111': 't_stabilization', - '112': 'weighted_t_stabilization', - '113': 'turkish_get_up_to_side_plank', - '114': 'weighted_turkish_get_up_to_side_plank', - '115': 'two_point_plank', - '116': 'weighted_two_point_plank', - '117': 'weighted_plank', - '118': 'wide_stance_plank_with_diagonal_arm_lift', - '119': 'weighted_wide_stance_plank_with_diagonal_arm_lift', - '120': 'wide_stance_plank_with_diagonal_leg_lift', - '121': 'weighted_wide_stance_plank_with_diagonal_leg_lift', - '122': 'wide_stance_plank_with_leg_lift', - '123': 'weighted_wide_stance_plank_with_leg_lift', - '124': 'wide_stance_plank_with_opposite_arm_and_leg_lift', - '125': 'weighted_mountain_climber_with_hands_on_bench', - '126': 'weighted_swiss_ball_plank_leg_lift_and_hold', - '127': 'weighted_wide_stance_plank_with_opposite_arm_and_leg_lift', - '128': 'plank_with_feet_on_swiss_ball', - '129': 'side_plank_to_plank_with_reach_under', - '130': 'bridge_with_glute_lower_lift', - '131': 'bridge_one_leg_bridge', - '132': 'plank_with_arm_variations', - '133': 'plank_with_leg_lift', - '134': 'reverse_plank_with_leg_pull', - '135': 'ring_plank_sprawls', + 0: '45_degree_plank', + 1: 'weighted_45_degree_plank', + 2: '90_degree_static_hold', + 3: 'weighted_90_degree_static_hold', + 4: 'bear_crawl', + 5: 'weighted_bear_crawl', + 6: 'cross_body_mountain_climber', + 7: 'weighted_cross_body_mountain_climber', + 8: 'elbow_plank_pike_jacks', + 9: 'weighted_elbow_plank_pike_jacks', + 10: 'elevated_feet_plank', + 11: 'weighted_elevated_feet_plank', + 12: 'elevator_abs', + 13: 'weighted_elevator_abs', + 14: 'extended_plank', + 15: 'weighted_extended_plank', + 16: 'full_plank_passe_twist', + 17: 'weighted_full_plank_passe_twist', + 18: 'inching_elbow_plank', + 19: 'weighted_inching_elbow_plank', + 20: 'inchworm_to_side_plank', + 21: 'weighted_inchworm_to_side_plank', + 22: 'kneeling_plank', + 23: 'weighted_kneeling_plank', + 24: 'kneeling_side_plank_with_leg_lift', + 25: 'weighted_kneeling_side_plank_with_leg_lift', + 26: 'lateral_roll', + 27: 'weighted_lateral_roll', + 28: 'lying_reverse_plank', + 29: 'weighted_lying_reverse_plank', + 30: 'medicine_ball_mountain_climber', + 31: 'weighted_medicine_ball_mountain_climber', + 32: 'modified_mountain_climber_and_extension', + 33: 'weighted_modified_mountain_climber_and_extension', + 34: 'mountain_climber', + 35: 'weighted_mountain_climber', + 36: 'mountain_climber_on_sliding_discs', + 37: 'weighted_mountain_climber_on_sliding_discs', + 38: 'mountain_climber_with_feet_on_bosu_ball', + 39: 'weighted_mountain_climber_with_feet_on_bosu_ball', + 40: 'mountain_climber_with_hands_on_bench', + 41: 'mountain_climber_with_hands_on_swiss_ball', + 42: 'weighted_mountain_climber_with_hands_on_swiss_ball', + 43: 'plank', + 44: 'plank_jacks_with_feet_on_sliding_discs', + 45: 'weighted_plank_jacks_with_feet_on_sliding_discs', + 46: 'plank_knee_twist', + 47: 'weighted_plank_knee_twist', + 48: 'plank_pike_jumps', + 49: 'weighted_plank_pike_jumps', + 50: 'plank_pikes', + 51: 'weighted_plank_pikes', + 52: 'plank_to_stand_up', + 53: 'weighted_plank_to_stand_up', + 54: 'plank_with_arm_raise', + 55: 'weighted_plank_with_arm_raise', + 56: 'plank_with_knee_to_elbow', + 57: 'weighted_plank_with_knee_to_elbow', + 58: 'plank_with_oblique_crunch', + 59: 'weighted_plank_with_oblique_crunch', + 60: 'plyometric_side_plank', + 61: 'weighted_plyometric_side_plank', + 62: 'rolling_side_plank', + 63: 'weighted_rolling_side_plank', + 64: 'side_kick_plank', + 65: 'weighted_side_kick_plank', + 66: 'side_plank', + 67: 'weighted_side_plank', + 68: 'side_plank_and_row', + 69: 'weighted_side_plank_and_row', + 70: 'side_plank_lift', + 71: 'weighted_side_plank_lift', + 72: 'side_plank_with_elbow_on_bosu_ball', + 73: 'weighted_side_plank_with_elbow_on_bosu_ball', + 74: 'side_plank_with_feet_on_bench', + 75: 'weighted_side_plank_with_feet_on_bench', + 76: 'side_plank_with_knee_circle', + 77: 'weighted_side_plank_with_knee_circle', + 78: 'side_plank_with_knee_tuck', + 79: 'weighted_side_plank_with_knee_tuck', + 80: 'side_plank_with_leg_lift', + 81: 'weighted_side_plank_with_leg_lift', + 82: 'side_plank_with_reach_under', + 83: 'weighted_side_plank_with_reach_under', + 84: 'single_leg_elevated_feet_plank', + 85: 'weighted_single_leg_elevated_feet_plank', + 86: 'single_leg_flex_and_extend', + 87: 'weighted_single_leg_flex_and_extend', + 88: 'single_leg_side_plank', + 89: 'weighted_single_leg_side_plank', + 90: 'spiderman_plank', + 91: 'weighted_spiderman_plank', + 92: 'straight_arm_plank', + 93: 'weighted_straight_arm_plank', + 94: 'straight_arm_plank_with_shoulder_touch', + 95: 'weighted_straight_arm_plank_with_shoulder_touch', + 96: 'swiss_ball_plank', + 97: 'weighted_swiss_ball_plank', + 98: 'swiss_ball_plank_leg_lift', + 99: 'weighted_swiss_ball_plank_leg_lift', + 100: 'swiss_ball_plank_leg_lift_and_hold', + 101: 'swiss_ball_plank_with_feet_on_bench', + 102: 'weighted_swiss_ball_plank_with_feet_on_bench', + 103: 'swiss_ball_prone_jackknife', + 104: 'weighted_swiss_ball_prone_jackknife', + 105: 'swiss_ball_side_plank', + 106: 'weighted_swiss_ball_side_plank', + 107: 'three_way_plank', + 108: 'weighted_three_way_plank', + 109: 'towel_plank_and_knee_in', + 110: 'weighted_towel_plank_and_knee_in', + 111: 't_stabilization', + 112: 'weighted_t_stabilization', + 113: 'turkish_get_up_to_side_plank', + 114: 'weighted_turkish_get_up_to_side_plank', + 115: 'two_point_plank', + 116: 'weighted_two_point_plank', + 117: 'weighted_plank', + 118: 'wide_stance_plank_with_diagonal_arm_lift', + 119: 'weighted_wide_stance_plank_with_diagonal_arm_lift', + 120: 'wide_stance_plank_with_diagonal_leg_lift', + 121: 'weighted_wide_stance_plank_with_diagonal_leg_lift', + 122: 'wide_stance_plank_with_leg_lift', + 123: 'weighted_wide_stance_plank_with_leg_lift', + 124: 'wide_stance_plank_with_opposite_arm_and_leg_lift', + 125: 'weighted_mountain_climber_with_hands_on_bench', + 126: 'weighted_swiss_ball_plank_leg_lift_and_hold', + 127: 'weighted_wide_stance_plank_with_opposite_arm_and_leg_lift', + 128: 'plank_with_feet_on_swiss_ball', + 129: 'side_plank_to_plank_with_reach_under', + 130: 'bridge_with_glute_lower_lift', + 131: 'bridge_one_leg_bridge', + 132: 'plank_with_arm_variations', + 133: 'plank_with_leg_lift', + 134: 'reverse_plank_with_leg_pull', + 135: 'ring_plank_sprawls', }, 'plyo_exercise_name': { - '0': 'alternating_jump_lunge', - '1': 'weighted_alternating_jump_lunge', - '2': 'barbell_jump_squat', - '3': 'body_weight_jump_squat', - '4': 'weighted_jump_squat', - '5': 'cross_knee_strike', - '6': 'weighted_cross_knee_strike', - '7': 'depth_jump', - '8': 'weighted_depth_jump', - '9': 'dumbbell_jump_squat', - '10': 'dumbbell_split_jump', - '11': 'front_knee_strike', - '12': 'weighted_front_knee_strike', - '13': 'high_box_jump', - '14': 'weighted_high_box_jump', - '15': 'isometric_explosive_body_weight_jump_squat', - '16': 'weighted_isometric_explosive_jump_squat', - '17': 'lateral_leap_and_hop', - '18': 'weighted_lateral_leap_and_hop', - '19': 'lateral_plyo_squats', - '20': 'weighted_lateral_plyo_squats', - '21': 'lateral_slide', - '22': 'weighted_lateral_slide', - '23': 'medicine_ball_overhead_throws', - '24': 'medicine_ball_side_throw', - '25': 'medicine_ball_slam', - '26': 'side_to_side_medicine_ball_throws', - '27': 'side_to_side_shuffle_jump', - '28': 'weighted_side_to_side_shuffle_jump', - '29': 'squat_jump_onto_box', - '30': 'weighted_squat_jump_onto_box', - '31': 'squat_jumps_in_and_out', - '32': 'weighted_squat_jumps_in_and_out', - '33': 'box_jump', - '34': 'box_jump_overs', - '35': 'box_jump_overs_over_the_box', - '36': 'star_jump_squats', - '37': 'jump_squat', + 0: 'alternating_jump_lunge', + 1: 'weighted_alternating_jump_lunge', + 2: 'barbell_jump_squat', + 3: 'body_weight_jump_squat', + 4: 'weighted_jump_squat', + 5: 'cross_knee_strike', + 6: 'weighted_cross_knee_strike', + 7: 'depth_jump', + 8: 'weighted_depth_jump', + 9: 'dumbbell_jump_squat', + 10: 'dumbbell_split_jump', + 11: 'front_knee_strike', + 12: 'weighted_front_knee_strike', + 13: 'high_box_jump', + 14: 'weighted_high_box_jump', + 15: 'isometric_explosive_body_weight_jump_squat', + 16: 'weighted_isometric_explosive_jump_squat', + 17: 'lateral_leap_and_hop', + 18: 'weighted_lateral_leap_and_hop', + 19: 'lateral_plyo_squats', + 20: 'weighted_lateral_plyo_squats', + 21: 'lateral_slide', + 22: 'weighted_lateral_slide', + 23: 'medicine_ball_overhead_throws', + 24: 'medicine_ball_side_throw', + 25: 'medicine_ball_slam', + 26: 'side_to_side_medicine_ball_throws', + 27: 'side_to_side_shuffle_jump', + 28: 'weighted_side_to_side_shuffle_jump', + 29: 'squat_jump_onto_box', + 30: 'weighted_squat_jump_onto_box', + 31: 'squat_jumps_in_and_out', + 32: 'weighted_squat_jumps_in_and_out', + 33: 'box_jump', + 34: 'box_jump_overs', + 35: 'box_jump_overs_over_the_box', + 36: 'star_jump_squats', + 37: 'jump_squat', }, 'pull_up_exercise_name': { - '0': 'banded_pull_ups', - '1': '30_degree_lat_pulldown', - '2': 'band_assisted_chin_up', - '3': 'close_grip_chin_up', - '4': 'weighted_close_grip_chin_up', - '5': 'close_grip_lat_pulldown', - '6': 'crossover_chin_up', - '7': 'weighted_crossover_chin_up', - '8': 'ez_bar_pullover', - '9': 'hanging_hurdle', - '10': 'weighted_hanging_hurdle', - '11': 'kneeling_lat_pulldown', - '12': 'kneeling_underhand_grip_lat_pulldown', - '13': 'lat_pulldown', - '14': 'mixed_grip_chin_up', - '15': 'weighted_mixed_grip_chin_up', - '16': 'mixed_grip_pull_up', - '17': 'weighted_mixed_grip_pull_up', - '18': 'reverse_grip_pulldown', - '19': 'standing_cable_pullover', - '20': 'straight_arm_pulldown', - '21': 'swiss_ball_ez_bar_pullover', - '22': 'towel_pull_up', - '23': 'weighted_towel_pull_up', - '24': 'weighted_pull_up', - '25': 'wide_grip_lat_pulldown', - '26': 'wide_grip_pull_up', - '27': 'weighted_wide_grip_pull_up', - '28': 'burpee_pull_up', - '29': 'weighted_burpee_pull_up', - '30': 'jumping_pull_ups', - '31': 'weighted_jumping_pull_ups', - '32': 'kipping_pull_up', - '33': 'weighted_kipping_pull_up', - '34': 'l_pull_up', - '35': 'weighted_l_pull_up', - '36': 'suspended_chin_up', - '37': 'weighted_suspended_chin_up', - '38': 'pull_up', - '39': 'chin_up', - '40': 'neutral_grip_chin_up', - '41': 'weighted_chin_up', - '42': 'band_assisted_pull_up', - '43': 'neutral_grip_pull_up', - '44': 'weighted_neutral_grip_chin_up', - '45': 'weighted_neutral_grip_pull_up', + 0: 'banded_pull_ups', + 1: '30_degree_lat_pulldown', + 2: 'band_assisted_chin_up', + 3: 'close_grip_chin_up', + 4: 'weighted_close_grip_chin_up', + 5: 'close_grip_lat_pulldown', + 6: 'crossover_chin_up', + 7: 'weighted_crossover_chin_up', + 8: 'ez_bar_pullover', + 9: 'hanging_hurdle', + 10: 'weighted_hanging_hurdle', + 11: 'kneeling_lat_pulldown', + 12: 'kneeling_underhand_grip_lat_pulldown', + 13: 'lat_pulldown', + 14: 'mixed_grip_chin_up', + 15: 'weighted_mixed_grip_chin_up', + 16: 'mixed_grip_pull_up', + 17: 'weighted_mixed_grip_pull_up', + 18: 'reverse_grip_pulldown', + 19: 'standing_cable_pullover', + 20: 'straight_arm_pulldown', + 21: 'swiss_ball_ez_bar_pullover', + 22: 'towel_pull_up', + 23: 'weighted_towel_pull_up', + 24: 'weighted_pull_up', + 25: 'wide_grip_lat_pulldown', + 26: 'wide_grip_pull_up', + 27: 'weighted_wide_grip_pull_up', + 28: 'burpee_pull_up', + 29: 'weighted_burpee_pull_up', + 30: 'jumping_pull_ups', + 31: 'weighted_jumping_pull_ups', + 32: 'kipping_pull_up', + 33: 'weighted_kipping_pull_up', + 34: 'l_pull_up', + 35: 'weighted_l_pull_up', + 36: 'suspended_chin_up', + 37: 'weighted_suspended_chin_up', + 38: 'pull_up', + 39: 'chin_up', + 40: 'neutral_grip_chin_up', + 41: 'weighted_chin_up', + 42: 'band_assisted_pull_up', + 43: 'neutral_grip_pull_up', + 44: 'weighted_neutral_grip_chin_up', + 45: 'weighted_neutral_grip_pull_up', }, 'push_up_exercise_name': { - '0': 'chest_press_with_band', - '1': 'alternating_staggered_push_up', - '2': 'weighted_alternating_staggered_push_up', - '3': 'alternating_hands_medicine_ball_push_up', - '4': 'weighted_alternating_hands_medicine_ball_push_up', - '5': 'bosu_ball_push_up', - '6': 'weighted_bosu_ball_push_up', - '7': 'clapping_push_up', - '8': 'weighted_clapping_push_up', - '9': 'close_grip_medicine_ball_push_up', - '10': 'weighted_close_grip_medicine_ball_push_up', - '11': 'close_hands_push_up', - '12': 'weighted_close_hands_push_up', - '13': 'decline_push_up', - '14': 'weighted_decline_push_up', - '15': 'diamond_push_up', - '16': 'weighted_diamond_push_up', - '17': 'explosive_crossover_push_up', - '18': 'weighted_explosive_crossover_push_up', - '19': 'explosive_push_up', - '20': 'weighted_explosive_push_up', - '21': 'feet_elevated_side_to_side_push_up', - '22': 'weighted_feet_elevated_side_to_side_push_up', - '23': 'hand_release_push_up', - '24': 'weighted_hand_release_push_up', - '25': 'handstand_push_up', - '26': 'weighted_handstand_push_up', - '27': 'incline_push_up', - '28': 'weighted_incline_push_up', - '29': 'isometric_explosive_push_up', - '30': 'weighted_isometric_explosive_push_up', - '31': 'judo_push_up', - '32': 'weighted_judo_push_up', - '33': 'kneeling_push_up', - '34': 'weighted_kneeling_push_up', - '35': 'medicine_ball_chest_pass', - '36': 'medicine_ball_push_up', - '37': 'weighted_medicine_ball_push_up', - '38': 'one_arm_push_up', - '39': 'weighted_one_arm_push_up', - '40': 'weighted_push_up', - '41': 'push_up_and_row', - '42': 'weighted_push_up_and_row', - '43': 'push_up_plus', - '44': 'weighted_push_up_plus', - '45': 'push_up_with_feet_on_swiss_ball', - '46': 'weighted_push_up_with_feet_on_swiss_ball', - '47': 'push_up_with_one_hand_on_medicine_ball', - '48': 'weighted_push_up_with_one_hand_on_medicine_ball', - '49': 'shoulder_push_up', - '50': 'weighted_shoulder_push_up', - '51': 'single_arm_medicine_ball_push_up', - '52': 'weighted_single_arm_medicine_ball_push_up', - '53': 'spiderman_push_up', - '54': 'weighted_spiderman_push_up', - '55': 'stacked_feet_push_up', - '56': 'weighted_stacked_feet_push_up', - '57': 'staggered_hands_push_up', - '58': 'weighted_staggered_hands_push_up', - '59': 'suspended_push_up', - '60': 'weighted_suspended_push_up', - '61': 'swiss_ball_push_up', - '62': 'weighted_swiss_ball_push_up', - '63': 'swiss_ball_push_up_plus', - '64': 'weighted_swiss_ball_push_up_plus', - '65': 't_push_up', - '66': 'weighted_t_push_up', - '67': 'triple_stop_push_up', - '68': 'weighted_triple_stop_push_up', - '69': 'wide_hands_push_up', - '70': 'weighted_wide_hands_push_up', - '71': 'parallette_handstand_push_up', - '72': 'weighted_parallette_handstand_push_up', - '73': 'ring_handstand_push_up', - '74': 'weighted_ring_handstand_push_up', - '75': 'ring_push_up', - '76': 'weighted_ring_push_up', - '77': 'push_up', - '78': 'pilates_pushup', - '79': 'dynamic_push_up', - '80': 'kipping_handstand_push_up', - '81': 'shoulder_tapping_push_up', - '82': 'biceps_push_up', - '83': 'hindu_push_up', - '84': 'pike_push_up', - '85': 'wide_grip_push_up', - '86': 'weighted_biceps_push_up', - '87': 'weighted_hindu_push_up', - '88': 'weighted_pike_push_up', - '89': 'kipping_parallette_handstand_push_up', - '90': 'wall_push_up', + 0: 'chest_press_with_band', + 1: 'alternating_staggered_push_up', + 2: 'weighted_alternating_staggered_push_up', + 3: 'alternating_hands_medicine_ball_push_up', + 4: 'weighted_alternating_hands_medicine_ball_push_up', + 5: 'bosu_ball_push_up', + 6: 'weighted_bosu_ball_push_up', + 7: 'clapping_push_up', + 8: 'weighted_clapping_push_up', + 9: 'close_grip_medicine_ball_push_up', + 10: 'weighted_close_grip_medicine_ball_push_up', + 11: 'close_hands_push_up', + 12: 'weighted_close_hands_push_up', + 13: 'decline_push_up', + 14: 'weighted_decline_push_up', + 15: 'diamond_push_up', + 16: 'weighted_diamond_push_up', + 17: 'explosive_crossover_push_up', + 18: 'weighted_explosive_crossover_push_up', + 19: 'explosive_push_up', + 20: 'weighted_explosive_push_up', + 21: 'feet_elevated_side_to_side_push_up', + 22: 'weighted_feet_elevated_side_to_side_push_up', + 23: 'hand_release_push_up', + 24: 'weighted_hand_release_push_up', + 25: 'handstand_push_up', + 26: 'weighted_handstand_push_up', + 27: 'incline_push_up', + 28: 'weighted_incline_push_up', + 29: 'isometric_explosive_push_up', + 30: 'weighted_isometric_explosive_push_up', + 31: 'judo_push_up', + 32: 'weighted_judo_push_up', + 33: 'kneeling_push_up', + 34: 'weighted_kneeling_push_up', + 35: 'medicine_ball_chest_pass', + 36: 'medicine_ball_push_up', + 37: 'weighted_medicine_ball_push_up', + 38: 'one_arm_push_up', + 39: 'weighted_one_arm_push_up', + 40: 'weighted_push_up', + 41: 'push_up_and_row', + 42: 'weighted_push_up_and_row', + 43: 'push_up_plus', + 44: 'weighted_push_up_plus', + 45: 'push_up_with_feet_on_swiss_ball', + 46: 'weighted_push_up_with_feet_on_swiss_ball', + 47: 'push_up_with_one_hand_on_medicine_ball', + 48: 'weighted_push_up_with_one_hand_on_medicine_ball', + 49: 'shoulder_push_up', + 50: 'weighted_shoulder_push_up', + 51: 'single_arm_medicine_ball_push_up', + 52: 'weighted_single_arm_medicine_ball_push_up', + 53: 'spiderman_push_up', + 54: 'weighted_spiderman_push_up', + 55: 'stacked_feet_push_up', + 56: 'weighted_stacked_feet_push_up', + 57: 'staggered_hands_push_up', + 58: 'weighted_staggered_hands_push_up', + 59: 'suspended_push_up', + 60: 'weighted_suspended_push_up', + 61: 'swiss_ball_push_up', + 62: 'weighted_swiss_ball_push_up', + 63: 'swiss_ball_push_up_plus', + 64: 'weighted_swiss_ball_push_up_plus', + 65: 't_push_up', + 66: 'weighted_t_push_up', + 67: 'triple_stop_push_up', + 68: 'weighted_triple_stop_push_up', + 69: 'wide_hands_push_up', + 70: 'weighted_wide_hands_push_up', + 71: 'parallette_handstand_push_up', + 72: 'weighted_parallette_handstand_push_up', + 73: 'ring_handstand_push_up', + 74: 'weighted_ring_handstand_push_up', + 75: 'ring_push_up', + 76: 'weighted_ring_push_up', + 77: 'push_up', + 78: 'pilates_pushup', + 79: 'dynamic_push_up', + 80: 'kipping_handstand_push_up', + 81: 'shoulder_tapping_push_up', + 82: 'biceps_push_up', + 83: 'hindu_push_up', + 84: 'pike_push_up', + 85: 'wide_grip_push_up', + 86: 'weighted_biceps_push_up', + 87: 'weighted_hindu_push_up', + 88: 'weighted_pike_push_up', + 89: 'kipping_parallette_handstand_push_up', + 90: 'wall_push_up', }, 'row_exercise_name': { - '0': 'barbell_straight_leg_deadlift_to_row', - '1': 'cable_row_standing', - '2': 'dumbbell_row', - '3': 'elevated_feet_inverted_row', - '4': 'weighted_elevated_feet_inverted_row', - '5': 'face_pull', - '6': 'face_pull_with_external_rotation', - '7': 'inverted_row_with_feet_on_swiss_ball', - '8': 'weighted_inverted_row_with_feet_on_swiss_ball', - '9': 'kettlebell_row', - '10': 'modified_inverted_row', - '11': 'weighted_modified_inverted_row', - '12': 'neutral_grip_alternating_dumbbell_row', - '13': 'one_arm_bent_over_row', - '14': 'one_legged_dumbbell_row', - '15': 'renegade_row', - '16': 'reverse_grip_barbell_row', - '17': 'rope_handle_cable_row', - '18': 'seated_cable_row', - '19': 'seated_dumbbell_row', - '20': 'single_arm_cable_row', - '21': 'single_arm_cable_row_and_rotation', - '22': 'single_arm_inverted_row', - '23': 'weighted_single_arm_inverted_row', - '24': 'single_arm_neutral_grip_dumbbell_row', - '25': 'single_arm_neutral_grip_dumbbell_row_and_rotation', - '26': 'suspended_inverted_row', - '27': 'weighted_suspended_inverted_row', - '28': 't_bar_row', - '29': 'towel_grip_inverted_row', - '30': 'weighted_towel_grip_inverted_row', - '31': 'underhand_grip_cable_row', - '32': 'v_grip_cable_row', - '33': 'wide_grip_seated_cable_row', - '34': 'alternating_dumbbell_row', - '35': 'inverted_row', - '36': 'row', - '37': 'weighted_row', - '38': 'indoor_row', - '39': 'banded_face_pulls', - '40': 'chest_supported_dumbbell_row', - '41': 'decline_ring_row', - '42': 'elevated_ring_row', - '43': 'rdl_bent_over_row_with_barbell_dumbbell', - '44': 'ring_row', - '45': 'barbell_row', - '46': 'bent_over_row_with_barbell', - '47': 'bent_over_row_with_dumbell', - '48': 'seated_underhand_grip_cable_row', - '49': 'trx_inverted_row', - '50': 'weighted_inverted_row', - '51': 'weighted_trx_inverted_row', - '52': 'dumbbell_row_wheelchair', + 0: 'barbell_straight_leg_deadlift_to_row', + 1: 'cable_row_standing', + 2: 'dumbbell_row', + 3: 'elevated_feet_inverted_row', + 4: 'weighted_elevated_feet_inverted_row', + 5: 'face_pull', + 6: 'face_pull_with_external_rotation', + 7: 'inverted_row_with_feet_on_swiss_ball', + 8: 'weighted_inverted_row_with_feet_on_swiss_ball', + 9: 'kettlebell_row', + 10: 'modified_inverted_row', + 11: 'weighted_modified_inverted_row', + 12: 'neutral_grip_alternating_dumbbell_row', + 13: 'one_arm_bent_over_row', + 14: 'one_legged_dumbbell_row', + 15: 'renegade_row', + 16: 'reverse_grip_barbell_row', + 17: 'rope_handle_cable_row', + 18: 'seated_cable_row', + 19: 'seated_dumbbell_row', + 20: 'single_arm_cable_row', + 21: 'single_arm_cable_row_and_rotation', + 22: 'single_arm_inverted_row', + 23: 'weighted_single_arm_inverted_row', + 24: 'single_arm_neutral_grip_dumbbell_row', + 25: 'single_arm_neutral_grip_dumbbell_row_and_rotation', + 26: 'suspended_inverted_row', + 27: 'weighted_suspended_inverted_row', + 28: 't_bar_row', + 29: 'towel_grip_inverted_row', + 30: 'weighted_towel_grip_inverted_row', + 31: 'underhand_grip_cable_row', + 32: 'v_grip_cable_row', + 33: 'wide_grip_seated_cable_row', + 34: 'alternating_dumbbell_row', + 35: 'inverted_row', + 36: 'row', + 37: 'weighted_row', + 38: 'indoor_row', + 39: 'banded_face_pulls', + 40: 'chest_supported_dumbbell_row', + 41: 'decline_ring_row', + 42: 'elevated_ring_row', + 43: 'rdl_bent_over_row_with_barbell_dumbbell', + 44: 'ring_row', + 45: 'barbell_row', + 46: 'bent_over_row_with_barbell', + 47: 'bent_over_row_with_dumbell', + 48: 'seated_underhand_grip_cable_row', + 49: 'trx_inverted_row', + 50: 'weighted_inverted_row', + 51: 'weighted_trx_inverted_row', + 52: 'dumbbell_row_wheelchair', }, 'shoulder_press_exercise_name': { - '0': 'alternating_dumbbell_shoulder_press', - '1': 'arnold_press', - '2': 'barbell_front_squat_to_push_press', - '3': 'barbell_push_press', - '4': 'barbell_shoulder_press', - '5': 'dead_curl_press', - '6': 'dumbbell_alternating_shoulder_press_and_twist', - '7': 'dumbbell_hammer_curl_to_lunge_to_press', - '8': 'dumbbell_push_press', - '9': 'floor_inverted_shoulder_press', - '10': 'weighted_floor_inverted_shoulder_press', - '11': 'inverted_shoulder_press', - '12': 'weighted_inverted_shoulder_press', - '13': 'one_arm_push_press', - '14': 'overhead_barbell_press', - '15': 'overhead_dumbbell_press', - '16': 'seated_barbell_shoulder_press', - '17': 'seated_dumbbell_shoulder_press', - '18': 'single_arm_dumbbell_shoulder_press', - '19': 'single_arm_step_up_and_press', - '20': 'smith_machine_overhead_press', - '21': 'split_stance_hammer_curl_to_press', - '22': 'swiss_ball_dumbbell_shoulder_press', - '23': 'weight_plate_front_raise', - '24': 'dumbbell_shoulder_press', - '25': 'military_press', - '27': 'strict_press', - '28': 'dumbbell_front_raise', - '29': 'dumbbell_curl_to_overhead_press_wheelchair', - '30': 'arnold_press_wheelchair', - '31': 'overhead_dumbbell_press_wheelchair', + 0: 'alternating_dumbbell_shoulder_press', + 1: 'arnold_press', + 2: 'barbell_front_squat_to_push_press', + 3: 'barbell_push_press', + 4: 'barbell_shoulder_press', + 5: 'dead_curl_press', + 6: 'dumbbell_alternating_shoulder_press_and_twist', + 7: 'dumbbell_hammer_curl_to_lunge_to_press', + 8: 'dumbbell_push_press', + 9: 'floor_inverted_shoulder_press', + 10: 'weighted_floor_inverted_shoulder_press', + 11: 'inverted_shoulder_press', + 12: 'weighted_inverted_shoulder_press', + 13: 'one_arm_push_press', + 14: 'overhead_barbell_press', + 15: 'overhead_dumbbell_press', + 16: 'seated_barbell_shoulder_press', + 17: 'seated_dumbbell_shoulder_press', + 18: 'single_arm_dumbbell_shoulder_press', + 19: 'single_arm_step_up_and_press', + 20: 'smith_machine_overhead_press', + 21: 'split_stance_hammer_curl_to_press', + 22: 'swiss_ball_dumbbell_shoulder_press', + 23: 'weight_plate_front_raise', + 24: 'dumbbell_shoulder_press', + 25: 'military_press', + 27: 'strict_press', + 28: 'dumbbell_front_raise', + 29: 'dumbbell_curl_to_overhead_press_wheelchair', + 30: 'arnold_press_wheelchair', + 31: 'overhead_dumbbell_press_wheelchair', }, 'shoulder_stability_exercise_name': { - '0': '90_degree_cable_external_rotation', - '1': 'band_external_rotation', - '2': 'band_internal_rotation', - '3': 'bent_arm_lateral_raise_and_external_rotation', - '4': 'cable_external_rotation', - '5': 'dumbbell_face_pull_with_external_rotation', - '6': 'floor_i_raise', - '7': 'weighted_floor_i_raise', - '8': 'floor_t_raise', - '9': 'weighted_floor_t_raise', - '10': 'floor_y_raise', - '11': 'weighted_floor_y_raise', - '12': 'incline_i_raise', - '13': 'weighted_incline_i_raise', - '14': 'incline_l_raise', - '15': 'weighted_incline_l_raise', - '16': 'incline_t_raise', - '17': 'weighted_incline_t_raise', - '18': 'incline_w_raise', - '19': 'weighted_incline_w_raise', - '20': 'incline_y_raise', - '21': 'weighted_incline_y_raise', - '22': 'lying_external_rotation', - '23': 'seated_dumbbell_external_rotation', - '24': 'standing_l_raise', - '25': 'swiss_ball_i_raise', - '26': 'weighted_swiss_ball_i_raise', - '27': 'swiss_ball_t_raise', - '28': 'weighted_swiss_ball_t_raise', - '29': 'swiss_ball_w_raise', - '30': 'weighted_swiss_ball_w_raise', - '31': 'swiss_ball_y_raise', - '32': 'weighted_swiss_ball_y_raise', - '33': 'cable_internal_rotation', - '34': 'lying_internal_rotation', - '35': 'seated_dumbbell_internal_rotation', + 0: '90_degree_cable_external_rotation', + 1: 'band_external_rotation', + 2: 'band_internal_rotation', + 3: 'bent_arm_lateral_raise_and_external_rotation', + 4: 'cable_external_rotation', + 5: 'dumbbell_face_pull_with_external_rotation', + 6: 'floor_i_raise', + 7: 'weighted_floor_i_raise', + 8: 'floor_t_raise', + 9: 'weighted_floor_t_raise', + 10: 'floor_y_raise', + 11: 'weighted_floor_y_raise', + 12: 'incline_i_raise', + 13: 'weighted_incline_i_raise', + 14: 'incline_l_raise', + 15: 'weighted_incline_l_raise', + 16: 'incline_t_raise', + 17: 'weighted_incline_t_raise', + 18: 'incline_w_raise', + 19: 'weighted_incline_w_raise', + 20: 'incline_y_raise', + 21: 'weighted_incline_y_raise', + 22: 'lying_external_rotation', + 23: 'seated_dumbbell_external_rotation', + 24: 'standing_l_raise', + 25: 'swiss_ball_i_raise', + 26: 'weighted_swiss_ball_i_raise', + 27: 'swiss_ball_t_raise', + 28: 'weighted_swiss_ball_t_raise', + 29: 'swiss_ball_w_raise', + 30: 'weighted_swiss_ball_w_raise', + 31: 'swiss_ball_y_raise', + 32: 'weighted_swiss_ball_y_raise', + 33: 'cable_internal_rotation', + 34: 'lying_internal_rotation', + 35: 'seated_dumbbell_internal_rotation', }, 'shrug_exercise_name': { - '0': 'barbell_jump_shrug', - '1': 'barbell_shrug', - '2': 'barbell_upright_row', - '3': 'behind_the_back_smith_machine_shrug', - '4': 'dumbbell_jump_shrug', - '5': 'dumbbell_shrug', - '6': 'dumbbell_upright_row', - '7': 'incline_dumbbell_shrug', - '8': 'overhead_barbell_shrug', - '9': 'overhead_dumbbell_shrug', - '10': 'scaption_and_shrug', - '11': 'scapular_retraction', - '12': 'serratus_chair_shrug', - '13': 'weighted_serratus_chair_shrug', - '14': 'serratus_shrug', - '15': 'weighted_serratus_shrug', - '16': 'wide_grip_jump_shrug', - '17': 'wide_grip_barbell_shrug', - '18': 'behind_the_back_shrug', - '19': 'dumbbell_shrug_wheelchair', - '20': 'shrug_wheelchair', - '21': 'shrug_arm_down_wheelchair', - '22': 'shrug_arm_mid_wheelchair', - '23': 'shrug_arm_up_wheelchair', - '24': 'upright_row', + 0: 'barbell_jump_shrug', + 1: 'barbell_shrug', + 2: 'barbell_upright_row', + 3: 'behind_the_back_smith_machine_shrug', + 4: 'dumbbell_jump_shrug', + 5: 'dumbbell_shrug', + 6: 'dumbbell_upright_row', + 7: 'incline_dumbbell_shrug', + 8: 'overhead_barbell_shrug', + 9: 'overhead_dumbbell_shrug', + 10: 'scaption_and_shrug', + 11: 'scapular_retraction', + 12: 'serratus_chair_shrug', + 13: 'weighted_serratus_chair_shrug', + 14: 'serratus_shrug', + 15: 'weighted_serratus_shrug', + 16: 'wide_grip_jump_shrug', + 17: 'wide_grip_barbell_shrug', + 18: 'behind_the_back_shrug', + 19: 'dumbbell_shrug_wheelchair', + 20: 'shrug_wheelchair', + 21: 'shrug_arm_down_wheelchair', + 22: 'shrug_arm_mid_wheelchair', + 23: 'shrug_arm_up_wheelchair', + 24: 'upright_row', }, 'sit_up_exercise_name': { - '0': 'alternating_sit_up', - '1': 'weighted_alternating_sit_up', - '2': 'bent_knee_v_up', - '3': 'weighted_bent_knee_v_up', - '4': 'butterfly_sit_up', - '5': 'weighted_butterfly_situp', - '6': 'cross_punch_roll_up', - '7': 'weighted_cross_punch_roll_up', - '8': 'crossed_arms_sit_up', - '9': 'weighted_crossed_arms_sit_up', - '10': 'get_up_sit_up', - '11': 'weighted_get_up_sit_up', - '12': 'hovering_sit_up', - '13': 'weighted_hovering_sit_up', - '14': 'kettlebell_sit_up', - '15': 'medicine_ball_alternating_v_up', - '16': 'medicine_ball_sit_up', - '17': 'medicine_ball_v_up', - '18': 'modified_sit_up', - '19': 'negative_sit_up', - '20': 'one_arm_full_sit_up', - '21': 'reclining_circle', - '22': 'weighted_reclining_circle', - '23': 'reverse_curl_up', - '24': 'weighted_reverse_curl_up', - '25': 'single_leg_swiss_ball_jackknife', - '26': 'weighted_single_leg_swiss_ball_jackknife', - '27': 'the_teaser', - '28': 'the_teaser_weighted', - '29': 'three_part_roll_down', - '30': 'weighted_three_part_roll_down', - '31': 'v_up', - '32': 'weighted_v_up', - '33': 'weighted_russian_twist_on_swiss_ball', - '34': 'weighted_sit_up', - '35': 'x_abs', - '36': 'weighted_x_abs', - '37': 'sit_up', - '38': 'ghd_sit_ups', - '39': 'sit_up_turkish_get_up', - '40': 'russian_twist_on_swiss_ball', + 0: 'alternating_sit_up', + 1: 'weighted_alternating_sit_up', + 2: 'bent_knee_v_up', + 3: 'weighted_bent_knee_v_up', + 4: 'butterfly_sit_up', + 5: 'weighted_butterfly_situp', + 6: 'cross_punch_roll_up', + 7: 'weighted_cross_punch_roll_up', + 8: 'crossed_arms_sit_up', + 9: 'weighted_crossed_arms_sit_up', + 10: 'get_up_sit_up', + 11: 'weighted_get_up_sit_up', + 12: 'hovering_sit_up', + 13: 'weighted_hovering_sit_up', + 14: 'kettlebell_sit_up', + 15: 'medicine_ball_alternating_v_up', + 16: 'medicine_ball_sit_up', + 17: 'medicine_ball_v_up', + 18: 'modified_sit_up', + 19: 'negative_sit_up', + 20: 'one_arm_full_sit_up', + 21: 'reclining_circle', + 22: 'weighted_reclining_circle', + 23: 'reverse_curl_up', + 24: 'weighted_reverse_curl_up', + 25: 'single_leg_swiss_ball_jackknife', + 26: 'weighted_single_leg_swiss_ball_jackknife', + 27: 'the_teaser', + 28: 'the_teaser_weighted', + 29: 'three_part_roll_down', + 30: 'weighted_three_part_roll_down', + 31: 'v_up', + 32: 'weighted_v_up', + 33: 'weighted_russian_twist_on_swiss_ball', + 34: 'weighted_sit_up', + 35: 'x_abs', + 36: 'weighted_x_abs', + 37: 'sit_up', + 38: 'ghd_sit_ups', + 39: 'sit_up_turkish_get_up', + 40: 'russian_twist_on_swiss_ball', }, 'squat_exercise_name': { - '0': 'leg_press', - '1': 'back_squat_with_body_bar', - '2': 'back_squats', - '3': 'weighted_back_squats', - '4': 'balancing_squat', - '5': 'weighted_balancing_squat', - '6': 'barbell_back_squat', - '7': 'barbell_box_squat', - '8': 'barbell_front_squat', - '9': 'barbell_hack_squat', - '10': 'barbell_hang_squat_snatch', - '11': 'barbell_lateral_step_up', - '12': 'barbell_quarter_squat', - '13': 'barbell_siff_squat', - '14': 'barbell_squat_snatch', - '15': 'barbell_squat_with_heels_raised', - '16': 'barbell_stepover', - '17': 'barbell_step_up', - '18': 'bench_squat_with_rotational_chop', - '19': 'weighted_bench_squat_with_rotational_chop', - '20': 'body_weight_wall_squat', - '21': 'weighted_wall_squat', - '22': 'box_step_squat', - '23': 'weighted_box_step_squat', - '24': 'braced_squat', - '25': 'crossed_arm_barbell_front_squat', - '26': 'crossover_dumbbell_step_up', - '27': 'dumbbell_front_squat', - '28': 'dumbbell_split_squat', - '29': 'dumbbell_squat', - '30': 'dumbbell_squat_clean', - '31': 'dumbbell_stepover', - '32': 'dumbbell_step_up', - '33': 'elevated_single_leg_squat', - '34': 'weighted_elevated_single_leg_squat', - '35': 'figure_four_squats', - '36': 'weighted_figure_four_squats', - '37': 'goblet_squat', - '38': 'kettlebell_squat', - '39': 'kettlebell_swing_overhead', - '40': 'kettlebell_swing_with_flip_to_squat', - '41': 'lateral_dumbbell_step_up', - '42': 'one_legged_squat', - '43': 'overhead_dumbbell_squat', - '44': 'overhead_squat', - '45': 'partial_single_leg_squat', - '46': 'weighted_partial_single_leg_squat', - '47': 'pistol_squat', - '48': 'weighted_pistol_squat', - '49': 'plie_slides', - '50': 'weighted_plie_slides', - '51': 'plie_squat', - '52': 'weighted_plie_squat', - '53': 'prisoner_squat', - '54': 'weighted_prisoner_squat', - '55': 'single_leg_bench_get_up', - '56': 'weighted_single_leg_bench_get_up', - '57': 'single_leg_bench_squat', - '58': 'weighted_single_leg_bench_squat', - '59': 'single_leg_squat_on_swiss_ball', - '60': 'weighted_single_leg_squat_on_swiss_ball', - '61': 'squat', - '62': 'weighted_squat', - '63': 'squats_with_band', - '64': 'staggered_squat', - '65': 'weighted_staggered_squat', - '66': 'step_up', - '67': 'weighted_step_up', - '68': 'suitcase_squats', - '69': 'sumo_squat', - '70': 'sumo_squat_slide_in', - '71': 'weighted_sumo_squat_slide_in', - '72': 'sumo_squat_to_high_pull', - '73': 'sumo_squat_to_stand', - '74': 'weighted_sumo_squat_to_stand', - '75': 'sumo_squat_with_rotation', - '76': 'weighted_sumo_squat_with_rotation', - '77': 'swiss_ball_body_weight_wall_squat', - '78': 'weighted_swiss_ball_wall_squat', - '79': 'thrusters', - '80': 'uneven_squat', - '81': 'weighted_uneven_squat', - '82': 'waist_slimming_squat', - '83': 'wall_ball', - '84': 'wide_stance_barbell_squat', - '85': 'wide_stance_goblet_squat', - '86': 'zercher_squat', - '87': 'kbs_overhead', # Deprecated do not use - '88': 'squat_and_side_kick', - '89': 'squat_jumps_in_n_out', - '90': 'pilates_plie_squats_parallel_turned_out_flat_and_heels', - '91': 'releve_straight_leg_and_knee_bent_with_one_leg_variation', - '92': 'alternating_box_dumbbell_step_ups', - '93': 'dumbbell_overhead_squat_single_arm', - '94': 'dumbbell_squat_snatch', - '95': 'medicine_ball_squat', - '97': 'wall_ball_squat_and_press', - '98': 'squat_american_swing', - '100': 'air_squat', - '101': 'dumbbell_thrusters', - '102': 'overhead_barbell_squat', + 0: 'leg_press', + 1: 'back_squat_with_body_bar', + 2: 'back_squats', + 3: 'weighted_back_squats', + 4: 'balancing_squat', + 5: 'weighted_balancing_squat', + 6: 'barbell_back_squat', + 7: 'barbell_box_squat', + 8: 'barbell_front_squat', + 9: 'barbell_hack_squat', + 10: 'barbell_hang_squat_snatch', + 11: 'barbell_lateral_step_up', + 12: 'barbell_quarter_squat', + 13: 'barbell_siff_squat', + 14: 'barbell_squat_snatch', + 15: 'barbell_squat_with_heels_raised', + 16: 'barbell_stepover', + 17: 'barbell_step_up', + 18: 'bench_squat_with_rotational_chop', + 19: 'weighted_bench_squat_with_rotational_chop', + 20: 'body_weight_wall_squat', + 21: 'weighted_wall_squat', + 22: 'box_step_squat', + 23: 'weighted_box_step_squat', + 24: 'braced_squat', + 25: 'crossed_arm_barbell_front_squat', + 26: 'crossover_dumbbell_step_up', + 27: 'dumbbell_front_squat', + 28: 'dumbbell_split_squat', + 29: 'dumbbell_squat', + 30: 'dumbbell_squat_clean', + 31: 'dumbbell_stepover', + 32: 'dumbbell_step_up', + 33: 'elevated_single_leg_squat', + 34: 'weighted_elevated_single_leg_squat', + 35: 'figure_four_squats', + 36: 'weighted_figure_four_squats', + 37: 'goblet_squat', + 38: 'kettlebell_squat', + 39: 'kettlebell_swing_overhead', + 40: 'kettlebell_swing_with_flip_to_squat', + 41: 'lateral_dumbbell_step_up', + 42: 'one_legged_squat', + 43: 'overhead_dumbbell_squat', + 44: 'overhead_squat', + 45: 'partial_single_leg_squat', + 46: 'weighted_partial_single_leg_squat', + 47: 'pistol_squat', + 48: 'weighted_pistol_squat', + 49: 'plie_slides', + 50: 'weighted_plie_slides', + 51: 'plie_squat', + 52: 'weighted_plie_squat', + 53: 'prisoner_squat', + 54: 'weighted_prisoner_squat', + 55: 'single_leg_bench_get_up', + 56: 'weighted_single_leg_bench_get_up', + 57: 'single_leg_bench_squat', + 58: 'weighted_single_leg_bench_squat', + 59: 'single_leg_squat_on_swiss_ball', + 60: 'weighted_single_leg_squat_on_swiss_ball', + 61: 'squat', + 62: 'weighted_squat', + 63: 'squats_with_band', + 64: 'staggered_squat', + 65: 'weighted_staggered_squat', + 66: 'step_up', + 67: 'weighted_step_up', + 68: 'suitcase_squats', + 69: 'sumo_squat', + 70: 'sumo_squat_slide_in', + 71: 'weighted_sumo_squat_slide_in', + 72: 'sumo_squat_to_high_pull', + 73: 'sumo_squat_to_stand', + 74: 'weighted_sumo_squat_to_stand', + 75: 'sumo_squat_with_rotation', + 76: 'weighted_sumo_squat_with_rotation', + 77: 'swiss_ball_body_weight_wall_squat', + 78: 'weighted_swiss_ball_wall_squat', + 79: 'thrusters', + 80: 'uneven_squat', + 81: 'weighted_uneven_squat', + 82: 'waist_slimming_squat', + 83: 'wall_ball', + 84: 'wide_stance_barbell_squat', + 85: 'wide_stance_goblet_squat', + 86: 'zercher_squat', + 87: 'kbs_overhead', # Deprecated do not use + 88: 'squat_and_side_kick', + 89: 'squat_jumps_in_n_out', + 90: 'pilates_plie_squats_parallel_turned_out_flat_and_heels', + 91: 'releve_straight_leg_and_knee_bent_with_one_leg_variation', + 92: 'alternating_box_dumbbell_step_ups', + 93: 'dumbbell_overhead_squat_single_arm', + 94: 'dumbbell_squat_snatch', + 95: 'medicine_ball_squat', + 97: 'wall_ball_squat_and_press', + 98: 'squat_american_swing', + 100: 'air_squat', + 101: 'dumbbell_thrusters', + 102: 'overhead_barbell_squat', }, 'total_body_exercise_name': { - '0': 'burpee', - '1': 'weighted_burpee', - '2': 'burpee_box_jump', - '3': 'weighted_burpee_box_jump', - '4': 'high_pull_burpee', - '5': 'man_makers', - '6': 'one_arm_burpee', - '7': 'squat_thrusts', - '8': 'weighted_squat_thrusts', - '9': 'squat_plank_push_up', - '10': 'weighted_squat_plank_push_up', - '11': 'standing_t_rotation_balance', - '12': 'weighted_standing_t_rotation_balance', - '13': 'barbell_burpee', - '15': 'burpee_box_jump_over_yes_literally_jumping_over_the_box', - '16': 'burpee_box_jump_step_up_over', - '17': 'lateral_barbell_burpee', - '18': 'total_body_burpee_over_bar', - '19': 'burpee_box_jump_over', - '20': 'burpee_wheelchair', + 0: 'burpee', + 1: 'weighted_burpee', + 2: 'burpee_box_jump', + 3: 'weighted_burpee_box_jump', + 4: 'high_pull_burpee', + 5: 'man_makers', + 6: 'one_arm_burpee', + 7: 'squat_thrusts', + 8: 'weighted_squat_thrusts', + 9: 'squat_plank_push_up', + 10: 'weighted_squat_plank_push_up', + 11: 'standing_t_rotation_balance', + 12: 'weighted_standing_t_rotation_balance', + 13: 'barbell_burpee', + 15: 'burpee_box_jump_over_yes_literally_jumping_over_the_box', + 16: 'burpee_box_jump_step_up_over', + 17: 'lateral_barbell_burpee', + 18: 'total_body_burpee_over_bar', + 19: 'burpee_box_jump_over', + 20: 'burpee_wheelchair', }, 'move_exercise_name': { - '0': 'arch_and_curl', - '1': 'arm_circles_with_ball_band_and_weight', - '2': 'arm_stretch', - '3': 'back_massage', - '4': 'belly_breathing', - '5': 'bridge_with_ball', - '6': 'diamond_leg_crunch', - '7': 'diamond_leg_lift', - '8': 'eight_point_shoulder_opener', - '9': 'foot_rolling', - '10': 'footwork', - '11': 'footwork_on_disc', - '12': 'forward_fold', - '13': 'frog_with_band', - '14': 'half_roll_up', - '15': 'hamstring_curl', - '16': 'hamstring_stretch', - '17': 'hip_stretch', - '18': 'hug_a_tree_with_ball_band_and_weight', - '19': 'knee_circles', - '20': 'knee_folds_on_disc', - '21': 'lateral_flexion', - '22': 'leg_stretch_with_band', - '23': 'leg_stretch_with_leg_circles', - '24': 'lower_lift_on_disc', - '25': 'lunge_squat', - '26': 'lunges_with_knee_lift', - '27': 'mermaid_stretch', - '28': 'neutral_pelvic_position', - '29': 'pelvic_clocks_on_disc', - '30': 'pilates_plie_squats_parallel_turned_out_flat_and_heels_with_chair', - '31': 'piriformis_stretch', - '32': 'plank_knee_crosses', - '33': 'plank_knee_pulls', - '34': 'plank_up_downs', - '35': 'prayer_mudra', - '36': 'psoas_lunge_stretch', - '37': 'ribcage_breathing', - '38': 'roll_down', - '39': 'roll_up_with_weight_and_band', - '40': 'saw', - '41': 'scapular_stabilization', - '42': 'scissors_on_disc', - '43': 'seated_hip_stretchup', - '44': 'seated_twist', - '45': 'shaving_the_head_with_ball_band_and_weight', - '46': 'spinal_twist', - '47': 'spinal_twist_stretch', - '48': 'spine_stretch_forward', - '49': 'squat_open_arm_twist_pose', - '50': 'squats_with_ball', - '51': 'stand_and_hang', - '52': 'standing_side_stretch', - '53': 'standing_single_leg_forward_bend_with_it_band_opener', - '54': 'straight_leg_crunch_with_leg_lift', - '55': 'straight_leg_crunch_with_leg_lift_with_ball', - '56': 'straight_leg_crunch_with_legs_crossed', - '57': 'straight_leg_crunch_with_legs_crossed_with_ball', - '58': 'straight_leg_diagonal_crunch', - '59': 'straight_leg_diagonal_crunch_with_ball', - '60': 'tailbone_curl', - '61': 'throat_lock', - '62': 'tick_tock_side_roll', - '63': 'twist', - '64': 'v_leg_crunches', - '65': 'v_sit', - '66': 'forward_fold_wheelchair', - '67': 'forward_fold_plus_wheelchair', - '68': 'arm_circles_low_forward_wheelchair', - '69': 'arm_circles_mid_forward_wheelchair', - '70': 'arm_circles_high_forward_wheelchair', - '71': 'arm_circles_low_backward_wheelchair', - '72': 'arm_circles_mid_backward_wheelchair', - '73': 'arm_circles_high_backward_wheelchair', - '74': 'core_twists_wheelchair', - '75': 'arm_raise_wheelchair', - '76': 'chest_expand_wheelchair', - '77': 'arm_extend_wheelchair', - '78': 'forward_bend_wheelchair', - '79': 'toe_touch_wheelchair', - '80': 'extended_toe_touch_wheelchair', - '81': 'seated_arm_circles', - '82': 'trunk_rotations', - '83': 'seated_trunk_rotations', - '84': 'toe_touch', + 0: 'arch_and_curl', + 1: 'arm_circles_with_ball_band_and_weight', + 2: 'arm_stretch', + 3: 'back_massage', + 4: 'belly_breathing', + 5: 'bridge_with_ball', + 6: 'diamond_leg_crunch', + 7: 'diamond_leg_lift', + 8: 'eight_point_shoulder_opener', + 9: 'foot_rolling', + 10: 'footwork', + 11: 'footwork_on_disc', + 12: 'forward_fold', + 13: 'frog_with_band', + 14: 'half_roll_up', + 15: 'hamstring_curl', + 16: 'hamstring_stretch', + 17: 'hip_stretch', + 18: 'hug_a_tree_with_ball_band_and_weight', + 19: 'knee_circles', + 20: 'knee_folds_on_disc', + 21: 'lateral_flexion', + 22: 'leg_stretch_with_band', + 23: 'leg_stretch_with_leg_circles', + 24: 'lower_lift_on_disc', + 25: 'lunge_squat', + 26: 'lunges_with_knee_lift', + 27: 'mermaid_stretch', + 28: 'neutral_pelvic_position', + 29: 'pelvic_clocks_on_disc', + 30: 'pilates_plie_squats_parallel_turned_out_flat_and_heels_with_chair', + 31: 'piriformis_stretch', + 32: 'plank_knee_crosses', + 33: 'plank_knee_pulls', + 34: 'plank_up_downs', + 35: 'prayer_mudra', + 36: 'psoas_lunge_stretch', + 37: 'ribcage_breathing', + 38: 'roll_down', + 39: 'roll_up_with_weight_and_band', + 40: 'saw', + 41: 'scapular_stabilization', + 42: 'scissors_on_disc', + 43: 'seated_hip_stretchup', + 44: 'seated_twist', + 45: 'shaving_the_head_with_ball_band_and_weight', + 46: 'spinal_twist', + 47: 'spinal_twist_stretch', + 48: 'spine_stretch_forward', + 49: 'squat_open_arm_twist_pose', + 50: 'squats_with_ball', + 51: 'stand_and_hang', + 52: 'standing_side_stretch', + 53: 'standing_single_leg_forward_bend_with_it_band_opener', + 54: 'straight_leg_crunch_with_leg_lift', + 55: 'straight_leg_crunch_with_leg_lift_with_ball', + 56: 'straight_leg_crunch_with_legs_crossed', + 57: 'straight_leg_crunch_with_legs_crossed_with_ball', + 58: 'straight_leg_diagonal_crunch', + 59: 'straight_leg_diagonal_crunch_with_ball', + 60: 'tailbone_curl', + 61: 'throat_lock', + 62: 'tick_tock_side_roll', + 63: 'twist', + 64: 'v_leg_crunches', + 65: 'v_sit', + 66: 'forward_fold_wheelchair', + 67: 'forward_fold_plus_wheelchair', + 68: 'arm_circles_low_forward_wheelchair', + 69: 'arm_circles_mid_forward_wheelchair', + 70: 'arm_circles_high_forward_wheelchair', + 71: 'arm_circles_low_backward_wheelchair', + 72: 'arm_circles_mid_backward_wheelchair', + 73: 'arm_circles_high_backward_wheelchair', + 74: 'core_twists_wheelchair', + 75: 'arm_raise_wheelchair', + 76: 'chest_expand_wheelchair', + 77: 'arm_extend_wheelchair', + 78: 'forward_bend_wheelchair', + 79: 'toe_touch_wheelchair', + 80: 'extended_toe_touch_wheelchair', + 81: 'seated_arm_circles', + 82: 'trunk_rotations', + 83: 'seated_trunk_rotations', + 84: 'toe_touch', }, 'pose_exercise_name': { - '0': 'all_fours', - '1': 'ankle_to_knee', - '2': 'baby_cobra', - '3': 'boat', - '4': 'bound_angle', - '5': 'bound_seated_single_leg_forward_bend', - '6': 'bow', - '7': 'bowed_half_moon', - '8': 'bridge', - '9': 'cat', - '10': 'chair', - '11': 'childs', - '12': 'corpse', - '13': 'cow_face', - '14': 'cow', - '15': 'devotional_warrior', - '16': 'dolphin_plank', - '17': 'dolphin', - '18': 'down_dog_knee_to_nose', - '19': 'down_dog_split', - '20': 'down_dog_split_open_hip_bent_knee', - '21': 'downward_facing_dog', - '22': 'eagle', - '23': 'easy_seated', - '24': 'extended_puppy', - '25': 'extended_side_angle', - '26': 'fish', - '27': 'four_limbed_staff', - '28': 'full_split', - '29': 'gate', - '30': 'half_chair_half_ankle_to_knee', - '31': 'half_moon', - '32': 'head_to_knee', - '33': 'heron', - '34': 'heros', - '35': 'high_lunge', - '36': 'knees_chest_chin', - '37': 'lizard', - '38': 'locust', - '39': 'low_lunge', - '40': 'low_lunge_twist', - '41': 'low_lunge_with_knee_down', - '42': 'mermaid', - '43': 'mountain', - '44': 'one_legged_downward_facing_pose_open_hip_bent_knee', - '45': 'one_legged_pigeon', - '46': 'peaceful_warrior', - '47': 'plank', - '48': 'plow', - '49': 'reclined_hand_to_foot', - '50': 'revolved_half_moon', - '51': 'revolved_head_to_knee', - '52': 'revolved_triangle', - '53': 'runners_lunge', - '54': 'seated_easy_side_bend', - '55': 'seated_easy_twist', - '56': 'seated_long_leg_forward_bend', - '57': 'seated_wide_leg_forward_bend', - '58': 'shoulder_stand', - '59': 'side_boat', - '60': 'side_plank', - '61': 'sphinx', - '62': 'squat_open_arm_twist', - '63': 'squat_palm_press', - '64': 'staff', - '65': 'standing_arms_up', - '66': 'standing_forward_bend_halfway_up', - '67': 'standing_forward_bend', - '68': 'standing_side_opener', - '69': 'standing_single_leg_forward_bend', - '70': 'standing_split', - '71': 'standing_wide_leg_forward_bend', - '72': 'standing_wide_leg_forward_bend_with_twist', - '73': 'supine_spinal_twist', - '74': 'table_top', - '75': 'thread_the_needle', - '76': 'thunderbolt', - '77': 'thunderbolt_pose_both_sides_arm_stretch', - '78': 'tree', - '79': 'triangle', - '80': 'up_dog', - '81': 'upward_facing_plank', - '82': 'warrior_one', - '83': 'warrior_three', - '84': 'warrior_two', - '85': 'wheel', - '86': 'wide_side_lunge', - '87': 'deep_breathing_wheelchair', - '88': 'deep_breathing_low_wheelchair', - '89': 'deep_breathing_mid_wheelchair', - '90': 'deep_breathing_high_wheelchair', - '91': 'prayer_wheelchair', - '92': 'overhead_prayer_wheelchair', - '93': 'cactus_wheelchair', - '94': 'breathing_punches_wheelchair', - '95': 'breathing_punches_extended_wheelchair', - '96': 'breathing_punches_overhead_wheelchair', - '97': 'breathing_punches_overhead_and_down_wheelchair', - '98': 'breathing_punches_side_wheelchair', - '99': 'breathing_punches_extended_side_wheelchair', - '100': 'breathing_punches_overhead_side_wheelchair', - '101': 'breathing_punches_overhead_and_down_side_wheelchair', - '102': 'left_hand_back_wheelchair', - '103': 'triangle_wheelchair', - '104': 'thread_the_needle_wheelchair', - '105': 'neck_flexion_and_extension_wheelchair', - '106': 'neck_lateral_flexion_wheelchair', - '107': 'spine_flexion_and_extension_wheelchair', - '108': 'spine_rotation_wheelchair', - '109': 'spine_lateral_flexion_wheelchair', - '110': 'alternative_skiing_wheelchair', - '111': 'reach_forward_wheelchair', - '112': 'warrior_wheelchair', - '113': 'reverse_warrior_wheelchair', - '114': 'downward_facing_dog_to_cobra', - '115': 'seated_cat_cow', + 0: 'all_fours', + 1: 'ankle_to_knee', + 2: 'baby_cobra', + 3: 'boat', + 4: 'bound_angle', + 5: 'bound_seated_single_leg_forward_bend', + 6: 'bow', + 7: 'bowed_half_moon', + 8: 'bridge', + 9: 'cat', + 10: 'chair', + 11: 'childs', + 12: 'corpse', + 13: 'cow_face', + 14: 'cow', + 15: 'devotional_warrior', + 16: 'dolphin_plank', + 17: 'dolphin', + 18: 'down_dog_knee_to_nose', + 19: 'down_dog_split', + 20: 'down_dog_split_open_hip_bent_knee', + 21: 'downward_facing_dog', + 22: 'eagle', + 23: 'easy_seated', + 24: 'extended_puppy', + 25: 'extended_side_angle', + 26: 'fish', + 27: 'four_limbed_staff', + 28: 'full_split', + 29: 'gate', + 30: 'half_chair_half_ankle_to_knee', + 31: 'half_moon', + 32: 'head_to_knee', + 33: 'heron', + 34: 'heros', + 35: 'high_lunge', + 36: 'knees_chest_chin', + 37: 'lizard', + 38: 'locust', + 39: 'low_lunge', + 40: 'low_lunge_twist', + 41: 'low_lunge_with_knee_down', + 42: 'mermaid', + 43: 'mountain', + 44: 'one_legged_downward_facing_pose_open_hip_bent_knee', + 45: 'one_legged_pigeon', + 46: 'peaceful_warrior', + 47: 'plank', + 48: 'plow', + 49: 'reclined_hand_to_foot', + 50: 'revolved_half_moon', + 51: 'revolved_head_to_knee', + 52: 'revolved_triangle', + 53: 'runners_lunge', + 54: 'seated_easy_side_bend', + 55: 'seated_easy_twist', + 56: 'seated_long_leg_forward_bend', + 57: 'seated_wide_leg_forward_bend', + 58: 'shoulder_stand', + 59: 'side_boat', + 60: 'side_plank', + 61: 'sphinx', + 62: 'squat_open_arm_twist', + 63: 'squat_palm_press', + 64: 'staff', + 65: 'standing_arms_up', + 66: 'standing_forward_bend_halfway_up', + 67: 'standing_forward_bend', + 68: 'standing_side_opener', + 69: 'standing_single_leg_forward_bend', + 70: 'standing_split', + 71: 'standing_wide_leg_forward_bend', + 72: 'standing_wide_leg_forward_bend_with_twist', + 73: 'supine_spinal_twist', + 74: 'table_top', + 75: 'thread_the_needle', + 76: 'thunderbolt', + 77: 'thunderbolt_pose_both_sides_arm_stretch', + 78: 'tree', + 79: 'triangle', + 80: 'up_dog', + 81: 'upward_facing_plank', + 82: 'warrior_one', + 83: 'warrior_three', + 84: 'warrior_two', + 85: 'wheel', + 86: 'wide_side_lunge', + 87: 'deep_breathing_wheelchair', + 88: 'deep_breathing_low_wheelchair', + 89: 'deep_breathing_mid_wheelchair', + 90: 'deep_breathing_high_wheelchair', + 91: 'prayer_wheelchair', + 92: 'overhead_prayer_wheelchair', + 93: 'cactus_wheelchair', + 94: 'breathing_punches_wheelchair', + 95: 'breathing_punches_extended_wheelchair', + 96: 'breathing_punches_overhead_wheelchair', + 97: 'breathing_punches_overhead_and_down_wheelchair', + 98: 'breathing_punches_side_wheelchair', + 99: 'breathing_punches_extended_side_wheelchair', + 100: 'breathing_punches_overhead_side_wheelchair', + 101: 'breathing_punches_overhead_and_down_side_wheelchair', + 102: 'left_hand_back_wheelchair', + 103: 'triangle_wheelchair', + 104: 'thread_the_needle_wheelchair', + 105: 'neck_flexion_and_extension_wheelchair', + 106: 'neck_lateral_flexion_wheelchair', + 107: 'spine_flexion_and_extension_wheelchair', + 108: 'spine_rotation_wheelchair', + 109: 'spine_lateral_flexion_wheelchair', + 110: 'alternative_skiing_wheelchair', + 111: 'reach_forward_wheelchair', + 112: 'warrior_wheelchair', + 113: 'reverse_warrior_wheelchair', + 114: 'downward_facing_dog_to_cobra', + 115: 'seated_cat_cow', }, 'triceps_extension_exercise_name': { - '0': 'bench_dip', - '1': 'weighted_bench_dip', - '2': 'body_weight_dip', - '3': 'cable_kickback', - '4': 'cable_lying_triceps_extension', - '5': 'cable_overhead_triceps_extension', - '6': 'dumbbell_kickback', - '7': 'dumbbell_lying_triceps_extension', - '8': 'ez_bar_overhead_triceps_extension', - '9': 'incline_dip', - '10': 'weighted_incline_dip', - '11': 'incline_ez_bar_lying_triceps_extension', - '12': 'lying_dumbbell_pullover_to_extension', - '13': 'lying_ez_bar_triceps_extension', - '14': 'lying_triceps_extension_to_close_grip_bench_press', - '15': 'overhead_dumbbell_triceps_extension', - '16': 'reclining_triceps_press', - '17': 'reverse_grip_pressdown', - '18': 'reverse_grip_triceps_pressdown', - '19': 'rope_pressdown', - '20': 'seated_barbell_overhead_triceps_extension', - '21': 'seated_dumbbell_overhead_triceps_extension', - '22': 'seated_ez_bar_overhead_triceps_extension', - '23': 'seated_single_arm_overhead_dumbbell_extension', - '24': 'single_arm_dumbbell_overhead_triceps_extension', - '25': 'single_dumbbell_seated_overhead_triceps_extension', - '26': 'single_leg_bench_dip_and_kick', - '27': 'weighted_single_leg_bench_dip_and_kick', - '28': 'single_leg_dip', - '29': 'weighted_single_leg_dip', - '30': 'static_lying_triceps_extension', - '31': 'suspended_dip', - '32': 'weighted_suspended_dip', - '33': 'swiss_ball_dumbbell_lying_triceps_extension', - '34': 'swiss_ball_ez_bar_lying_triceps_extension', - '35': 'swiss_ball_ez_bar_overhead_triceps_extension', - '36': 'tabletop_dip', - '37': 'weighted_tabletop_dip', - '38': 'triceps_extension_on_floor', - '39': 'triceps_pressdown', - '40': 'weighted_dip', - '41': 'alternating_dumbbell_lying_triceps_extension', - '42': 'triceps_press', - '43': 'dumbbell_kickback_wheelchair', - '44': 'overhead_dumbbell_triceps_extension_wheelchair', + 0: 'bench_dip', + 1: 'weighted_bench_dip', + 2: 'body_weight_dip', + 3: 'cable_kickback', + 4: 'cable_lying_triceps_extension', + 5: 'cable_overhead_triceps_extension', + 6: 'dumbbell_kickback', + 7: 'dumbbell_lying_triceps_extension', + 8: 'ez_bar_overhead_triceps_extension', + 9: 'incline_dip', + 10: 'weighted_incline_dip', + 11: 'incline_ez_bar_lying_triceps_extension', + 12: 'lying_dumbbell_pullover_to_extension', + 13: 'lying_ez_bar_triceps_extension', + 14: 'lying_triceps_extension_to_close_grip_bench_press', + 15: 'overhead_dumbbell_triceps_extension', + 16: 'reclining_triceps_press', + 17: 'reverse_grip_pressdown', + 18: 'reverse_grip_triceps_pressdown', + 19: 'rope_pressdown', + 20: 'seated_barbell_overhead_triceps_extension', + 21: 'seated_dumbbell_overhead_triceps_extension', + 22: 'seated_ez_bar_overhead_triceps_extension', + 23: 'seated_single_arm_overhead_dumbbell_extension', + 24: 'single_arm_dumbbell_overhead_triceps_extension', + 25: 'single_dumbbell_seated_overhead_triceps_extension', + 26: 'single_leg_bench_dip_and_kick', + 27: 'weighted_single_leg_bench_dip_and_kick', + 28: 'single_leg_dip', + 29: 'weighted_single_leg_dip', + 30: 'static_lying_triceps_extension', + 31: 'suspended_dip', + 32: 'weighted_suspended_dip', + 33: 'swiss_ball_dumbbell_lying_triceps_extension', + 34: 'swiss_ball_ez_bar_lying_triceps_extension', + 35: 'swiss_ball_ez_bar_overhead_triceps_extension', + 36: 'tabletop_dip', + 37: 'weighted_tabletop_dip', + 38: 'triceps_extension_on_floor', + 39: 'triceps_pressdown', + 40: 'weighted_dip', + 41: 'alternating_dumbbell_lying_triceps_extension', + 42: 'triceps_press', + 43: 'dumbbell_kickback_wheelchair', + 44: 'overhead_dumbbell_triceps_extension_wheelchair', }, 'warm_up_exercise_name': { - '0': 'quadruped_rocking', - '1': 'neck_tilts', - '2': 'ankle_circles', - '3': 'ankle_dorsiflexion_with_band', - '4': 'ankle_internal_rotation', - '5': 'arm_circles', - '6': 'bent_over_reach_to_sky', - '7': 'cat_camel', - '8': 'elbow_to_foot_lunge', - '9': 'forward_and_backward_leg_swings', - '10': 'groiners', - '11': 'inverted_hamstring_stretch', - '12': 'lateral_duck_under', - '13': 'neck_rotations', - '14': 'opposite_arm_and_leg_balance', - '15': 'reach_roll_and_lift', - '16': 'scorpion', # Deprecated do not use - '17': 'shoulder_circles', - '18': 'side_to_side_leg_swings', - '19': 'sleeper_stretch', - '20': 'slide_out', - '21': 'swiss_ball_hip_crossover', - '22': 'swiss_ball_reach_roll_and_lift', - '23': 'swiss_ball_windshield_wipers', - '24': 'thoracic_rotation', - '25': 'walking_high_kicks', - '26': 'walking_high_knees', - '27': 'walking_knee_hugs', - '28': 'walking_leg_cradles', - '29': 'walkout', - '30': 'walkout_from_push_up_position', - '31': 'biceps_stretch', - '32': 'glutes_stretch', - '33': 'standing_hamstring_stretch', - '34': 'stretch_90_90', - '35': 'stretch_abs', - '36': 'stretch_butterfly', - '37': 'stretch_calf', - '38': 'stretch_cat_cow', - '39': 'stretch_childs_pose', - '40': 'stretch_cobra', - '41': 'stretch_forearms', - '42': 'stretch_forward_glutes', - '43': 'stretch_front_split', - '44': 'stretch_hamstring', - '45': 'stretch_hip_flexor_and_quad', - '46': 'stretch_lat', - '47': 'stretch_levator_scapulae', - '48': 'stretch_lunge_with_spinal_twist', - '49': 'stretch_lunging_hip_flexor', - '50': 'stretch_lying_abduction', - '51': 'stretch_lying_it_band', - '52': 'stretch_lying_knee_to_chest', - '53': 'stretch_lying_piriformis', - '54': 'stretch_lying_spinal_twist', - '55': 'stretch_neck', - '56': 'stretch_obliques', - '57': 'stretch_over_under_shoulder', - '58': 'stretch_pectoral', - '59': 'stretch_pigeon_pose', - '60': 'stretch_piriformis', - '61': 'stretch_quad', - '62': 'stretch_scorpion', - '63': 'stretch_shoulder', - '64': 'stretch_side', - '65': 'stretch_side_lunge', - '66': 'stretch_side_split', - '67': 'stretch_standing_it_band', - '68': 'stretch_straddle', - '69': 'stretch_triceps', - '70': 'stretch_wall_chest_and_shoulder', - '71': 'neck_rotations_wheelchair', - '72': 'half_kneeling_arm_rotation', - '73': 'three_way_ankle_mobilization', - '74': 'ninety_ninety_hip_switch', # 90_90_hip_switch - '75': 'active_frog', - '76': 'shoulder_sweeps', - '77': 'ankle_lunges', - '78': 'back_roll_foam_roller', - '79': 'bear_crawl', - '80': 'latissimus_dorsi_foam_roll', - '81': 'reverse_t_hip_opener', - '82': 'shoulder_rolls', - '83': 'chest_openers', - '84': 'triceps_stretch', - '85': 'upper_back_stretch', - '86': 'hip_circles', - '87': 'ankle_stretch', - '88': 'marching_in_place', - '89': 'triceps_stretch_wheelchair', - '90': 'upper_back_stretch_wheelchair', + 0: 'quadruped_rocking', + 1: 'neck_tilts', + 2: 'ankle_circles', + 3: 'ankle_dorsiflexion_with_band', + 4: 'ankle_internal_rotation', + 5: 'arm_circles', + 6: 'bent_over_reach_to_sky', + 7: 'cat_camel', + 8: 'elbow_to_foot_lunge', + 9: 'forward_and_backward_leg_swings', + 10: 'groiners', + 11: 'inverted_hamstring_stretch', + 12: 'lateral_duck_under', + 13: 'neck_rotations', + 14: 'opposite_arm_and_leg_balance', + 15: 'reach_roll_and_lift', + 16: 'scorpion', # Deprecated do not use + 17: 'shoulder_circles', + 18: 'side_to_side_leg_swings', + 19: 'sleeper_stretch', + 20: 'slide_out', + 21: 'swiss_ball_hip_crossover', + 22: 'swiss_ball_reach_roll_and_lift', + 23: 'swiss_ball_windshield_wipers', + 24: 'thoracic_rotation', + 25: 'walking_high_kicks', + 26: 'walking_high_knees', + 27: 'walking_knee_hugs', + 28: 'walking_leg_cradles', + 29: 'walkout', + 30: 'walkout_from_push_up_position', + 31: 'biceps_stretch', + 32: 'glutes_stretch', + 33: 'standing_hamstring_stretch', + 34: 'stretch_90_90', + 35: 'stretch_abs', + 36: 'stretch_butterfly', + 37: 'stretch_calf', + 38: 'stretch_cat_cow', + 39: 'stretch_childs_pose', + 40: 'stretch_cobra', + 41: 'stretch_forearms', + 42: 'stretch_forward_glutes', + 43: 'stretch_front_split', + 44: 'stretch_hamstring', + 45: 'stretch_hip_flexor_and_quad', + 46: 'stretch_lat', + 47: 'stretch_levator_scapulae', + 48: 'stretch_lunge_with_spinal_twist', + 49: 'stretch_lunging_hip_flexor', + 50: 'stretch_lying_abduction', + 51: 'stretch_lying_it_band', + 52: 'stretch_lying_knee_to_chest', + 53: 'stretch_lying_piriformis', + 54: 'stretch_lying_spinal_twist', + 55: 'stretch_neck', + 56: 'stretch_obliques', + 57: 'stretch_over_under_shoulder', + 58: 'stretch_pectoral', + 59: 'stretch_pigeon_pose', + 60: 'stretch_piriformis', + 61: 'stretch_quad', + 62: 'stretch_scorpion', + 63: 'stretch_shoulder', + 64: 'stretch_side', + 65: 'stretch_side_lunge', + 66: 'stretch_side_split', + 67: 'stretch_standing_it_band', + 68: 'stretch_straddle', + 69: 'stretch_triceps', + 70: 'stretch_wall_chest_and_shoulder', + 71: 'neck_rotations_wheelchair', + 72: 'half_kneeling_arm_rotation', + 73: 'three_way_ankle_mobilization', + 74: 'ninety_ninety_hip_switch', # 90_90_hip_switch + 75: 'active_frog', + 76: 'shoulder_sweeps', + 77: 'ankle_lunges', + 78: 'back_roll_foam_roller', + 79: 'bear_crawl', + 80: 'latissimus_dorsi_foam_roll', + 81: 'reverse_t_hip_opener', + 82: 'shoulder_rolls', + 83: 'chest_openers', + 84: 'triceps_stretch', + 85: 'upper_back_stretch', + 86: 'hip_circles', + 87: 'ankle_stretch', + 88: 'marching_in_place', + 89: 'triceps_stretch_wheelchair', + 90: 'upper_back_stretch_wheelchair', }, 'run_exercise_name': { - '0': 'run', - '1': 'walk', - '2': 'jog', - '3': 'sprint', - '4': 'run_or_walk', - '5': 'speed_walk', - '6': 'warm_up', + 0: 'run', + 1: 'walk', + 2: 'jog', + 3: 'sprint', + 4: 'run_or_walk', + 5: 'speed_walk', + 6: 'warm_up', }, 'bike_exercise_name': { - '0': 'bike', - '1': 'ride', - '2': 'sprint', + 0: 'bike', + 1: 'ride', + 2: 'sprint', }, 'banded_exercises_exercise_name': { - '1': 'ab_twist', - '2': 'back_extension', - '3': 'bicycle_crunch', - '4': 'calf_raises', - '5': 'chest_press', - '6': 'clam_shells', - '7': 'curl', - '8': 'deadbug', - '9': 'deadlift', - '10': 'donkey_kick', - '11': 'external_rotation', - '12': 'external_rotation_at_90_degree_abduction', - '13': 'face_pull', - '14': 'fire_hydrant', - '15': 'fly', - '16': 'front_raise', - '17': 'glute_bridge', - '18': 'hamstring_curls', - '19': 'high_plank_leg_lifts', - '20': 'hip_extension', - '21': 'internal_rotation', - '22': 'jumping_jack', - '23': 'kneeling_crunch', - '24': 'lateral_band_walks', - '25': 'lateral_raise', - '26': 'latpull', - '27': 'leg_abduction', - '28': 'leg_adduction', - '29': 'leg_extension', - '30': 'lunge', - '31': 'plank', - '32': 'pull_apart', - '33': 'push_ups', - '34': 'reverse_crunch', - '35': 'row', - '36': 'shoulder_abduction', - '37': 'shoulder_extension', - '38': 'shoulder_external_rotation', - '39': 'shoulder_flexion_to_90_degrees', - '40': 'side_plank_leg_lifts', - '41': 'side_raise', - '42': 'squat', - '43': 'squat_to_press', - '44': 'tricep_extension', - '45': 'tricep_kickback', - '46': 'upright_row', - '47': 'wall_crawl_with_external_rotation', - '49': 'lateral_raise_wheelchair', - '50': 'triceps_extension_wheelchair', - '51': 'chest_fly_incline_wheelchair', - '52': 'chest_fly_decline_wheelchair', - '53': 'pull_down_wheelchair', - '54': 'straight_arm_pull_down_wheelchair', - '55': 'curl_wheelchair', - '56': 'overhead_curl_wheelchair', - '57': 'face_pull_wheelchair', - '58': 'around_the_world_wheelchair', - '59': 'pull_apart_wheelchair', - '60': 'side_curl_wheelchair', - '61': 'overhead_press_wheelchair', + 1: 'ab_twist', + 2: 'back_extension', + 3: 'bicycle_crunch', + 4: 'calf_raises', + 5: 'chest_press', + 6: 'clam_shells', + 7: 'curl', + 8: 'deadbug', + 9: 'deadlift', + 10: 'donkey_kick', + 11: 'external_rotation', + 12: 'external_rotation_at_90_degree_abduction', + 13: 'face_pull', + 14: 'fire_hydrant', + 15: 'fly', + 16: 'front_raise', + 17: 'glute_bridge', + 18: 'hamstring_curls', + 19: 'high_plank_leg_lifts', + 20: 'hip_extension', + 21: 'internal_rotation', + 22: 'jumping_jack', + 23: 'kneeling_crunch', + 24: 'lateral_band_walks', + 25: 'lateral_raise', + 26: 'latpull', + 27: 'leg_abduction', + 28: 'leg_adduction', + 29: 'leg_extension', + 30: 'lunge', + 31: 'plank', + 32: 'pull_apart', + 33: 'push_ups', + 34: 'reverse_crunch', + 35: 'row', + 36: 'shoulder_abduction', + 37: 'shoulder_extension', + 38: 'shoulder_external_rotation', + 39: 'shoulder_flexion_to_90_degrees', + 40: 'side_plank_leg_lifts', + 41: 'side_raise', + 42: 'squat', + 43: 'squat_to_press', + 44: 'tricep_extension', + 45: 'tricep_kickback', + 46: 'upright_row', + 47: 'wall_crawl_with_external_rotation', + 49: 'lateral_raise_wheelchair', + 50: 'triceps_extension_wheelchair', + 51: 'chest_fly_incline_wheelchair', + 52: 'chest_fly_decline_wheelchair', + 53: 'pull_down_wheelchair', + 54: 'straight_arm_pull_down_wheelchair', + 55: 'curl_wheelchair', + 56: 'overhead_curl_wheelchair', + 57: 'face_pull_wheelchair', + 58: 'around_the_world_wheelchair', + 59: 'pull_apart_wheelchair', + 60: 'side_curl_wheelchair', + 61: 'overhead_press_wheelchair', }, 'battle_rope_exercise_name': { - '0': 'alternating_figure_eight', - '1': 'alternating_jump_wave', - '2': 'alternating_kneeling_to_standing_wave', - '3': 'alternating_lunge_wave', - '4': 'alternating_squat_wave', - '5': 'alternating_wave', - '6': 'alternating_wave_with_lateral_shuffle', - '7': 'clap_wave', - '8': 'double_arm_figure_eight', - '9': 'double_arm_side_to_side_snake', - '10': 'double_arm_side_wave', - '11': 'double_arm_slam', - '12': 'double_arm_wave', - '13': 'grappler_toss', - '14': 'hip_toss', - '15': 'in_and_out_wave', - '16': 'inside_circle', - '17': 'jumping_jacks', - '18': 'outside_circle', - '19': 'rainbow', - '20': 'side_plank_wave', - '21': 'sidewinder', - '22': 'sitting_russian_twist', - '23': 'snake_wave', - '24': 'split_jack', - '25': 'stage_coach', - '26': 'ultimate_warrior', - '27': 'upper_cuts', + 0: 'alternating_figure_eight', + 1: 'alternating_jump_wave', + 2: 'alternating_kneeling_to_standing_wave', + 3: 'alternating_lunge_wave', + 4: 'alternating_squat_wave', + 5: 'alternating_wave', + 6: 'alternating_wave_with_lateral_shuffle', + 7: 'clap_wave', + 8: 'double_arm_figure_eight', + 9: 'double_arm_side_to_side_snake', + 10: 'double_arm_side_wave', + 11: 'double_arm_slam', + 12: 'double_arm_wave', + 13: 'grappler_toss', + 14: 'hip_toss', + 15: 'in_and_out_wave', + 16: 'inside_circle', + 17: 'jumping_jacks', + 18: 'outside_circle', + 19: 'rainbow', + 20: 'side_plank_wave', + 21: 'sidewinder', + 22: 'sitting_russian_twist', + 23: 'snake_wave', + 24: 'split_jack', + 25: 'stage_coach', + 26: 'ultimate_warrior', + 27: 'upper_cuts', }, 'elliptical_exercise_name': { - '0': 'elliptical', + 0: 'elliptical', }, 'floor_climb_exercise_name': { - '0': 'floor_climb', + 0: 'floor_climb', }, 'indoor_bike_exercise_name': { - '0': 'air_bike', - '1': 'assault_bike', - '3': 'stationary_bike', + 0: 'air_bike', + 1: 'assault_bike', + 3: 'stationary_bike', }, 'indoor_row_exercise_name': { - '0': 'rowing_machine', + 0: 'rowing_machine', }, 'ladder_exercise_name': { - '0': 'agility', - '1': 'speed', + 0: 'agility', + 1: 'speed', }, 'sandbag_exercise_name': { - '0': 'around_the_world', - '1': 'back_squat', - '2': 'bear_crawl_pull_through', - '3': 'bear_hug_squat', - '4': 'clean', - '5': 'clean_and_press', - '6': 'curl', - '7': 'front_carry', - '8': 'front_squat', - '9': 'lunge', - '10': 'overhead_press', - '11': 'plank_pull_through', - '12': 'rotational_lunge', - '13': 'row', - '14': 'russian_twist', - '15': 'shouldering', - '16': 'shoveling', - '17': 'side_lunge', - '18': 'sprint', - '19': 'zercher_squat', + 0: 'around_the_world', + 1: 'back_squat', + 2: 'bear_crawl_pull_through', + 3: 'bear_hug_squat', + 4: 'clean', + 5: 'clean_and_press', + 6: 'curl', + 7: 'front_carry', + 8: 'front_squat', + 9: 'lunge', + 10: 'overhead_press', + 11: 'plank_pull_through', + 12: 'rotational_lunge', + 13: 'row', + 14: 'russian_twist', + 15: 'shouldering', + 16: 'shoveling', + 17: 'side_lunge', + 18: 'sprint', + 19: 'zercher_squat', }, 'sled_exercise_name': { - '0': 'backward_drag', - '1': 'chest_press', - '2': 'forward_drag', - '3': 'low_push', - '4': 'push', - '5': 'row', + 0: 'backward_drag', + 1: 'chest_press', + 2: 'forward_drag', + 3: 'low_push', + 4: 'push', + 5: 'row', }, 'sledge_hammer_exercise_name': { - '0': 'lateral_swing', - '1': 'hammer_slam', + 0: 'lateral_swing', + 1: 'hammer_slam', }, 'stair_stepper_exercise_name': { - '0': 'stair_stepper', + 0: 'stair_stepper', }, 'suspension_exercise_name': { - '0': 'chest_fly', - '1': 'chest_press', - '2': 'crunch', - '3': 'curl', - '4': 'dip', - '5': 'face_pull', - '6': 'glute_bridge', - '7': 'hamstring_curl', - '8': 'hip_drop', - '9': 'inverted_row', - '10': 'knee_drive_jump', - '11': 'knee_to_chest', - '12': 'lat_pullover', - '13': 'lunge', - '14': 'mountain_climber', - '15': 'pendulum', - '16': 'pike', - '17': 'plank', - '18': 'power_pull', - '19': 'pull_up', - '20': 'push_up', - '21': 'reverse_mountain_climber', - '22': 'reverse_plank', - '23': 'rollout', - '24': 'row', - '25': 'side_lunge', - '26': 'side_plank', - '27': 'single_leg_deadlift', - '28': 'single_leg_squat', - '29': 'sit_up', - '30': 'split', - '31': 'squat', - '32': 'squat_jump', - '33': 'tricep_press', - '34': 'y_fly', + 0: 'chest_fly', + 1: 'chest_press', + 2: 'crunch', + 3: 'curl', + 4: 'dip', + 5: 'face_pull', + 6: 'glute_bridge', + 7: 'hamstring_curl', + 8: 'hip_drop', + 9: 'inverted_row', + 10: 'knee_drive_jump', + 11: 'knee_to_chest', + 12: 'lat_pullover', + 13: 'lunge', + 14: 'mountain_climber', + 15: 'pendulum', + 16: 'pike', + 17: 'plank', + 18: 'power_pull', + 19: 'pull_up', + 20: 'push_up', + 21: 'reverse_mountain_climber', + 22: 'reverse_plank', + 23: 'rollout', + 24: 'row', + 25: 'side_lunge', + 26: 'side_plank', + 27: 'single_leg_deadlift', + 28: 'single_leg_squat', + 29: 'sit_up', + 30: 'split', + 31: 'squat', + 32: 'squat_jump', + 33: 'tricep_press', + 34: 'y_fly', }, 'tire_exercise_name': { - '0': 'flip', + 0: 'flip', }, 'bike_outdoor_exercise_name': { - '0': 'bike', + 0: 'bike', }, 'run_indoor_exercise_name': { - '0': 'indoor_track_run', - '1': 'treadmill', + 0: 'indoor_track_run', + 1: 'treadmill', }, 'water_type': { - '0': 'fresh', - '1': 'salt', - '2': 'en13319', - '3': 'custom', + 0: 'fresh', + 1: 'salt', + 2: 'en13319', + 3: 'custom', }, 'tissue_model_type': { - '0': 'zhl_16c', # Buhlmann's decompression algorithm, version C + 0: 'zhl_16c', # Buhlmann's decompression algorithm, version C }, 'dive_gas_status': { - '0': 'disabled', - '1': 'enabled', - '2': 'backup_only', + 0: 'disabled', + 1: 'enabled', + 2: 'backup_only', }, 'dive_alert': { - '0': 'ndl_reached', - '1': 'gas_switch_prompted', - '2': 'near_surface', - '3': 'approaching_ndl', - '4': 'po2_warn', - '5': 'po2_crit_high', - '6': 'po2_crit_low', - '7': 'time_alert', - '8': 'depth_alert', - '9': 'deco_ceiling_broken', - '10': 'deco_complete', - '11': 'safety_stop_broken', - '12': 'safety_stop_complete', - '13': 'cns_warning', - '14': 'cns_critical', - '15': 'otu_warning', - '16': 'otu_critical', - '17': 'ascent_critical', - '18': 'alert_dismissed_by_key', - '19': 'alert_dismissed_by_timeout', - '20': 'battery_low', - '21': 'battery_critical', - '22': 'safety_stop_started', - '23': 'approaching_first_deco_stop', - '24': 'setpoint_switch_auto_low', - '25': 'setpoint_switch_auto_high', - '26': 'setpoint_switch_manual_low', - '27': 'setpoint_switch_manual_high', - '28': 'auto_setpoint_switch_ignored', - '29': 'switched_to_open_circuit', - '30': 'switched_to_closed_circuit', - '32': 'tank_battery_low', - '33': 'po2_ccr_dil_low', # ccr diluent has low po2 - '34': 'deco_stop_cleared', # a deco stop has been cleared - '35': 'apnea_neutral_buoyancy', # Target Depth Apnea Alarm triggered - '36': 'apnea_target_depth', # Neutral Buoyance Apnea Alarm triggered - '37': 'apnea_surface', # Surface Apnea Alarm triggered - '38': 'apnea_high_speed', # High Speed Apnea Alarm triggered - '39': 'apnea_low_speed', # Low Speed Apnea Alarm triggered + 0: 'ndl_reached', + 1: 'gas_switch_prompted', + 2: 'near_surface', + 3: 'approaching_ndl', + 4: 'po2_warn', + 5: 'po2_crit_high', + 6: 'po2_crit_low', + 7: 'time_alert', + 8: 'depth_alert', + 9: 'deco_ceiling_broken', + 10: 'deco_complete', + 11: 'safety_stop_broken', + 12: 'safety_stop_complete', + 13: 'cns_warning', + 14: 'cns_critical', + 15: 'otu_warning', + 16: 'otu_critical', + 17: 'ascent_critical', + 18: 'alert_dismissed_by_key', + 19: 'alert_dismissed_by_timeout', + 20: 'battery_low', + 21: 'battery_critical', + 22: 'safety_stop_started', + 23: 'approaching_first_deco_stop', + 24: 'setpoint_switch_auto_low', + 25: 'setpoint_switch_auto_high', + 26: 'setpoint_switch_manual_low', + 27: 'setpoint_switch_manual_high', + 28: 'auto_setpoint_switch_ignored', + 29: 'switched_to_open_circuit', + 30: 'switched_to_closed_circuit', + 32: 'tank_battery_low', + 33: 'po2_ccr_dil_low', # ccr diluent has low po2 + 34: 'deco_stop_cleared', # a deco stop has been cleared + 35: 'apnea_neutral_buoyancy', # Target Depth Apnea Alarm triggered + 36: 'apnea_target_depth', # Neutral Buoyance Apnea Alarm triggered + 37: 'apnea_surface', # Surface Apnea Alarm triggered + 38: 'apnea_high_speed', # High Speed Apnea Alarm triggered + 39: 'apnea_low_speed', # Low Speed Apnea Alarm triggered }, 'dive_alarm_type': { - '0': 'depth', # Alarm when a certain depth is crossed - '1': 'time', # Alarm when a certain time has transpired - '2': 'speed', # Alarm when a certain ascent or descent rate is exceeded + 0: 'depth', # Alarm when a certain depth is crossed + 1: 'time', # Alarm when a certain time has transpired + 2: 'speed', # Alarm when a certain ascent or descent rate is exceeded }, 'dive_backlight_mode': { - '0': 'at_depth', - '1': 'always_on', + 0: 'at_depth', + 1: 'always_on', }, 'sleep_level': { - '0': 'unmeasurable', - '1': 'awake', - '2': 'light', - '3': 'deep', - '4': 'rem', + 0: 'unmeasurable', + 1: 'awake', + 2: 'light', + 3: 'deep', + 4: 'rem', }, 'spo2_measurement_type': { - '0': 'off_wrist', - '1': 'spot_check', - '2': 'continuous_check', - '3': 'periodic', + 0: 'off_wrist', + 1: 'spot_check', + 2: 'continuous_check', + 3: 'periodic', }, 'ccr_setpoint_switch_mode': { - '0': 'manual', # User switches setpoints manually - '1': 'automatic', # Switch automatically based on depth + 0: 'manual', # User switches setpoints manually + 1: 'automatic', # Switch automatically based on depth }, 'dive_gas_mode': { - '0': 'open_circuit', - '1': 'closed_circuit_diluent', + 0: 'open_circuit', + 1: 'closed_circuit_diluent', }, 'projectile_type': { - '0': 'arrow', # Arrow projectile type - '1': 'rifle_cartridge', # Rifle cartridge projectile type - '2': 'pistol_cartridge', # Pistol cartridge projectile type - '3': 'shotshell', # Shotshell projectile type - '4': 'air_rifle_pellet', # Air rifle pellet projectile type - '5': 'other', # Other projectile type + 0: 'arrow', # Arrow projectile type + 1: 'rifle_cartridge', # Rifle cartridge projectile type + 2: 'pistol_cartridge', # Pistol cartridge projectile type + 3: 'shotshell', # Shotshell projectile type + 4: 'air_rifle_pellet', # Air rifle pellet projectile type + 5: 'other', # Other projectile type }, 'favero_product': { - '10': 'assioma_uno', - '12': 'assioma_duo', + 10: 'assioma_uno', + 12: 'assioma_duo', }, 'split_type': { - '1': 'ascent_split', - '2': 'descent_split', - '3': 'interval_active', - '4': 'interval_rest', - '5': 'interval_warmup', - '6': 'interval_cooldown', - '7': 'interval_recovery', - '8': 'interval_other', - '9': 'climb_active', - '10': 'climb_rest', - '11': 'surf_active', - '12': 'run_active', - '13': 'run_rest', - '14': 'workout_round', - '17': 'rwd_run', # run/walk detection running - '18': 'rwd_walk', # run/walk detection walking - '21': 'windsurf_active', - '22': 'rwd_stand', # run/walk detection standing - '23': 'transition', # Marks the time going from ascent_split to descent_split/used in backcountry ski - '28': 'ski_lift_split', - '29': 'ski_run_split', + 1: 'ascent_split', + 2: 'descent_split', + 3: 'interval_active', + 4: 'interval_rest', + 5: 'interval_warmup', + 6: 'interval_cooldown', + 7: 'interval_recovery', + 8: 'interval_other', + 9: 'climb_active', + 10: 'climb_rest', + 11: 'surf_active', + 12: 'run_active', + 13: 'run_rest', + 14: 'workout_round', + 17: 'rwd_run', # run/walk detection running + 18: 'rwd_walk', # run/walk detection walking + 21: 'windsurf_active', + 22: 'rwd_stand', # run/walk detection standing + 23: 'transition', # Marks the time going from ascent_split to descent_split/used in backcountry ski + 28: 'ski_lift_split', + 29: 'ski_run_split', }, 'climb_pro_event': { - '0': 'approach', - '1': 'start', - '2': 'complete', + 0: 'approach', + 1: 'start', + 2: 'complete', }, 'gas_consumption_rate_type': { - '0': 'pressure_sac', # Pressure-based Surface Air Consumption - '1': 'volume_sac', # Volumetric Surface Air Consumption - '2': 'rmv', # Respiratory Minute Volume + 0: 'pressure_sac', # Pressure-based Surface Air Consumption + 1: 'volume_sac', # Volumetric Surface Air Consumption + 2: 'rmv', # Respiratory Minute Volume }, 'tap_sensitivity': { - '0': 'high', - '1': 'medium', - '2': 'low', + 0: 'high', + 1: 'medium', + 2: 'low', }, 'radar_threat_level_type': { - '0': 'threat_unknown', - '1': 'threat_none', - '2': 'threat_approaching', - '3': 'threat_approaching_fast', + 0: 'threat_unknown', + 1: 'threat_none', + 2: 'threat_approaching', + 3: 'threat_approaching_fast', }, 'sleep_disruption_severity': { - '0': 'none', - '1': 'low', - '2': 'medium', - '3': 'high', + 0: 'none', + 1: 'low', + 2: 'medium', + 3: 'high', }, 'nap_period_feedback': { - '0': 'none', - '1': 'multiple_naps_during_day', - '2': 'jetlag_ideal_timing_ideal_duration', - '3': 'jetlag_ideal_timing_long_duration', - '4': 'jetlag_late_timing_ideal_duration', - '5': 'jetlag_late_timing_long_duration', - '6': 'ideal_timing_ideal_duration_low_need', - '7': 'ideal_timing_ideal_duration_high_need', - '8': 'ideal_timing_long_duration_low_need', - '9': 'ideal_timing_long_duration_high_need', - '10': 'late_timing_ideal_duration_low_need', - '11': 'late_timing_ideal_duration_high_need', - '12': 'late_timing_long_duration_low_need', - '13': 'late_timing_long_duration_high_need', - '14': 'ideal_duration_low_need', - '15': 'ideal_duration_high_need', - '16': 'long_duration_low_need', - '17': 'long_duration_high_need', + 0: 'none', + 1: 'multiple_naps_during_day', + 2: 'jetlag_ideal_timing_ideal_duration', + 3: 'jetlag_ideal_timing_long_duration', + 4: 'jetlag_late_timing_ideal_duration', + 5: 'jetlag_late_timing_long_duration', + 6: 'ideal_timing_ideal_duration_low_need', + 7: 'ideal_timing_ideal_duration_high_need', + 8: 'ideal_timing_long_duration_low_need', + 9: 'ideal_timing_long_duration_high_need', + 10: 'late_timing_ideal_duration_low_need', + 11: 'late_timing_ideal_duration_high_need', + 12: 'late_timing_long_duration_low_need', + 13: 'late_timing_long_duration_high_need', + 14: 'ideal_duration_low_need', + 15: 'ideal_duration_high_need', + 16: 'long_duration_low_need', + 17: 'long_duration_high_need', }, 'nap_source': { - '0': 'automatic', - '1': 'manual_device', - '2': 'manual_gc', + 0: 'automatic', + 1: 'manual_device', + 2: 'manual_gc', }, 'max_met_speed_source': { - '0': 'onboard_gps', - '1': 'connected_gps', - '2': 'cadence', + 0: 'onboard_gps', + 1: 'connected_gps', + 2: 'cadence', }, 'max_met_heart_rate_source': { - '0': 'whr', # Wrist Heart Rate Monitor - '1': 'hrm', # Chest Strap Heart Rate Monitor + 0: 'whr', # Wrist Heart Rate Monitor + 1: 'hrm', # Chest Strap Heart Rate Monitor }, 'hrv_status': { - '0': 'none', - '1': 'poor', - '2': 'low', - '3': 'unbalanced', - '4': 'balanced', + 0: 'none', + 1: 'poor', + 2: 'low', + 3: 'unbalanced', + 4: 'balanced', }, 'no_fly_time_mode': { - '0': 'standard', # Standard Diver Alert Network no-fly guidance - '1': 'flat_24_hours', # Flat 24 hour no-fly guidance + 0: 'standard', # Standard Diver Alert Network no-fly guidance + 1: 'flat_24_hours', # Flat 24 hour no-fly guidance }, }, 'mesg_num' : { diff --git a/garmin_fit_sdk/stream.py b/garmin_fit_sdk/stream.py index 23a8466..4e6082d 100644 --- a/garmin_fit_sdk/stream.py +++ b/garmin_fit_sdk/stream.py @@ -11,8 +11,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/garmin_fit_sdk/util.py b/garmin_fit_sdk/util.py index 738225d..2f88338 100644 --- a/garmin_fit_sdk/util.py +++ b/garmin_fit_sdk/util.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.205.0Release -# Tag = production/release/21.205.0-0-gb3c261eb +# Profile Version = 21.208.0Release +# Tag = production/release/21.208.0-0-g5209d509 ############################################################################################ diff --git a/pyproject.toml b/pyproject.toml index 8e97ad7..8e7559e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools >= 64"] build-backend = "setuptools.build_meta" [project] -version = "21.205.0" +version = "21.208.0" name = "garmin-fit-sdk" description = "Garmin FIT Python SDK" authors = [{ name = "Garmin International, Inc." }] diff --git a/tests/__init__.py b/tests/__init__.py index ad51d2e..6698401 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,4 +8,4 @@ # __init__.py for the fit sdk tests module -__version__ = '21.205.0' \ No newline at end of file +__version__ = '21.208.0' \ No newline at end of file diff --git a/tests/data.py b/tests/data.py index a98b01c..16c27dd 100644 --- a/tests/data.py +++ b/tests/data.py @@ -72,7 +72,13 @@ class Data: 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x02, 0x84, 0x04, 0x01, 0x86, 0x08, 0x0A, 0x07, # Message Definition 0x00, 0x04, 0x01, 0x00, 0x12, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x00, # Message 0x65, 0xFE # CRC - ]) + ]) + + fit_file_short_nonenum_type = bytearray([ + 0x0E, 0x02, 0xD6, 0x52, 0x0B, 0x00, 0x00, 0x00, 0x2E, 0x46, 0x49, 0x54, + 0x7C, 0x9B, 0x40, 0x00, 0x00, 0x14, 0x00, 0x01, 0x1E, 0x01, 0x02, 0x00, + 0x80, 0x5D, 0x71 + ]) fit_file_arrays = bytearray([ 0x0E, 0x20, 0x9F, 0x03, 0x32, 0x00, 0x00, 0x00, 0x2E, 0x46, 0x49, 0x54, diff --git a/tests/test_decoder.py b/tests/test_decoder.py index 7a30e92..ccf51f0 100644 --- a/tests/test_decoder.py +++ b/tests/test_decoder.py @@ -17,6 +17,7 @@ from garmin_fit_sdk.decoder import DecodeMode from tests.data import Data +from tests.test_encoder import _encode_then_decode class TestCheckIntegrity: @@ -346,6 +347,24 @@ def test_convert_types_to_strings(self, option_status, expected_type_value): assert len(errors) == 0 assert messages['file_id_mesgs'][0]['type'] == expected_type_value + @pytest.mark.parametrize( + "option_status,expected_value", + [ + (True, 'right'), + (False, 0x80), + (None, 'right') + ], ids=["Set to True", "Set to False", "Default Should Convert"] + ) + def test_convert_non_enum_types_to_strings(self, option_status, expected_value): + '''Tests the validity of converting device_index enum to string when decoding files.''' + stream = Stream.from_byte_array(Data.fit_file_short_nonenum_type) + decoder = Decoder(stream) + if option_status is not None: + messages, errors = decoder.read(convert_types_to_strings=option_status) + else: + messages, errors = decoder.read() + assert len(errors) == 0 + assert messages['record_mesgs'][0]['left_right_balance'] == expected_value @pytest.mark.parametrize( "field_key,expected_value", @@ -853,3 +872,42 @@ def test_component_expansion(self, mesg_num, field_defs, record_data, mesg_key, assert msg[key] == pytest.approx(val) else: assert msg[key] == val + + +# MARK: Invalid Value Tests + +class TestInvalidValues: + '''Set of tests which verifies the decoder correctly drops invalid field values from messages.''' + @pytest.mark.parametrize( + "label, recordMesg", + [ + pytest.param("Enum", {'activity_type': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['ENUM']]['invalid']}, id="Enum"), + pytest.param("SInt8", {'left_pco': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['SINT8']]['invalid']}, id="SInt8"), + pytest.param("UInt8", {'cadence': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['UINT8']]['invalid']}, id="UInt8"), + pytest.param("SInt16", {'grade': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['SINT16']]['invalid'] / 100}, id="SInt16"), + pytest.param("UInt16", {'power': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['UINT16']]['invalid']}, id="UInt16"), + pytest.param("SInt32", {'position_lat': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['SINT32']]['invalid']}, id="SInt32"), + pytest.param("UInt32", {'timestamp': FIT.BASE_TYPE_DEFINITIONS[FIT.BASE_TYPE['UINT32']]['invalid']}, id="UInt32"), + ], + ) + def test_fields_that_have_invalid_values_are_dropped(self, label, recordMesg): + messages, errors = _encode_then_decode([{ + 'mesg_num': Profile['mesg_num']['RECORD'], + 'mesg': {**recordMesg, 'heart_rate': 60}, + }]) + + assert len(errors) == 0 + + # The invalid fields should not be present + assert messages['record_mesgs'] == [{ 'heart_rate': 60}] + + def test_fields_with_components_that_have_invalid_values_are_dropped(self): + messages, errors = _encode_then_decode([{ + 'mesg_num': Profile['mesg_num']['RECORD'], + 'mesg': {'speed': 65.535, 'heart_rate': 60}, + }]) + + assert len(errors) == 0 + + # The invalid speed field and its component should not be present + assert messages['record_mesgs'] == [{'heart_rate': 60}] diff --git a/tests/test_encoder.py b/tests/test_encoder.py index f5e1cff..d23c47f 100644 --- a/tests/test_encoder.py +++ b/tests/test_encoder.py @@ -425,7 +425,7 @@ def _encode_then_decode(mesgs, field_descriptions=None, decoder_opts=None): data = _encode_mesgs(mesgs, field_descriptions) stream = Stream.from_byte_array(bytearray(data)) decoder = Decoder(stream) - opts = {'convert_types_to_strings': False, 'convert_datetimes_to_dates': False} + opts = {} if decoder_opts: opts.update(decoder_opts) return decoder.read(**opts) @@ -497,6 +497,55 @@ def test_unexpected_type_raises(self, base_type, value, custom_mesg): _encode_mesgs([{'mesg_num': DEFAULT_CUSTOM_MESG_NUM, 'mesg': {'val': value}}]) +# MARK: Null and FIT Invalid Value Encoding + +_FIELD_DATA_OFFSET = 24 + + +@pytest.mark.parametrize('base_type', [ + 'uint8', 'sint8', 'uint16', 'sint16', 'uint32', 'sint32', + 'float32', 'float64', 'uint8z', 'uint16z', 'uint32z', + 'byte', 'sint64', 'uint64', 'uint64z', +]) +class TestEncoderNullValueEncoding: + '''Encoding None for any base type should raise.''' + + def test_encoding_none_raises(self, base_type, custom_mesg): + custom_mesg(DEFAULT_CUSTOM_MESG_NUM, 'null_mesg', { + 0: {'name': 'null_field', 'type': base_type, 'base_type': base_type}, + }) + with pytest.raises((ValueError, Exception)): + _encode_mesgs([{'mesg_num': DEFAULT_CUSTOM_MESG_NUM, 'mesg': {'null_field': None}}]) + + +@pytest.mark.parametrize('base_type,value,invalid_bytes', [ + ('uint8', 0xFF, [0xFF]), + ('sint8', 0x7F, [0x7F]), + ('uint16', 0xFFFF, [0xFF, 0xFF]), + ('sint16', 0x7FFF, [0xFF, 0x7F]), + ('uint32', 0xFFFFFFFF, [0xFF, 0xFF, 0xFF, 0xFF]), + ('sint32', 0x7FFFFFFF, [0xFF, 0xFF, 0xFF, 0x7F]), + ('uint8z', 0x00, [0x00]), + ('uint16z', 0x0000, [0x00, 0x00]), + ('uint32z', 0x00000000, [0x00, 0x00, 0x00, 0x00]), + ('byte', 0xFF, [0xFF]), + ('sint64', 0x7FFFFFFFFFFFFFFF, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), + ('uint64', 0xFFFFFFFFFFFFFFFF, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]), + ('uint64z', 0x0000000000000000, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), +]) +class TestEncoderFitInvalidValueEncoding: + '''Encoding the FIT invalid value for a base type should write the expected bytes.''' + + def test_fit_invalid_value_writes_expected_bytes(self, base_type, value, invalid_bytes, custom_mesg): + custom_mesg(DEFAULT_CUSTOM_MESG_NUM, 'inv_mesg', { + 0: {'name': 'inv_field', 'type': base_type, 'base_type': base_type}, + }) + + data = _encode_mesgs([{'mesg_num': DEFAULT_CUSTOM_MESG_NUM, 'mesg': {'inv_field': value}}]) + field_bytes = list(data[_FIELD_DATA_OFFSET:_FIELD_DATA_OFFSET + len(invalid_bytes)]) + + assert field_bytes == invalid_bytes + # MARK: Encoder Decoder Integration @@ -512,14 +561,14 @@ def test_encode_decode_file_id(self): assert 'file_id_mesgs' in messages assert len(messages['file_id_mesgs']) == 1 file_id = messages['file_id_mesgs'][0] - assert file_id['type'] == 4 - assert file_id['manufacturer'] == 1 + assert file_id['type'] == "activity" + assert file_id['manufacturer'] == "garmin" assert file_id['serial_number'] == 12345 def test_encode_decode_multiple_messages(self): '''Encode multiple messages and decode them back.''' messages, errors = _encode_then_decode([ - {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': 4, 'manufacturer': 1}}, + {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': "activity", 'manufacturer': "garmin"}}, {'mesg_num': Profile['mesg_num']['FILE_CREATOR'], 'mesg': {'software_version': 100, 'hardware_version': 5}}, ]) assert len(errors) == 0 @@ -533,7 +582,7 @@ def test_encode_decode_string_field(self): '''Encode a message with a string field and decode it back.''' messages, errors = _encode_then_decode([{ 'mesg_num': Profile['mesg_num']['FILE_ID'], - 'mesg': {'type': 4, 'manufacturer': 1, 'product_name': 'TestDevice'}, + 'mesg': {'type': 'activity', 'manufacturer': 'garmin', 'product_name': 'TestDevice'}, }]) assert len(errors) == 0 file_id = messages['file_id_mesgs'][0] @@ -542,7 +591,7 @@ def test_encode_decode_string_field(self): def test_encode_decode_with_type_strings(self): '''Encode using numeric values, decode with type string conversion.''' messages, errors = _encode_then_decode( - [{'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': 4, 'manufacturer': 1}}], + [{'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': "activity", 'manufacturer': "garmin"}}], decoder_opts={'convert_types_to_strings': True}, ) assert len(errors) == 0 @@ -553,13 +602,13 @@ def test_encode_decode_with_type_strings(self): def test_encode_decode_same_mesg_type_multiple_times(self): '''Encode the same message type multiple times (definition reuse).''' messages, errors = _encode_then_decode([ - {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': 4, 'manufacturer': 1}}, - {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': 4, 'manufacturer': 2}}, + {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': "activity", 'manufacturer': 1}}, + {'mesg_num': Profile['mesg_num']['FILE_ID'], 'mesg': {'type': "activity", 'manufacturer': 15}}, ]) assert len(errors) == 0 assert len(messages['file_id_mesgs']) == 2 - assert messages['file_id_mesgs'][0]['manufacturer'] == 1 - assert messages['file_id_mesgs'][1]['manufacturer'] == 2 + assert messages['file_id_mesgs'][0]['manufacturer'] == "garmin" + assert messages['file_id_mesgs'][1]['manufacturer'] == "dynastream" def test_encode_decode_integrity_check(self): '''Encoded file should pass integrity check.''' @@ -580,8 +629,8 @@ def test_encode_decode_with_expanded_component_fields(self): } messages, errors = _encode_then_decode( [{'mesg_num': Profile['mesg_num']['HR'], 'mesg': hr_mesg}], - decoder_opts={'merge_heart_rates': False}) - + decoder_opts={'merge_heart_rates': False, 'convert_datetimes_to_dates': False}) + expected_expanded_event_timestamps = [ 2.826171875, 3.5986328125, @@ -592,7 +641,7 @@ def test_encode_decode_with_expanded_component_fields(self): 7.2392578125, 7.9697265625, ] - + assert errors == [] assert len(messages['hr_mesgs']) == 1 decoded = messages['hr_mesgs'][0] @@ -661,6 +710,25 @@ def test_encode_decode_dev_field_multibyte_base_type(self): assert decoded['product'] == file_id_mesg['product'] assert decoded['developer_fields'][0] == file_id_mesg['developer_fields'][0] + @pytest.mark.parametrize( + "mesg,field,value,expected_value", + [ + ('weight_scale', 'weight', 12.34, 12.34), + ('device_info', 'device_index', 0, 'creator'), + ('session', 'message_index', 'mask', 'mask'), + ], + ) + def test_encode_decode_non_enum_types(self, mesg, field, value, expected_value): + ''' Test that non-enum fields round-trip correctly through the encoder and decoder.''' + messages, errors = _encode_then_decode([{ + 'mesg_num': Profile['mesg_num'][mesg.upper()], + 'mesg': {field: value, }, + }]) + + assert len(errors) == 0 + + assert messages[f'{mesg}_mesgs'] == [{ field: expected_value, }] + # MARK: Encoder Decoder All Types