[Ovmsdev] MyMetrics - create a metric but don't initialise a value and set modified

Steve Davies steve at telviva.co.za
Sun Jan 17 22:04:33 HKT 2021


Hi,

Is there an "official" way to Init my private metrics without setting a
value and having them marked modified?

The problem I am trying to solve is that if I do this, for instance:

  > mt_i3_range_ecoproplus = MyMetrics.InitInt
 ("xi3.v.b.range.ecoproplus",   SM_STALE_HIGH, 0, Kilometers);

Then "0" is officially published as the range.  This is unlikely and messes
up my charts.  I'd rather not publish a value until I get one from the car.

I see that the standard metrics are just created with:

  > ms_v_bat_range_full = new OvmsMetricFloat(MS_V_BAT_RANGE_FULL,
SM_STALE_HIGH, Kilometers);

where V_BAT_RANGE_FULL is "v.b.range.full"

They have no value until they are explicitly set.

So would it be acceptable to rather create my private metrics like that?

I guess then it falls on me to check if the metric already exists - which
is done as part of InitFloat.

So I guess I'd write:

  > mt_i3_range_ecoproplus =
(OvmsMetricInt*)MyMetrics.Find("xi3.v.b.range.ecoproplus");
  > if (mt_i3_range_ecoproplus==NULL) mt_i3_range_ecoproplus = new
OvmsMetricInt("xi3.v.b.range.ecoproplus",  SM_STALE_HIGH, Kilometers, 0);

Is this a reasonable approach or am I going about this the wrong way?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20210117/eb088ba1/attachment-0001.htm>


More information about the OvmsDev mailing list