BMW Cardata: add alternative datapoints for Plug-in Hybrids (#24391)

This commit is contained in:
Copilot 2025-10-13 10:27:34 +00:00 • committed by GitHub
parent 998de44eb6
commit b18529ee18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 4 deletions

View file

@ -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
```

View file

@ -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

View file

@ -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
}