package mysubaru var MOBILE_API_VERSION = "/g2v31" var MOBILE_API_SERVER = map[string]string{ "USA": "https://mobileapi.prod.subarucs.com", "CAN": "https://mobileapi.ca.prod.subarucs.com", "TEST": "http://127.0.0.1:56765", } var MOBILE_APP = map[string]string{ "USA": "com.subaru.telematics.app.remote", "CAN": "ca.subaru.telematics.remote", } var WEB_API_SERVER = map[string]string{ "USA": "https://www.mysubaru.com", "CAN": "https://www.mysubaru.ca", } var apiURLs = map[string]string{ "WEB_API_LOGIN": "/login", "WEB_API_LIST_DEVICES": "/listMyDevices.json", // TODO "WEB_API_AUTHORIZE_DEVICE": "/profile/updateDeviceEntry.json", "WEB_API_NAME_DEVICE": "/profile/addDeviceName.json", "WEB_API_EDIT_NAME_DEVICE": "/profile/editDeviceName.json", "WEB_API_VERIFY_NAME_DEVICE": "/profile/verifyDeviceName.json", "API_2FA_CONTACT": "/twoStepAuthContacts.json", "API_2FA_SEND_VERIFICATION": "/twoStepAuthSendVerification.json", "API_2FA_AUTH_VERIFY": "/twoStepAuthVerify.json", "API_LOGIN": "/login.json", // Same API for g1 and g2 "API_REFRESH_VEHICLES": "/refreshVehicles.json", "API_SELECT_VEHICLE": "/selectVehicle.json", // Covered by test "API_VALIDATE_SESSION": "/validateSession.json", // Covered by test "API_VEHICLE_STATUS": "/vehicleStatus.json", // Covered by test "API_AUTHORIZE_DEVICE": "/authenticateDevice.json", "API_NAME_DEVICE": "/nameThisDevice.json", "API_VEHICLE_HEALTH": "/vehicleHealth.json", // Covered by test "API_CONDITION": "/service/api_gen/condition/execute.json", // Similar API for g1 and g2 -- controller should replace 'api_gen' with either 'g1' or 'g2' "API_LOCATE": "/service/api_gen/locate/execute.json", // Get the last location the vehicle has reported to Subaru "API_LOCK": "/service/api_gen/lock/execute.json", "API_LOCK_CANCEL": "/service/api_gen/lock/cancel.json", "API_UNLOCK": "/service/api_gen/unlock/execute.json", "API_UNLOCK_CANCEL": "/service/api_gen/unlock/cancel.json", "API_HORN_LIGHTS": "/service/api_gen/hornLights/execute.json", "API_HORN_LIGHTS_CANCEL": "/service/api_gen/hornLights/cancel.json", "API_HORN_LIGHTS_STOP": "/service/api_gen/hornLights/stop.json", "API_LIGHTS": "/service/api_gen/lightsOnly/execute.json", "API_LIGHTS_CANCEL": "/service/api_gen/lightsOnly/cancel.json", "API_LIGHTS_STOP": "/service/api_gen/lightsOnly/stop.json", "API_G1_LOCATE_UPDATE": "/service/g1/vehicleLocate/execute.json", // Different API for g1 and g2 "API_G1_LOCATE_STATUS": "/service/g1/vehicleLocate/status.json", "API_G1_HORN_LIGHTS_STATUS": "/service/g1/hornLights/status.json", // g1-Only API "API_G2_LOCATE_UPDATE": "/service/g2/vehicleStatus/execute.json", "API_G2_LOCATE_STATUS": "/service/g2/vehicleStatus/locationStatus.json", "API_REMOTE_SVC_STATUS": "/service/g2/remoteService/status.json", "API_G2_SEND_POI": "/service/g2/sendPoi/execute.json", // g2-Only API "API_G2_SPEEDFENCE": "/service/g2/speedFence/execute.json", "API_G2_GEOFENCE": "/service/g2/geoFence/execute.json", "API_G2_CURFEW": "/service/g2/curfew/execute.json", "API_G2_REMOTE_ENGINE_START": "/service/g2/engineStart/execute.json", "API_G2_REMOTE_ENGINE_START_CANCEL": "/service/g2/engineStart/cancel.json", "API_G2_REMOTE_ENGINE_STOP": "/service/g2/engineStop/execute.json", "API_G2_FETCH_RES_QUICK_START_SETTINGS": "/service/g2/remoteEngineQuickStartSettings/fetch.json", "API_G2_FETCH_RES_USER_PRESETS": "/service/g2/remoteEngineStartSettings/fetch.json", "API_G2_FETCH_RES_SUBARU_PRESETS": "/service/g2/climatePresetSettings/fetch.json", "API_G2_SAVE_RES_SETTINGS": "/service/g2/remoteEngineStartSettings/save.json", "API_G2_SAVE_RES_QUICK_START_SETTINGS": "/service/g2/remoteEngineQuickStartSettings/save.json", "API_EV_CHARGE_NOW": "/service/g2/phevChargeNow/execute.json", // EV-Only API "API_EV_FETCH_CHARGE_SETTINGS": "/service/g2/phevGetTimerSettings/execute.json", "API_EV_SAVE_CHARGE_SETTINGS": "/service/g2/phevSendTimerSetting/execute.json", "API_EV_DELETE_CHARGE_SCHEDULE": "/service/g2/phevDeleteTimerSetting/execute.json", // "API_G2_FETCH_CLIMATE_SETTINGS": "/service/g2/remoteEngineStart/fetch.json", // "API_G2_SAVE_CLIMATE_SETTINGS": "/service/g2/remoteEngineStart/save.json", } // TODO: Get back and add wrapper to support Feature List // API_VEHICLE_FEATURES items that determine available functionality // 11.6MMAN ABS_MIL ACCS AHBL_MIL ATF_MIL AWD_MIL BSD BSDRCT_MIL CEL_MIL EBD_MIL EOL_MIL EPAS_MIL EPB_MIL ESS_MIL EYESIGHT ISS_MIL NAV_TOMTOM OPL_MIL RAB_MIL RCC REARBRK RES RESCC RHSF RPOI RPOIA SRS_MIL TEL_MIL TIF_35 TIR_33 TPMS_MIL VDC_MIL WASH_MIL g2 // ABS_MIL ACCS AHBL_MIL ATF_MIL AWD_MIL BSD BSDRCT_MIL CEL_MIL EBD_MIL EOL_MIL EPAS_MIL EPB_MIL ESS_MIL EYESIGHT ISS_MIL OPL_MIL PANPM-TUIRWAOC PWAAADWWAP RAB_MIL RCC REARBRK RES RESCC RHSF RPOI RPOIA RTGU RVFS SRH_MIL SRS_MIL TEL_MIL TIF_35 TIR_33 TLD TPMS_MIL VALET VDC_MIL WASH_MIL g3 // var apiFeatures = map[string]string{ // "API_FEATURE_PHEV": "PHEV", // "API_FEATURE_REMOTE_START": "RES", // "API_FEATURE_REMOTE": "REMOTE", // "API_FEATURE_SAFETY": "SAFETY", // "API_FEATURE_ACTIVE": "ACTIVE", // "API_FEATURE_MOONROOF_PANORAMIC": "PANPM-DG2G", // "API_FEATURE_MOONROOF_POWER": "PANPM-TUIRWAOC", // "API_FEATURE_POWER_WINDOWS": "PWAAADWWAP", // "API_FEATURE_FRONT_TIRE_RECOMMENDED_PRESSURE_PREFIX": "TIF_", // "API_FEATURE_REAR_TIRE_RECOMMENDED_PRESSURE_PREFIX": "TIR_", // "API_FEATURE_G1_TELEMATICS": "g1", // "API_FEATURE_G2_TELEMATICS": "g2", // "API_FEATURE_G3_TELEMATICS": "g3", // } var API_ERRORS = map[string]string{ "API_ERROR_SOA_403": "403-soa-unableToParseResponseBody", // G2 "API_ERROR_NO_ACCOUNT": "accountNotFound", // G2 "API_ERROR_INVALID_ACCOUNT": "invalidAccount", // G2 "API_ERROR_INVALID_CREDENTIALS": "InvalidCredentials", // G2 "API_ERROR_INVALID_TOKEN": "InvalidToken", // G2 "API_ERROR_PASSWORD_WARNING": "passwordWarning", // G2 "API_ERROR_TOO_MANY_ATTEMPTS": "tooManyAttempts", // G2 "API_ERROR_ACCOUNT_LOCKED": "accountLocked", // G2 "API_ERROR_NO_VEHICLES": "noVehiclesOnAccount", // G2 "API_ERROR_VEHICLE_SETUP": "VEHICLESETUPERROR", // G2 "API_ERROR_VEHICLE_NOT_IN_ACCOUNT": "vehicleNotInAccount", // G2 "API_ERROR_SERVICE_ALREADY_STARTED": "ServiceAlreadyStarted", // G2 "API_ERROR_G1_NO_SUBSCRIPTION": "SXM40004", // G1 "API_ERROR_G1_STOLEN_VEHICLE": "SXM40005", // G1 "API_ERROR_G1_INVALID_PIN": "SXM40006", // G1 "API_ERROR_G1_SERVICE_ALREADY_STARTED": "SXM40009", // G1 "API_ERROR_G1_PIN_LOCKED": "SXM40017", // G1 } var APP_ERRORS = map[string]string{ "SUBSCRIBTION_REQUIRED": "active STARLINK Security Plus subscription required", } // TODO: Get back and add error wrapper // var apiErrors = map[string]string{ // "ERROR_SOA_403": "403-soa-unableToParseResponseBody", // G2 Error Codes // "ERROR_INVALID_CREDENTIALS": "InvalidCredentials", // "ERROR_SERVICE_ALREADY_STARTED": "ServiceAlreadyStarted", // "ERROR_INVALID_ACCOUNT": "invalidAccount", // "ERROR_PASSWORD_WARNING": "passwordWarning", // "ERROR_ACCOUNT_LOCKED": "accountLocked", // "ERROR_NO_VEHICLES": "noVehiclesOnAccount", // "ERROR_NO_ACCOUNT": "accountNotFound", // "ERROR_TOO_MANY_ATTEMPTS": "tooManyAttempts", // "ERROR_VEHICLE_NOT_IN_ACCOUNT": "vehicleNotInAccount", // "ERROR_G1_NO_SUBSCRIPTION": "SXM40004", // G1 Error Codes // "ERROR_G1_STOLEN_VEHICLE": "SXM40005", // "ERROR_G1_INVALID_PIN": "SXM40006", // "ERROR_G1_SERVICE_ALREADY_STARTED": "SXM40009", // "ERROR_G1_PIN_LOCKED": "SXM40017", // } // ABS_MIL ACCS AHBL_MIL ATF_MIL AWD_MIL BSD BSDRCT_MIL CEL_MIL EBD_MIL EOL_MIL EPAS_MIL EPB_MIL ESS_MIL EYESIGHT ISS_MIL OPL_MIL PANPM-TUIRWAOC PWAAADWWAP RAB_MIL RCC REARBRK RES RESCC RHSF RPOI RPOIA RTGU RVFS SRH_MIL SRS_MIL TEL_MIL TIF_35 TIR_33 TLD TPMS_MIL VALET VDC_MIL WASH_MIL g3 // 11.6MMAN ABS_MIL ACCS AHBL_MIL ATF_MIL AWD_MIL BSD BSDRCT_MIL CEL_MIL EBD_MIL EOL_MIL EPAS_MIL EPB_MIL ESS_MIL EYESIGHT ISS_MIL NAV_TOMTOM OPL_MIL RAB_MIL RCC REARBRK RES RESCC RHSF RPOI RPOIA SRS_MIL TEL_MIL TIF_35 TIR_33 TPMS_MIL VDC_MIL WASH_MIL g2 var features = map[string]string{ "g1": "Generation #1", "g2": "Generation #2", "g3": "Generation #3", "BSD": "Blind-Spot Detection", "RHSF": "Rear High-Speed Function / Reverse Automatic Braking / Rear Cross-Traffic Alert", "11.6MMAN": "11.6-inch Infotainment System", "EYESIGHT": "EyeSight Exclusive Advanced Driver-Assist System", "NAV_TOMTOM": "TomTom Navigation", "PWAAADWWAP": "Power Windows", "PANPM-TUIRWAOC": "Power Moonroof", "PANPM-DG2G": "Panoramic Moonroof", "PHEV": "Electric Vehicle", "RES": "Remote Start", "REARBRK": "Reverse Auto Braking", "TIF_35": "Tire Pressure Front 35", "TIR_33": "Tire Pressure Rear 35", "VALET": "Valet Parking", "RES_HVAC_HFS": "Heated Front Seats", "RES_HVAC_VFS": "Vented Front Seats", "RESCC": "Remote Engine Start with Climate Control", "RCC": "Remote Climate Control", "ACCS": "Adaptive Cruise Control", "SXM360L": "SiriusXM with 360L", } var troubles = map[string]string{ "SRS_MIL": "Airbag System", "AWD_MIL": "All-Wheel Drive / Symmetrical Full-Time ", "ABS_MIL": "Anti-Lock Braking System", "ISS_MIL": "Auto Start Stop (Idling Stop System)", "AHBL_MIL": "Automatic Headlight Beam Leveler", "ATF_MIL": "Automatic Transmission Oil Temperature", "EBD_MIL": "Brake System / Electronic Brake Force Distribution", "BSDRCT_MIL": "Blind-Spot Detection", "CEL_MIL": "Check Engine Light", "EOL_MIL": "Engine Oil Level", "ESS_MIL": "EyeSight Exclusive Advanced Driver-Assist System", "TEL_MIL": "MySubau Emergency Services", "EPB_MIL": "Parking Brake", "OPL_MIL": "Oil Pressure", "EPAS_MIL": "Power Steering / Electric Power Assisted Steering", "RAB_MIL": "Reverse Auto Braking", "SRH_MIL": "Steering Responsive Headlights (SRH)", "TPMS_MIL": "Tire Pressure", "VDC_MIL": "Vehicle Dynamics Control", "WASH_MIL": "Windshield Washer Fluid Level", } var badValues = []any{ "NOT_EQUIPPED", "UNKNOWN", "None", "16383", "65535", "-64", "", 0, float64(0), nil} // var modelCodes = map[string]string{ // "PDL": "Subaru Outback Touring XT", // "LDJ": "Subaru Outback Limited XT", // "KDF": "Outback 2.5i Limited", // "LDD": "Outback Premium", // "PDG": "Outback Touring", // "KFB": "Forester Base Model", // "HFJ": "Forester 2.5i Touring", // "KFJ": "Forester Touring", // "KAF": "Legacy 2.5i Limited", // "KLF": "Impreza 2.0i Sport", // "LRD": "Crosstrek Premium", // "KRD": "Crosstrek 2.0i Premium", // "PCL": "Ascent Limited 7-Passenger", // } // var badValues = map[string]any{ // "remainingFuelPercent": 101, // "tyreStatusFrontLeft": "UNKNOWN", // "tyreStatusFrontRight": "UNKNOWN", // "tyreStatusRearLeft": "UNKNOWN", // "tyreStatusRearRight": "UNKNOWN", // } const ( GET = "GET" POST = "POST" SERVICE_REQ_ID = "serviceRequestId" TEMP_F = "climateZoneFrontTemp" // Remote start constants TEMP_F_MAX = 85 TEMP_F_MIN = 60 TEMP_C = "climateZoneFrontTempCelsius" TEMP_C_MAX = 30 TEMP_C_MIN = 15 CLIMATE = "climateSettings" CLIMATE_DEFAULT = "climateSettings" RUNTIME = "runTimeMinutes" RUNTIME_DEFAULT = "10" MODE = "climateZoneFrontAirMode" MODE_DEFROST = "WINDOW" MODE_FEET_DEFROST = "FEET_WINDOW" MODE_FACE = "FACE" MODE_FEET = "FEET" MODE_SPLIT = "FEET_FACE_BALANCED" MODE_AUTO = "AUTO" HEAT_SEAT_LEFT = "heatedSeatFrontLeft" HEAT_SEAT_RIGHT = "heatedSeatFrontRight" HEAT_SEAT_HI = "HIGH_HEAT" HEAT_SEAT_MED = "MEDIUM_HEAT" HEAT_SEAT_LOW = "LOW_HEAT" HEAT_SEAT_OFF = "OFF" REAR_DEFROST = "heatedRearWindowActive" REAR_DEFROST_ON = "true" REAR_DEFROST_OFF = "false" FAN_SPEED = "climateZoneFrontAirVolume" FAN_SPEED_LOW = "2" FAN_SPEED_MED = "4" FAN_SPEED_HI = "7" FAN_SPEED_AUTO = "AUTO" RECIRCULATE = "outerAirCirculation" RECIRCULATE_OFF = "outsideAir" RECIRCULATE_ON = "recirculation" REAR_AC = "airConditionOn" REAR_AC_ON = "true" REAR_AC_OFF = "false" START_CONFIG = "startConfiguration" START_CONFIG_DEFAULT_EV = "start_Climate_Control_only_allow_key_in_ignition" START_CONFIG_DEFAULT_RES = "START_ENGINE_ALLOW_KEY_IN_IGNITION" WHICH_DOOR = "unlockDoorType" // Unlock doors constants ALL_DOORS = "ALL_DOORS_CMD" DRIVERS_DOOR = "FRONT_LEFT_DOOR_CMD" HEADING = "heading" // Location data constants LATITUDE = "latitude" LONGITUDE = "longitude" LOCATION_TIME = "locationTimestamp" SPEED = "speed" BAD_LATITUDE = 90.0 BAD_LONGITUDE = 180.0 AVG_FUEL_CONSUMPTION = "AVG_FUEL_CONSUMPTION" // Vehicle status constants BATTERY_VOLTAGE = "BATTERY_VOLTAGE" // NO LONGER DIST_TO_EMPTY = "DISTANCE_TO_EMPTY_FUEL" DOOR_BOOT_POSITION = "DOOR_BOOT_POSITION" DOOR_ENGINE_HOOD_POSITION = "DOOR_ENGINE_HOOD_POSITION" DOOR_FRONT_LEFT_POSITION = "DOOR_FRONT_LEFT_POSITION" DOOR_FRONT_RIGHT_POSITION = "DOOR_FRONT_RIGHT_POSITION" DOOR_REAR_LEFT_POSITION = "DOOR_REAR_LEFT_POSITION" DOOR_REAR_RIGHT_POSITION = "DOOR_REAR_RIGHT_POSITION" EV_CHARGER_STATE_TYPE = "EV_CHARGER_STATE_TYPE" EV_CHARGE_SETTING_AMPERE_TYPE = "EV_CHARGE_SETTING_AMPERE_TYPE" EV_CHARGE_VOLT_TYPE = "EV_CHARGE_VOLT_TYPE" EV_DISTANCE_TO_EMPTY = "EV_DISTANCE_TO_EMPTY" EV_IS_PLUGGED_IN = "EV_IS_PLUGGED_IN" EV_STATE_OF_CHARGE_MODE = "EV_STATE_OF_CHARGE_MODE" EV_STATE_OF_CHARGE_PERCENT = "EV_STATE_OF_CHARGE_PERCENT" EV_TIME_TO_FULLY_CHARGED = "EV_TIME_TO_FULLY_CHARGED" EV_TIME_TO_FULLY_CHARGED_UTC = "EV_TIME_TO_FULLY_CHARGED_UTC" EXTERNAL_TEMP = "EXT_EXTERNAL_TEMP" ODOMETER = "ODOMETER" POSITION_TIMESTAMP = "POSITION_TIMESTAMP" TIMESTAMP = "TIMESTAMP" TIRE_PRESSURE_FL = "TYRE_PRESSURE_FRONT_LEFT" TIRE_PRESSURE_FR = "TYRE_PRESSURE_FRONT_RIGHT" TIRE_PRESSURE_RL = "TYRE_PRESSURE_REAR_LEFT" TIRE_PRESSURE_RR = "TYRE_PRESSURE_REAR_RIGHT" VEHICLE_STATE = "VEHICLE_STATE_TYPE" WINDOW_FRONT_LEFT_STATUS = "WINDOW_FRONT_LEFT_STATUS" WINDOW_FRONT_RIGHT_STATUS = "WINDOW_FRONT_RIGHT_STATUS" WINDOW_REAR_LEFT_STATUS = "WINDOW_REAR_LEFT_STATUS" WINDOW_REAR_RIGHT_STATUS = "WINDOW_REAR_RIGHT_STATUS" CHARGING = "CHARGING" LOCKED_CONNECTED = "LOCKED_CONNECTED" UNLOCKED_CONNECTED = "UNLOCKED_CONNECTED" DOOR_OPEN = "OPEN" DOOR_CLOSED = "CLOSED" WINDOW_OPEN = "OPEN" WINDOW_CLOSED = "CLOSE" IGNITION_ON = "IGNITION_ON" NOT_EQUIPPED = "NOT_EQUIPPED" VS_AVG_FUEL_CONSUMPTION = "avgFuelConsumptionLitersPer100Kilometers" // vehicleStatus.json keys VS_DIST_TO_EMPTY = "distanceToEmptyFuelKilometers" VS_TIMESTAMP = "eventDate" VS_LATITUDE = "latitude" VS_LONGITUDE = "longitude" VS_HEADING = "positionHeadingDegree" VS_ODOMETER = "odometerValueKilometers" VS_VEHICLE_STATE = "vehicleStateType" VS_TIRE_PRESSURE_FL = "tirePressureFrontLeft" VS_TIRE_PRESSURE_FR = "tirePressureFrontRight" VS_TIRE_PRESSURE_RL = "tirePressureRearLeft" VS_TIRE_PRESSURE_RR = "tirePressureRearRight" BAD_AVG_FUEL_CONSUMPTION = "16383" // Erroneous Values BAD_DISTANCE_TO_EMPTY_FUEL = "16383" BAD_EV_TIME_TO_FULLY_CHARGED = "65535" BAD_TIRE_PRESSURE = "32767" BAD_ODOMETER = "None" BAD_EXTERNAL_TEMP = "-64.0" UNKNOWN = "UNKNOWN" VENTED = "VENTED" LOCATION_VALID = "location_valid" TIMESTAMP_FMT = "%Y-%m-%dT%H:%M:%S%z" // "2020-04-25T23:35:55+0000" // Timestamp Formats POSITION_TIMESTAMP_FMT = "%Y-%m-%dT%H:%M:%SZ" // "2020-04-25T23:35:55Z" ERROR_SOA_403 = "403-soa-unableToParseResponseBody" // G2 Error Codes ERROR_SOA_404 = "404-soa-unableToParseResponseBody" // Bad request body ERROR_INVALID_CREDENTIALS = "InvalidCredentials" ERROR_SERVICE_ALREADY_STARTED = "ServiceAlreadyStarted" ERROR_INVALID_ACCOUNT = "invalidAccount" ERROR_PASSWORD_WARNING = "passwordWarning" ERROR_ACCOUNT_LOCKED = "accountLocked" ERROR_NO_VEHICLES = "noVehiclesOnAccount" ERROR_NO_ACCOUNT = "accountNotFound" ERROR_TOO_MANY_ATTEMPTS = "tooManyAttempts" ERROR_VEHICLE_NOT_IN_ACCOUNT = "vehicleNotInAccount" ERROR_G1_NO_SUBSCRIPTION = "SXM40004" // G1 Error Codes ERROR_G1_STOLEN_VEHICLE = "SXM40005" ERROR_G1_INVALID_PIN = "SXM40006" ERROR_G1_SERVICE_ALREADY_STARTED = "SXM40009" ERROR_G1_PIN_LOCKED = "SXM40017" VEHICLE_ATTRIBUTES = "attributes" // Controller Vehicle Data Dict Keys VEHICLE_STATUS = "status" VEHICLE_ID = "id" VEHICLE_NAME = "nickname" VEHICLE_API_GEN = "api_gen" VEHICLE_LOCK = "lock" VEHICLE_LAST_UPDATE = "last_update_time" VEHICLE_LAST_FETCH = "last_fetch_time" VEHICLE_FEATURES = "features" VEHICLE_SUBSCRIPTION_FEATURES = "subscriptionFeatures" VEHICLE_SUBSCRIPTION_STATUS = "subscriptionStatus" FEATURE_PHEV = "PHEV" FEATURE_REMOTE_START = "RES" FEATURE_G1_TELEMATICS = "g1" // Vehicle has 2016-2018 telematics version. FEATURE_G2_TELEMATICS = "g2" // Vehicle has 2019+ telematics version. FEATURE_G3_TELEMATICS = "g3" // Vehicle has 2019+ telematics version. FEATURE_REMOTE = "REMOTE" FEATURE_SAFETY = "SAFETY" FEATURE_ACTIVE = "ACTIVE" DEFAULT_UPDATE_INTERVAL = 7200 DEFAULT_FETCH_INTERVAL = 300 // VALID_CLIMATE_OPTIONS = { // CLIMATE: [CLIMATE_DEFAULT], // TEMP_C: [str(_) for _ in range(TEMP_C_MIN, TEMP_C_MAX + 1)], // TEMP_F: [str(_) for _ in range(TEMP_F_MIN, TEMP_F_MAX + 1)], // FAN_SPEED: [FAN_SPEED_AUTO, FAN_SPEED_LOW, FAN_SPEED_MED, FAN_SPEED_HI], // HEAT_SEAT_LEFT: [HEAT_SEAT_OFF, HEAT_SEAT_LOW, HEAT_SEAT_MED, HEAT_SEAT_HI], // HEAT_SEAT_RIGHT: [HEAT_SEAT_OFF, HEAT_SEAT_LOW, HEAT_SEAT_MED, HEAT_SEAT_HI], // MODE: [ // MODE_DEFROST, // MODE_FEET_DEFROST, // MODE_FACE, // MODE_FEET, // MODE_SPLIT, // MODE_AUTO, // ], // RECIRCULATE: [RECIRCULATE_OFF, RECIRCULATE_ON], // REAR_AC: [REAR_AC_OFF, REAR_AC_ON], // REAR_DEFROST: [REAR_DEFROST_OFF, REAR_DEFROST_ON], // START_CONFIG: [START_CONFIG_DEFAULT_EV, START_CONFIG_DEFAULT_RES], // RUNTIME: [str(RUNTIME_DEFAULT)], // } // BAD_SENSOR_VALUES = [ // BAD_AVG_FUEL_CONSUMPTION, // BAD_DISTANCE_TO_EMPTY_FUEL, // BAD_EV_TIME_TO_FULLY_CHARGED, // BAD_TIRE_PRESSURE, // BAD_ODOMETER, // BAD_EXTERNAL_TEMP, // ] // BAD_BINARY_SENSOR_VALUES = [UNKNOWN, VENTED, NOT_EQUIPPED] )