29
29
#include < string>
30
30
static const char *TAG = " v-vweup" ;
31
31
32
- #define VERSION " 0.21 .1"
32
+ #define VERSION " 0.22 .1"
33
33
34
34
#include < stdio.h>
35
35
#include < string>
@@ -105,6 +105,10 @@ OvmsVehicleVWeUp::OvmsVehicleVWeUp()
105
105
106
106
m_chg_ctp_car = -1 ;
107
107
108
+ m_odo_trip = 0 ;
109
+ m_tripfrac_reftime = 0 ;
110
+ m_tripfrac_refspeed = 0 ;
111
+
108
112
// Init metrics:
109
113
m_version = MyMetrics.InitString (" xvu.m.version" , 0 , VERSION " " __DATE__ " " __TIME__);
110
114
@@ -366,7 +370,7 @@ void OvmsVehicleVWeUp::MetricModified(OvmsMetric* metric)
366
370
if (soh_new)
367
371
SetSOH (soh_new);
368
372
}
369
-
373
+
370
374
// Pass update on to standard handler:
371
375
OvmsVehicle::MetricModified (metric);
372
376
}
@@ -566,6 +570,10 @@ void OvmsVehicleVWeUp::ResetTripCounters()
566
570
{
567
571
// Clear per trip counters:
568
572
StdMetrics.ms_v_pos_trip ->SetValue (0 );
573
+ m_odo_trip = 0 ;
574
+ m_tripfrac_reftime = esp_log_timestamp ();
575
+ m_tripfrac_refspeed = StdMetrics.ms_v_pos_speed ->AsFloat ();
576
+
569
577
StdMetrics.ms_v_bat_energy_recd ->SetValue (0 );
570
578
StdMetrics.ms_v_bat_energy_used ->SetValue (0 );
571
579
StdMetrics.ms_v_bat_coulomb_recd ->SetValue (0 );
@@ -576,19 +584,42 @@ void OvmsVehicleVWeUp::ResetTripCounters()
576
584
if (IsOBDReady ()) {
577
585
m_soc_abs_start = BatMgmtSoCAbs->AsFloat ();
578
586
}
579
- m_odo_start = StdMetrics.ms_v_pos_odometer ->AsFloat ();
580
587
m_soc_norm_start = StdMetrics.ms_v_bat_soc ->AsFloat ();
581
588
m_energy_recd_start = StdMetrics.ms_v_bat_energy_recd_total ->AsFloat ();
582
589
m_energy_used_start = StdMetrics.ms_v_bat_energy_used_total ->AsFloat ();
583
590
m_coulomb_recd_start = StdMetrics.ms_v_bat_coulomb_recd_total ->AsFloat ();
584
591
m_coulomb_used_start = StdMetrics.ms_v_bat_coulomb_used_total ->AsFloat ();
585
592
586
- ESP_LOGD (TAG, " Trip start ref: socnrm=%f socabs=%f odo=%f , er=%f, eu=%f, cr=%f, cu=%f" ,
587
- m_soc_norm_start, m_soc_abs_start, m_odo_start,
593
+ ESP_LOGD (TAG, " Trip start ref: socnrm=%f socabs=%f, er=%f, eu=%f, cr=%f, cu=%f" ,
594
+ m_soc_norm_start, m_soc_abs_start,
588
595
m_energy_recd_start, m_energy_used_start, m_coulomb_recd_start, m_coulomb_used_start);
589
596
}
590
597
591
598
599
+ /* *
600
+ * UpdateTripOdo: odometer resolution is only 1 km, so trip distances lack
601
+ * precision. To compensate, this method derives trip distance from speed.
602
+ */
603
+ void OvmsVehicleVWeUp::UpdateTripOdo ()
604
+ {
605
+ // Process speed update:
606
+ uint32_t now = esp_log_timestamp ();
607
+ float speed = StdMetrics.ms_v_pos_speed ->AsFloat ();
608
+
609
+ if (m_tripfrac_reftime && now > m_tripfrac_reftime)
610
+ {
611
+ float speed_avg = ABS (speed + m_tripfrac_refspeed) / 2 ;
612
+ uint32_t time_ms = now - m_tripfrac_reftime;
613
+ double meters = speed_avg / 3.6 * time_ms / 1000 ;
614
+ m_odo_trip += meters / 1000 ;
615
+ StdMetrics.ms_v_pos_trip ->SetValue (TRUNCPREC (m_odo_trip,3 ));
616
+ }
617
+
618
+ m_tripfrac_reftime = now;
619
+ m_tripfrac_refspeed = speed;
620
+ }
621
+
622
+
592
623
/* *
593
624
* ResetChargeCounters: call at charge start to set reference points
594
625
* Called by the connector subsystem detecting vehicle state changes,
0 commit comments