DriveSomethingGreater: fix timestamp error

This commit is contained in:
andig 2026-06-04 13:31:14 +02:00
parent 0c4ce3f422
commit cdf81a0d44
2 changed files with 13 additions and 9 deletions

View file

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

View file

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