More changes
All checks were successful
Golan Testing / testing (1.24.x, ubuntu-latest) (push) Successful in 25s

This commit is contained in:
2025-06-03 12:51:55 -04:00
parent c2128f278e
commit c3820ce0af
4 changed files with 87 additions and 102 deletions

View File

@ -127,11 +127,7 @@ func (c *Client) SelectVehicle(vin string) VehicleData {
return VehicleData{} return VehicleData{}
} }
// resp := c.execute(reqURL, GET, params, "", false)
// logger.Debugf("SELECT VEHICLE OUTPUT >> %v\n", string([]byte(resp)))
// ERRORS // ERRORS
// {"success":false,"errorCode":"vehicleNotInAccount","dataName":null,"data":null}
// """Select active vehicle for accounts with multiple VINs.""" // """Select active vehicle for accounts with multiple VINs."""
// params = {"vin": vin, "_": int(time.time())} // params = {"vin": vin, "_": int(time.time())}
@ -225,19 +221,16 @@ func (c *Client) GetVehicleByVIN(vin string) *Vehicle {
// func getRemoteStartStatus() {} // func getRemoteStartStatus() {}
// func getSafetyStatus() {} // func getSafetyStatus() {}
// func getSubscriptionStatus() {} // func getSubscriptionStatus() {}
// func getAPIGen() {}
// func getClimateData() {} // func getClimateData() {}
// func saveClimateSettings() {} // func saveClimateSettings() {}
// func getVehicleName() {}
// func fetch() {}
// Exec method executes a Client instance with the API URL // Exec method executes a Client instance with the API URL
func (c *Client) execute(requestUrl string, method string, params map[string]string, pollingUrl string, j bool, attempts ...int) []byte { func (c *Client) execute(requestUrl string, method string, params map[string]string, pollingUrl string, j bool, attempts ...int) []byte {
defer timeTrack("[TIMETRK] Executing Get Request") defer timeTrack("[TIMETRK] Executing HTTP Request")
var resp *resty.Response var resp *resty.Response
// GET Requests // GET Requests
if method == "GET" { if method == GET {
resp, _ = c.httpClient. resp, _ = c.httpClient.
R(). R().
SetQueryParams(params). SetQueryParams(params).
@ -245,7 +238,7 @@ func (c *Client) execute(requestUrl string, method string, params map[string]str
} }
// POST Requests // POST Requests
if method == "POST" { if method == POST {
if j { // POST > JSON Body if j { // POST > JSON Body
resp, _ = c.httpClient. resp, _ = c.httpClient.
R(). R().
@ -273,7 +266,6 @@ func (c *Client) execute(requestUrl string, method string, params map[string]str
if err != nil { if err != nil {
c.logger.Error("error while parsing json", "request", "HTTP POLLING", "error", err.Error()) c.logger.Error("error while parsing json", "request", "HTTP POLLING", "error", err.Error())
} }
// {"success":false,"errorCode":"404-soa-unableToParseResponseBody","dataName":"errorResponse","data":{"errorLabel":"404-soa-unableToParseResponseBody","errorDescription":null}}
if pollingUrl != "" { if pollingUrl != "" {
switch { switch {
@ -296,9 +288,18 @@ func (c *Client) execute(requestUrl string, method string, params map[string]str
} }
} }
} else { } else {
if r.DataName == "errorResponse" {
// {"success":false,"errorCode":"404-soa-unableToParseResponseBody","dataName":"errorResponse","data":{"errorLabel":"404-soa-unableToParseResponseBody","errorDescription":null}}
// {"success":false,"errorCode":"vehicleNotInAccount","dataName":null,"data":null}
var er ErrorResponse
err := json.Unmarshal(r.Data, &er)
if err != nil {
c.logger.Error("error while parsing json", "request", "errorResponse", "error", err.Error())
}
c.logger.Error("request is not successfull", "request", "execute", "method", method, "url", requestUrl, "error", err.Error())
}
c.logger.Error("request is not successfull", "request", "execute", "method", method, "url", requestUrl, "error", err.Error()) c.logger.Error("request is not successfull", "request", "execute", "method", method, "url", requestUrl, "error", err.Error())
} }
return resBytes return resBytes
} }

View File

@ -10,7 +10,6 @@ import (
) )
func main() { func main() {
var err error var err error
configFile, err := os.ReadFile("config.yaml") configFile, err := os.ReadFile("config.yaml")
@ -38,8 +37,8 @@ func main() {
// fmt.Printf("GEN #1: %+v\n\n", subaru1.getAPIGen()) // fmt.Printf("GEN #1: %+v\n\n", subaru1.getAPIGen())
// 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 // 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
subaru := ms.GetVehicleByVIN("4S4BTGPD0P3199198") outback := ms.GetVehicleByVIN("4S4BTGPD0P3199198")
subaru.GetLocation(true) // subaru.GetLocation(true)
// subaru.EngineStart() // subaru.EngineStart()
fmt.Printf("SUBARU #1 (Vehicle Status):\n") fmt.Printf("SUBARU #1 (Vehicle Status):\n")
@ -52,11 +51,6 @@ func main() {
// fmt.Printf("SUBARU #2: %+v\n", subaru) // fmt.Printf("SUBARU #2: %+v\n", subaru)
// subaru.GetVehicleHealth() // subaru.GetVehicleHealth()
// subaru.GetFeaturesList() // subaru.GetFeaturesList()
// subaru.LightsStart()
// time.Sleep(10 * time.Second)
// subaru.LightsStop()
// subaru := mysubaru.GetVehicles()[0] // subaru := mysubaru.GetVehicles()[0]
// fmt.Printf("SUBARU: %+v\n", subaru) // fmt.Printf("SUBARU: %+v\n", subaru)
@ -73,12 +67,6 @@ func main() {
// subaru.GetClimatePresets() // subaru.GetClimatePresets()
// subaru.GetClimateUserPresets() // subaru.GetClimateUserPresets()
// subaru.LightsStart()
// time.Sleep(15 * time.Second)
// subaru.LightsStop()
// subaru.listDevices()
// subaru.GetVehicleStatus() // subaru.GetVehicleStatus()
// subaru.GetClimateSettings() // subaru.GetClimateSettings()
@ -91,10 +79,6 @@ func main() {
// time.Sleep(20 * time.Second) // time.Sleep(20 * time.Second)
// subaru.Lock() // subaru.Lock()
// subaru.LightsStart()
// time.Sleep(15 * time.Second)
// subaru.LightsStop()
// subaru.GetLocation() // subaru.GetLocation()
fmt.Printf("SUBARU: %+v\n", subaru) fmt.Printf("SUBARU: %+v\n", outback)
} }

View File

@ -170,14 +170,14 @@ type VehicleStatus struct {
AvgFuelConsumptionMpg float64 `json:"avgFuelConsumptionMpg"` // + 18.4 AvgFuelConsumptionMpg float64 `json:"avgFuelConsumptionMpg"` // + 18.4
AvgFuelConsumptionLitersPer100Kilometers float64 `json:"avgFuelConsumptionLitersPer100Kilometers"` // + 12.8 AvgFuelConsumptionLitersPer100Kilometers float64 `json:"avgFuelConsumptionLitersPer100Kilometers"` // + 12.8
RemainingFuelPercent int `json:"remainingFuelPercent,string"` // + "82" RemainingFuelPercent int `json:"remainingFuelPercent,string"` // + "82"
TirePressureFrontLeft int `json:"tirePressureFrontLeft,string"` // + "2275" TirePressureFrontLeft int `json:"tirePressureFrontLeft,string,omitempty"` // + "2275"
TirePressureFrontRight int `json:"tirePressureFrontRight,string"` // + "2344" TirePressureFrontRight int `json:"tirePressureFrontRight,string,omitempty"` // + "2344"
TirePressureRearLeft int `json:"tirePressureRearLeft,string"` // + "2413" TirePressureRearLeft int `json:"tirePressureRearLeft,string,omitempty"` // + "2413"
TirePressureRearRight int `json:"tirePressureRearRight,string"` // + "2344" TirePressureRearRight int `json:"tirePressureRearRight,string,omitempty"` // + "2344"
TirePressureFrontLeftPsi int `json:"tirePressureFrontLeftPsi,string"` // + "33" TirePressureFrontLeftPsi int `json:"tirePressureFrontLeftPsi,string,omitempty"` // + "33"
TirePressureFrontRightPsi int `json:"tirePressureFrontRightPsi,string"` // + "34" TirePressureFrontRightPsi int `json:"tirePressureFrontRightPsi,string,omitempty"` // + "34"
TirePressureRearLeftPsi int `json:"tirePressureRearLeftPsi,string"` // + "35" TirePressureRearLeftPsi int `json:"tirePressureRearLeftPsi,string,omitempty"` // + "35"
TirePressureRearRightPsi int `json:"tirePressureRearRightPsi,string"` // + "34" TirePressureRearRightPsi int `json:"tirePressureRearRightPsi,string,omitempty"` // + "34"
TyreStatusFrontLeft string `json:"tyreStatusFrontLeft"` // + "UNKNOWN" TyreStatusFrontLeft string `json:"tyreStatusFrontLeft"` // + "UNKNOWN"
TyreStatusFrontRight string `json:"tyreStatusFrontRight"` // + "UNKNOWN" TyreStatusFrontRight string `json:"tyreStatusFrontRight"` // + "UNKNOWN"
TyreStatusRearLeft string `json:"tyreStatusRearLeft"` // + "UNKNOWN" TyreStatusRearLeft string `json:"tyreStatusRearLeft"` // + "UNKNOWN"
@ -188,55 +188,55 @@ type VehicleStatus struct {
EvDistanceToEmptyByStateMiles int `json:"evDistanceToEmptyByStateMiles,omitempty"` // + null EvDistanceToEmptyByStateMiles int `json:"evDistanceToEmptyByStateMiles,omitempty"` // + null
EvDistanceToEmptyByStateKilometers int `json:"evDistanceToEmptyByStateKilometers,omitempty"` // + null EvDistanceToEmptyByStateKilometers int `json:"evDistanceToEmptyByStateKilometers,omitempty"` // + null
VehicleStateType string `json:"vehicleStateType"` // + "IGNITION_OFF | IGNITION_ON" VehicleStateType string `json:"vehicleStateType"` // + "IGNITION_OFF | IGNITION_ON"
WindowFrontLeftStatus string `json:"windowFrontLeftStatus"` // + "CLOSE" WindowFrontLeftStatus string `json:"windowFrontLeftStatus"` // CLOSE | VENTED | OPEN
WindowFrontRightStatus string `json:"windowFrontRightStatus"` // + "CLOSE" WindowFrontRightStatus string `json:"windowFrontRightStatus"` // CLOSE | VENTED | OPEN
WindowRearLeftStatus string `json:"windowRearLeftStatus"` // + "CLOSE" WindowRearLeftStatus string `json:"windowRearLeftStatus"` // CLOSE | VENTED | OPEN
WindowRearRightStatus string `json:"windowRearRightStatus"` // + "CLOSE" WindowRearRightStatus string `json:"windowRearRightStatus"` // CLOSE | VENTED | OPEN
WindowSunroofStatus string `json:"windowSunroofStatus"` // + "CLOSE" WindowSunroofStatus string `json:"windowSunroofStatus"` // CLOSE | VENTED | OPEN
DoorBootPosition string `json:"doorBootPosition"` // CLOSED DoorBootPosition string `json:"doorBootPosition"` // CLOSED | OPEN
DoorEngineHoodPosition string `json:"doorEngineHoodPosition"` // CLOSED DoorEngineHoodPosition string `json:"doorEngineHoodPosition"` // CLOSED | OPEN
DoorFrontLeftPosition string `json:"doorFrontLeftPosition"` // CLOSED DoorFrontLeftPosition string `json:"doorFrontLeftPosition"` // CLOSED | OPEN
DoorFrontRightPosition string `json:"doorFrontRightPosition"` // CLOSED DoorFrontRightPosition string `json:"doorFrontRightPosition"` // CLOSED | OPEN
DoorRearLeftPosition string `json:"doorRearLeftPosition"` // CLOSED DoorRearLeftPosition string `json:"doorRearLeftPosition"` // CLOSED | OPEN
DoorRearRightPosition string `json:"doorRearRightPosition"` // CLOSED DoorRearRightPosition string `json:"doorRearRightPosition"` // CLOSED | OPEN
DoorBootLockStatus string `json:"doorBootLockStatus"` // LOCKED DoorBootLockStatus string `json:"doorBootLockStatus"` // LOCKED | UNLOCKED
DoorFrontLeftLockStatus string `json:"doorFrontLeftLockStatus"` // LOCKED DoorFrontLeftLockStatus string `json:"doorFrontLeftLockStatus"` // LOCKED | UNLOCKED
DoorFrontRightLockStatus string `json:"doorFrontRightLockStatus"` // LOCKED DoorFrontRightLockStatus string `json:"doorFrontRightLockStatus"` // LOCKED | UNLOCKED
DoorRearLeftLockStatus string `json:"doorRearLeftLockStatus"` // LOCKED DoorRearLeftLockStatus string `json:"doorRearLeftLockStatus"` // LOCKED | UNLOCKED
DoorRearRightLockStatus string `json:"doorRearRightLockStatus"` // LOCKED DoorRearRightLockStatus string `json:"doorRearRightLockStatus"` // LOCKED | UNLOCKED
} }
// VehicleCondition . // VehicleCondition .
// "dataName":"remoteServiceStatus" // "dataName":"remoteServiceStatus"
// "remoteServiceType":"condition" // "remoteServiceType":"condition"
type VehicleCondition struct { type VehicleCondition struct {
VehicleStateType string `json:"vehicleStateType"` // "IGNITION_OFF", VehicleStateType string `json:"vehicleStateType"` // "IGNITION_OFF | IGNITION_ON"
AvgFuelConsumption float64 `json:"avgFuelConsumption,omitempty"` // null, AvgFuelConsumption float64 `json:"avgFuelConsumption,omitempty"` // null | 18.4
AvgFuelConsumptionUnit string `json:"avgFuelConsumptionUnit"` // "MPG", AvgFuelConsumptionUnit string `json:"avgFuelConsumptionUnit"` // "MPG"
DistanceToEmptyFuel int `json:"distanceToEmptyFuel,omitempty"` // null, DistanceToEmptyFuel int `json:"distanceToEmptyFuel,omitempty"` // null | 160
DistanceToEmptyFuelUnit string `json:"distanceToEmptyFuelUnit"` // "MILES", DistanceToEmptyFuelUnit string `json:"distanceToEmptyFuelUnit"` // "MILES"
RemainingFuelPercent int `json:"remainingFuelPercent"` // "66", RemainingFuelPercent int `json:"remainingFuelPercent,string"` // "66"
Odometer int `json:"odometer"` // 92, Odometer int `json:"odometer"` // 92
OdometerUnit string `json:"odometerUnit"` // "MILES", OdometerUnit string `json:"odometerUnit"` // "MILES"
TirePressureFrontLeft float64 `json:"tirePressureFrontLeft,omitempty"` // null, TirePressureFrontLeft float64 `json:"tirePressureFrontLeft,omitempty"` // null | 36
TirePressureFrontLeftUnit string `json:"tirePressureFrontLeftUnit"` // "PSI", TirePressureFrontLeftUnit string `json:"tirePressureFrontLeftUnit"` // "PSI"
TirePressureFrontRight float64 `json:"tirePressureFrontRight,omitempty"` // null, TirePressureFrontRight float64 `json:"tirePressureFrontRight,omitempty"` // null | 36
TirePressureFrontRightUnit string `json:"tirePressureFrontRightUnit"` // "PSI", TirePressureFrontRightUnit string `json:"tirePressureFrontRightUnit"` // "PSI",
TirePressureRearLeft float64 `json:"tirePressureRearLeft,omitempty"` // null, TirePressureRearLeft float64 `json:"tirePressureRearLeft,omitempty"` // null | 36
TirePressureRearLeftUnit string `json:"tirePressureRearLeftUnit"` // "PSI", TirePressureRearLeftUnit string `json:"tirePressureRearLeftUnit"` // "PSI"
TirePressureRearRight float64 `json:"tirePressureRearRight,omitempty"` // null, TirePressureRearRight float64 `json:"tirePressureRearRight,omitempty"` // null | 36
TirePressureRearRightUnit string `json:"tirePressureRearRightUnit"` // "PSI", TirePressureRearRightUnit string `json:"tirePressureRearRightUnit"` // "PSI"
DoorBootPosition string `json:"doorBootPosition"` // "CLOSED", DoorBootPosition string `json:"doorBootPosition"` // "CLOSED | OPEN"
DoorEngineHoodPosition string `json:"doorEngineHoodPosition"` // "CLOSED", DoorEngineHoodPosition string `json:"doorEngineHoodPosition"` // "CLOSED | OPEN"
DoorFrontLeftPosition string `json:"doorFrontLeftPosition"` // "CLOSED", DoorFrontLeftPosition string `json:"doorFrontLeftPosition"` // "CLOSED | OPEN"
DoorFrontRightPosition string `json:"doorFrontRightPosition"` // "CLOSED", DoorFrontRightPosition string `json:"doorFrontRightPosition"` // "CLOSED | OPEN"
DoorRearLeftPosition string `json:"doorRearLeftPosition"` // "CLOSED", DoorRearLeftPosition string `json:"doorRearLeftPosition"` // "CLOSED | OPEN"
DoorRearRightPosition string `json:"doorRearRightPosition"` // "CLOSED" DoorRearRightPosition string `json:"doorRearRightPosition"` // "CLOSED | OPEN"
WindowFrontLeftStatus string `json:"windowFrontLeftStatus"` // "CLOSE", WindowFrontLeftStatus string `json:"windowFrontLeftStatus"` // "CLOSE | VENTED | OPEN"
WindowFrontRightStatus string `json:"windowFrontRightStatus"` // "CLOSE", WindowFrontRightStatus string `json:"windowFrontRightStatus"` // "CLOSE | VENTED | OPEN"
WindowRearLeftStatus string `json:"windowRearLeftStatus"` // "CLOSE", WindowRearLeftStatus string `json:"windowRearLeftStatus"` // "CLOSE | VENTED | OPEN"
WindowRearRightStatus string `json:"windowRearRightStatus"` // "CLOSE", WindowRearRightStatus string `json:"windowRearRightStatus"` // "CLOSE | VENTED | OPEN"
WindowSunroofStatus string `json:"windowSunroofStatus"` // "CLOSE", WindowSunroofStatus string `json:"windowSunroofStatus"` // "CLOSE | VENTED | OPEN"
EvDistanceToEmpty int `json:"evDistanceToEmpty,omitempty"` // null, EvDistanceToEmpty int `json:"evDistanceToEmpty,omitempty"` // null,
EvDistanceToEmptyUnit string `json:"evDistanceToEmptyUnit,omitempty"` // null, EvDistanceToEmptyUnit string `json:"evDistanceToEmptyUnit,omitempty"` // null,
EvChargerStateType string `json:"evChargerStateType,omitempty"` // null, EvChargerStateType string `json:"evChargerStateType,omitempty"` // null,
@ -302,10 +302,10 @@ type VehicleHealth struct {
LastUpdatedDate int64 `json:"lastUpdatedDate"` LastUpdatedDate int64 `json:"lastUpdatedDate"`
} }
type VehicleHealthItem struct { type VehicleHealthItem struct {
B2cCode string `json:"b2cCode"` B2cCode string `json:"b2cCode"`
FeatureCode string `json:"featureCode"` FeatureCode string `json:"featureCode"`
IsTrouble bool `json:"isTrouble"` IsTrouble bool `json:"isTrouble"`
OnDaiID int `json:"onDaiId"` OnDaiID int `json:"onDaiId"`
OnDates []string `json:"onDates"` OnDates []int64 `json:"onDates,omitempty"`
WarningCode int `json:"warningCode"` WarningCode int `json:"warningCode"`
} }

View File

@ -458,10 +458,10 @@ func (v *Vehicle) GetClimatePresets() {
if len(cProfiles) > 0 { if len(cProfiles) > 0 {
for _, cp := range cProfiles { for _, cp := range cProfiles {
if v.isEV() && cp.VehicleType == "phev" { if v.isEV() && cp.VehicleType == "phev" {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
} else { } else {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
} else { } else {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
@ -469,10 +469,10 @@ func (v *Vehicle) GetClimatePresets() {
} }
} }
if !v.isEV() && cp.VehicleType == "gas" { if !v.isEV() && cp.VehicleType == "gas" {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
} else { } else {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
} else { } else {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+cp.Name] = cp
@ -481,7 +481,7 @@ func (v *Vehicle) GetClimatePresets() {
} }
} }
} else { } else {
v.client.logger.Debug("didn't find any climate quick presets") v.client.logger.Debug("didn't find any climate presets")
} }
v.Updated = time.Now() v.Updated = time.Now()
} else { } else {
@ -509,16 +509,16 @@ func (v *Vehicle) GetClimateQuickPresets() {
re2 := regexp.MustCompile(`\\`) re2 := regexp.MustCompile(`\\`)
result = re2.ReplaceAllString(result, `"`) // \u0022 result = re2.ReplaceAllString(result, `"`) // \u0022
var cProfile ClimateProfile var cp ClimateProfile
err = json.Unmarshal([]byte(result), &cProfile) err = json.Unmarshal([]byte(result), &cp)
if err != nil { if err != nil {
v.client.logger.Error("error while parsing climate quick presets json", "request", "GetClimateQuickPresets", "error", err.Error()) v.client.logger.Error("error while parsing climate quick presets json", "request", "GetClimateQuickPresets", "error", err.Error())
} }
if _, ok := v.ClimateProfiles[cProfile.PresetType+cProfile.Name]; ok { if _, ok := v.ClimateProfiles["quick"+cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cProfile.PresetType+cProfile.Name] = cProfile v.ClimateProfiles["quick"+cp.PresetType+strings.TrimSpace(cp.Name)] = cp
} else { } else {
v.ClimateProfiles[cProfile.PresetType+cProfile.Name] = cProfile v.ClimateProfiles["quick"+cp.PresetType+strings.TrimSpace(cp.Name)] = cp
} }
v.Updated = time.Now() v.Updated = time.Now()
} else { } else {
@ -552,13 +552,13 @@ func (v *Vehicle) GetClimateUserPresets() {
if len(cProfiles) > 0 { if len(cProfiles) > 0 {
for _, cp := range cProfiles { for _, cp := range cProfiles {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)] = cp
} else { } else {
if _, ok := v.ClimateProfiles[cp.PresetType+cp.Name]; ok { if _, ok := v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)]; ok {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)] = cp
} else { } else {
v.ClimateProfiles[cp.PresetType+cp.Name] = cp v.ClimateProfiles[cp.PresetType+strings.TrimSpace(cp.Name)] = cp
} }
} }
} }