Right, so I've implemented some stuff that seems to work quite well. 

https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/764  should be ready now after a couple of stupid mistakes slipped through.   This absolutely needs somebody to review it please! (There's a reason why I've converted some if()'s to switch() - which is that it will be used in the follow-up commit).

The commit that will follow on from that it implements the new Units: kWh/100km, km/kWh  and  mi/kWh.

This is a summary of what I've implemented for scripting - including showing the unit codes I have so far.  I've considered a few things:
  * Should some of the longer unit codes be shortened  (eg mi, mins, m, ft, deg, perc)
  * The unit codes could be much more regular and separated by dots  eg:  
        watthours -> w.h
        kwhp100km -> kw.h_100km or kw.h/100km
        miph ->  mi_h or mi/h  (or should it be mph).
        psi -> p_in.in or p/in.in or lb_in.in (yes, slightly weird, but predictable)
 
OVMS# metric units
          km : km
       miles : M
      meters : m
        feet : ft
     celcius : °C
  fahrenheit : °F
         kpa : kPa
          pa : Pa
         psi : psi
       volts : V
        amps : A
    amphours : Ah
          kw : kW
         kwh : kWh
       watts : W
   watthours : Wh
     seconds : Sec
     minutes : Min
       hours : Hour
         utc : UTC
     degrees : °
        kmph : km/h
        miph : Mph
      kmphps : km/h/s
      miphps : Mph/s
        mpss : m/s²
         dbm : dBm
          sq : sq
     percent : %
       whpkm : Wh/km
       whpmi : Wh/mi
   kwhp100km : kWh/100km
      kmpkwh : km/kWh
      mipkwh : mi/kWh
          nm : Nm

OVMS# metric unit mi
       miles : M
     minutes : Min
        miph : Mph
      miphps : Mph/s
       whpmi : Wh/mi
      mipkwh : mi/kWh


OVMS# metric get xiq.v.trip.consumption
17.0597kWh/100km
OVMS# metric get xiq.v.trip.consumption kpkwh
5.86177km/kWh
OVMS# metric get xiq.v.trip.consumption mpkwh
3.64233mi/kWh

OVMS# metric set xiq.c.speed 5 miph
Metric set
OVMS# metric get xiq.c.speed
8.04673km/h
OVMS# metric get xiq.c.speed miph
5Mph

And then in DukTape - there are some questions I have about the implementation:
* Names of functions? Better ideas? 
* Should ValueUnit output the units?
* In Value() there is the line    bool decode = duk_opt_boolean(ctx, 1, true);
    * What does 'decode' mean here?
    * Do I need it for ValueUnit() ?


(function() {
   print( OvmsMetrics.Value("xiq.v.trip.consumption"));
   print("\n")
   print( OvmsMetrics.ValueUnit("xiq.v.trip.consumption",""));
   print("\n")
   print( OvmsMetrics.ValueUnit("xiq.v.trip.consumption","mipkwh"));
   print("\n")

   print( OvmsMetrics.AsFloatUnit("xiq.v.trip.consumption","kmpkwh"));
})();

--- Output ---
17.0597
17.0597kWh/100km
3.64233mi/kWh
5.86177
------

The basic stuff all works - it's just quibbling over the details.. but let's get them right!

//.ichael

On Sat, 5 Nov 2022 at 20:09, Michael Geddes <frog@bunyip.wheelycreek.net> wrote:
Yeah - this was copied code from kia/kona and is what triggered these ideas; I totally agree this shouldn't be doubled up on.

I've got some commits centred round Metrics that I'll just check over and push up ... and then I'll just have the single xiq.v.trip.consumption metric (unless you have some ideas for the namespace) which will be much neater.

If it's ok with you then I might do that unit conversion proposal.
Would it ok if the unit specifications were the same as to the programatic codes in ovms_metrics.h?
(kWh,   WattHours , MetersPSS ) 
I would probably add a command
metric units <spec> 
to list all (matching) units and their associated Labels.

//.ichael 

On Sat, 5 Nov 2022 at 18:48, Michael Balzer <dexter@expeedo.de> wrote:
Michael,

adding unit conversion support to the shell and Duktape commands is a good idea.

Metrics are not meant to provide a user interface, they should be defined to be efficient and non-redundant.

Btw, metrics names also shall not use upper case characters, and shall only use "." as a separator.

Regards,
Michael


Am 05.11.22 um 11:22 schrieb Michael Geddes:
Hi all,
Some of the code I copied from Kona/Kia code had both kwh/100km and km/kwh metrics in the code as 'Other'. 
Adding the various power consumption Units is not particularly hard (I will have a pull-request soon) - though the conversions between them all required some thought!
... but it also made me think these two metrics that are (with the consumption units added) defined like this:  
m_v_trip_consumption1 = MyMetrics.InitFloat("xiq.v.trip.consumption.KWh/100km", 10, 0, kWHP100K);
m_v_trip_consumption2 = MyMetrics.InitFloat("xiq.v.trip.consumption.km/kWh", 10, 0, kPkWH);

These are effectively the same metric but in different units!
I'm wondering if we would be better to have scripting and Duktape support for converting metrics to different unit!  This might be also quite useful for those strange countries that insist on using miles as a measurement.

On top of the 'metric list' and 'metric set' we could add a 'metric get' which gets a single value.. and add unit support for get/set.

I've also got a pull request that improves the precision of the km<->mi conversions and factors it out.

//.ichael

_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev