diff --git a/templates/definition/vehicle/cardata.yaml b/templates/definition/vehicle/cardata.yaml index 158293000..8c89f8c74 100644 --- a/templates/definition/vehicle/cardata.yaml +++ b/templates/definition/vehicle/cardata.yaml @@ -16,9 +16,11 @@ requirements: vehicle.cabin.hvac.preconditioning.status.comfortState vehicle.drivetrain.batteryManagement.header vehicle.drivetrain.electricEngine.charging.hvStatus + vehicle.drivetrain.electricEngine.charging.status vehicle.drivetrain.electricEngine.charging.timeRemaining vehicle.drivetrain.electricEngine.kombiRemainingElectricRange vehicle.powertrain.electric.battery.stateOfCharge.target + vehicle.vehicle.preConditioning.activity vehicle.vehicle.travelledDistance ``` @@ -32,9 +34,11 @@ requirements: vehicle.cabin.hvac.preconditioning.status.comfortState vehicle.drivetrain.batteryManagement.header vehicle.drivetrain.electricEngine.charging.hvStatus + vehicle.drivetrain.electricEngine.charging.status vehicle.drivetrain.electricEngine.charging.timeRemaining vehicle.drivetrain.electricEngine.kombiRemainingElectricRange vehicle.powertrain.electric.battery.stateOfCharge.target + vehicle.vehicle.preConditioning.activity vehicle.vehicle.travelledDistance ``` diff --git a/vehicle/bmw/cardata/api.go b/vehicle/bmw/cardata/api.go index ae4c411c3..2162c7400 100644 --- a/vehicle/bmw/cardata/api.go +++ b/vehicle/bmw/cardata/api.go @@ -29,13 +29,15 @@ var requiredKeys = []string{ "vehicle.cabin.hvac.preconditioning.status.comfortState", "vehicle.drivetrain.batteryManagement.header", "vehicle.drivetrain.electricEngine.charging.hvStatus", + "vehicle.drivetrain.electricEngine.charging.status", "vehicle.drivetrain.electricEngine.charging.timeRemaining", "vehicle.drivetrain.electricEngine.kombiRemainingElectricRange", "vehicle.powertrain.electric.battery.stateOfCharge.target", + "vehicle.vehicle.preConditioning.activity", "vehicle.vehicle.travelledDistance", } -const requiredVersion = "v2" +const requiredVersion = "v3" type API struct { *request.Helper diff --git a/vehicle/bmw/cardata/provider.go b/vehicle/bmw/cardata/provider.go index 93ff41c14..49a79d450 100644 --- a/vehicle/bmw/cardata/provider.go +++ b/vehicle/bmw/cardata/provider.go @@ -167,8 +167,15 @@ func (v *Provider) Status() (api.ChargeStatus, error) { } hv, err := v.String("vehicle.drivetrain.electricEngine.charging.hvStatus") - if hv == "CHARGING" { - status = api.StatusC + if err != nil || hv == "" || hv == "INVALID" { + hv, err = v.String("vehicle.drivetrain.electricEngine.charging.status") + } + + if slices.Contains([]string{ + "CHARGING", // vehicle.drivetrain.electricEngine.charging.hvStatus + "CHARGINGACTIVE", // vehicle.drivetrain.electricEngine.charging.status + }, hv) { + return api.StatusC, nil } return status, err @@ -208,5 +215,13 @@ var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface func (v *Provider) Climater() (bool, error) { res, err := v.String("vehicle.cabin.hvac.preconditioning.status.comfortState") - return slices.Contains([]string{"COMFORT_HEATING", "COMFORT_COOLING", "COMFORT_VENTILATION", "DEFROST"}, res), err + if err == nil && res != "" { + return slices.Contains([]string{"COMFORT_HEATING", "COMFORT_COOLING", "COMFORT_VENTILATION", "DEFROST"}, res), nil + } + + if res, err = v.String("vehicle.vehicle.preConditioning.activity"); err == nil { + return slices.Contains([]string{"HEATING", "COOLING", "VENTILATION"}, res), nil + } + + return false, err }