diff --git a/vehicle/vw/eudataact/provider.go b/vehicle/vw/eudataact/provider.go index b2a75ddc9..588e08512 100644 --- a/vehicle/vw/eudataact/provider.go +++ b/vehicle/vw/eudataact/provider.go @@ -82,7 +82,7 @@ func (v *Provider) Soc() (float64, error) { return 0, err } - if p := lookup(data, FieldBatteryStateReportSoc, FieldSoc, FieldHvSoc); p != nil { + if p := lookup(data, FieldBatteryStateReportSoc, FieldSoc, FieldHvSoc, FieldHvBatteryLevel); p != nil { return strconv.ParseFloat(p.Value, 64) } @@ -133,7 +133,7 @@ func (v *Provider) Odometer() (float64, error) { return 0, err } - if p := lookup(data, FieldOdometer); p != nil { + if p := lookup(data, FieldOdometer, FieldOdometerValue); p != nil { return strconv.ParseFloat(p.Value, 64) } @@ -155,7 +155,8 @@ func (v *Provider) Status() (api.ChargeStatus, error) { status = api.StatusB } - if p := lookup(data, FieldChargingState); p != nil && strings.EqualFold(p.Value, "charging") { + if p := lookup(data, FieldChargingState, FieldCurrentChargeState); p != nil && + (strings.EqualFold(p.Value, "charging") || strings.Contains(strings.ToUpper(p.Value), "CHARGING_HV")) { status = api.StatusC } diff --git a/vehicle/vw/eudataact/types.go b/vehicle/vw/eudataact/types.go index 05b8d746b..d8da41a11 100644 --- a/vehicle/vw/eudataact/types.go +++ b/vehicle/vw/eudataact/types.go @@ -82,9 +82,9 @@ type dataset struct { // dataPoint is a single data point as delivered in the dataset JSON document type dataPoint struct { - DataFieldName string `json:"dataFieldName"` - Value string `json:"value"` - TimestampUtc string `json:"timestampUtc"` + DataFieldName string `json:"dataFieldName"` + Value string `json:"value"` + TimestampUtc *time.Time `json:"timestampUtc"` } // point is a decoded data point: its value and the time it was recorded @@ -104,11 +104,14 @@ const ( FieldBatteryStateReportSoc = "battery_state_report.soc" FieldSoc = "state_of_charge" FieldHvSoc = "hv_soc" + FieldHvBatteryLevel = "battery_level_HV.value" FieldRangeCombined = "cruising_range_combined" FieldRangePrimary = "cruising_range_primary_engine" FieldRangeSecondary = "cruising_range_secondary_engine" FieldOdometer = "mileage" + FieldOdometerValue = "mileage.value" FieldChargingState = "charging_state" + FieldCurrentChargeState = "charging_state_report.current_charge_state" FieldPlugState = "plug_state" FieldTargetSoc = "settings.target_soc" FieldRemainingTime = "remaining_charging_time" @@ -180,9 +183,9 @@ func parseDataset(b []byte) (string, map[string]point, error) { continue } - ts, err := time.Parse(time.RFC3339, p.TimestampUtc) - if err != nil { - return "", nil, err + var ts time.Time + if p.TimestampUtc != nil { + ts = *p.TimestampUtc } if cur, ok := res[p.DataFieldName]; ok && cur.Timestamp.After(ts) {