<div dir="ltr">Ok - so here's what I have implemented for Duktape and Metrics. (I added IsDefined() as well).<div>Any thoughts on this?<br><div><br><div>Noting</div><div>   OvmsMetrics.Float( {metric} ) -> Outputs metric as float (same)</div><div>   OvmsMetrics.Float( {metric}, {unit}) -> Outputs metric as float converted to given unit  (new)</div><div>   OvmsMetrics.Value( {metric} )   -> Outputs Metric in native value (same)</div><div>   OvmsMetrics.Value( {metric} , false)   -> Outputs Metric as string and no units (same) </div>   OvmsMetrics.Value( {metric} ,  {unit})  -> Outputs Metric converted to given unit as native value. (new)<div> 

OvmsMetrics.Value( {metric} ,  {unit}, false )  -> Outputs Metric converted to given unit as string including any unit specifier. (new)<div>also  OvmsMetric.GetValues( {metric} [,{unit}] [, {converted} ] )  Adds similar behaviour to Value() above.</div><div>also the special units '<b>imperial</b>' and '<b>metric</b>' will convert to the associated imperial / metric version of the units as appropriate.</div><div><br><div><font face="monospace">(function() {<br>   dump = function (metric) { print( metric+ " ["+(typeof metric)+"]\n"  ); }<br>   dump_obj = function (obj )  {<br>     print('--- Object ----\n')<br>     for (var k in obj) {<br>       xk = obj[k];<br>       print( k+':'+ xk + ' ['+typeof xk+ "]\n");<br>     }<br>   }<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption"));<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption", false));<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption","kmpkwh"));<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption", "mipkwh", false));<br>   dump(OvmsMetrics.AsFloat("xiq.v.trip.consumption"));<br>   dump(OvmsMetrics.AsFloat("xiq.v.trip.consumption","kmpkwh"));<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption","imperial"))<br>   dump(OvmsMetrics.Value("xiq.v.trip.consumption","imperial", false))<br>   dump_obj(OvmsMetrics.GetValues("trip", "metric"))<br>   dump_obj(OvmsMetrics.GetValues("trip", "imperial", false))<br>})();<br></font></div><div><br></div><div>With this output:</div><div><div style="box-sizing:border-box;padding:15px;color:rgb(51,51,51);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px"><pre id="m_5484224439251412587gmail-output" style="box-sizing:border-box;overflow:auto;font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;padding:9.5px;margin-top:0px;margin-bottom:10px;line-height:1.42857;color:rgb(0,34,0);word-break:break-all;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px;height:406px;white-space:pre-wrap">19.2308 [number]
19.2308 [string]
5.2 [number]
3.23112mi/kWh [string]
19.2308 [number]
5.2 [number]
309.49 [number]
309.49Wh/mi [string]
--- Object ----
v.p.trip:13 [number]
xiq.e.trip:0 [number]
xiq.e.trip.energy.recuperated:0 [number]
xiq.e.trip.energy.used:0 [number]
xiq.v.trip.consumption:19.2308 [number]
--- Object ----
v.p.trip:8.07781M [string]
xiq.e.trip:0M [string]
xiq.e.trip.energy.recuperated:0kWh [string]
xiq.e.trip.energy.used:0kWh [string]
xiq.v.trip.consumption:309.49Wh/mi [string]</pre></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 9 Nov 2022 at 05:47, Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Yeah - I like HasValue.  I implemented IsDefined() but I will rename it.. that's a much clearer name.<div><br></div><div>Another thought. How about if we did this (but also with GetValues() as well - see the special values below) </div><div><br><div>OvmsMetrics.Value("xiq.v.trip.consumption",  true)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">17.0582</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (Number)</span><br></div><div><div>OvmsMetrics.Value("xiq.v.trip.consumption",  false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">17.0582</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span></div></div></div><div>OvmsMetrics.Value("xiq.v.trip.consumption", "mipkwh", true)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (Number)</span><br></div><div>OvmsMetrics.Value("xiq.v.trip.consumption", "mipkwh", false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264Mi/kWh</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span><br></div><div> OvmsMetrics.Value("xiq.v.trip.consumption", "native", false)  -> <span style="font-size:13px;background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;white-space:pre-wrap">17.0582km/kWh</span><span style="font-size:13px;background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;white-space:pre-wrap">  (String)</span>  </div><div><br></div><div>and</div><div><div>OvmsMetrics.Value("xiq.v.trip.consumption", "imperial", false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264Mi/kWh</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span><br></div><div></div></div><div><br></div><div>I have already implemented the special values 'native' (existing), 'imperial' and 'metric'.  </div><div><br></div><div>I was also thinking that in the future you could have 'user'. Where for each group of values:</div><div>'temperature', 'distance', 'shortdistance', 'power' etc.. you could have a user preference. I probably won't implement it now,.but it could be cool that any UI could just ask for the user defined units (rather than having a separate choice).</div><div><br></div><div><br></div><div><br></div><div>//.ichael</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 8 Nov 2022 at 21:57, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net" target="_blank">mark@webb-johnson.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="ltr" style="color:rgb(0,0,0)">Or perhaps something more specific?</div><div dir="ltr" style="color:rgb(0,0,0)"><br></div><div dir="ltr" style="color:rgb(0,0,0)">    HasValue()</div><div dir="ltr" style="color:rgb(0,0,0)"><br></div><div dir="ltr" style="color:rgb(0,0,0)">Mark</div><div><br><blockquote type="cite"><div>On 8 Nov 2022, at 9:01 PM, Michael Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>> wrote:</div><br><div><div><div><div>Signed PGP part</div><div>
  
    
  
  <div>
    That's basically a good approach, but be aware 'IsDefined()' has an
    ambiguous meaning here, as with the API stem "OvmsMetrics" it would
    naturally be expected to mean "is this metric defined", not "does
    this metric have a defined value".<br>
    <br>
    An undefined metric currently can be derived from 'Values()'
    returning undefined, but that's more an undocumented side effect
    than intended.<br>
    <br>
    Maybe 'GetDefined()' could be a better name, leveraging this
    behaviour, i.e. returning 'undefined' for an actually undefined
    metric, and 'null' for a defined metric without a value.<br>
    <br>
    Regards,<br>
    Michael<br>
    <br>
    <br>
    <div>Am 08.11.22 um 13:46 schrieb Michael
      Geddes:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>Ah yes. Arrays - will check those.  Yeah, how about we add
          a 'IsDefined' method to metrics instead of the null thing (it
          does sound like it will upset too many applecarts).</div>
        <div><br>
        </div>
        <div>//.</div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Tue, 8 Nov 2022 at 20:35,
            Michael Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div> Michael,<br>
              <br>
              looks all good to me, once again nice find with the decode
              argument. Adding decode to the Value() call was only for
              symmetry IIRC, the main use was with GetValues()
              (<a href="https://docs.openvehicles.com/en/latest/userguide/scripting.html#ovmsmetrics" target="_blank">https://docs.openvehicles.com/en/latest/userguide/scripting.html#ovmsmetrics</a>).<br>
              <br>
              Don't forget to test arrays, e.g. "v.t.pressure" &
              "v.t.temp".<br>
              <br>
              Returning null for an undefined metric seems like a
              natural choice, but is a rather deep change, as for
              consistency not only the Duktape metrics API but also the
              Web UI metrics API would need to be changed accordingly.
              Unless you've got a real use case that needs that, we
              should be careful.<br>
              <br>
              Regards,<br>
              Michael<br>
              <br>
              <br>
              <div>Am 07.11.22 um 15:00 schrieb Michael Geddes:<br>
              </div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div dir="ltr">I have figured out a bunch of stuff and
                    have implemented the following: (having done away
                    with needing AsFloatUnit)
                    <div><br>
                    </div>
                    <div>OvmsMetrics.Value( {metric} [, {decode}])</div>
                    <div>OvmsMetrics.Value( {metric}, {unit}
                      [,{decode}])</div>
                    <div><br>
                    </div>
                    <div>It turns out that the [decode] flag wasn't
                      working anyway (since the function was being
                      registered as only having 1 param)...</div>
                    <div>This way it is still really 1 function.. but I
                      check it the second parameter is a 'boolean', and
                      if not.. try the second form. </div>
                    <div><br>
                    </div>
                    <div>OvmsMetrics.AsFloat( {metric} [,{unit}] )</div>
                    <div><br>
                    </div>
                    <div>and add the function</div>
                    <div><br>
                    </div>
                    <div>Ovms.Metrics.ValueUnit( {metric} [,{unit}]) </div>
                    <div>This prints the value and the unit.</div>
                    <div><br>
                    </div>
                    <div>Here's a sample function and the output! This
                      also shows the types of the output.</div>
                    <div><br>
                    </div>
                    <div><font face="monospace">(function() {<br>
                           x =
                        OvmsMetrics.Value("xiq.v.trip.consumption");<br>
                           print( (typeof x) + ": "+  x+"\n"  );<br>
                           x =
                        OvmsMetrics.Value("xiq.v.trip.consumption",
                        false);<br>
                           print( (typeof x) + ": "+  x +"\n" );<br>
                           x =
                         OvmsMetrics.Value("xiq.v.trip.consumption","kmpkwh")<br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                           x =
                         OvmsMetrics.Value("xiq.v.trip.consumption",
                        "mipkwh", false) <br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                           x =
                         OvmsMetrics.ValueUnit("xiq.v.trip.consumption")<br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                           x =
                         OvmsMetrics.ValueUnit("xiq.v.trip.consumption","mipkwh")<br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                           x =
                         OvmsMetrics.AsFloat("xiq.v.trip.consumption")<br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                           x =
                         OvmsMetrics.AsFloat("xiq.v.trip.consumption","kmpkwh")<br>
                           print( (typeof x) + ": "+ x +"\n");<br>
                        })();</font><br>
                    </div>
                    <div><br>
                    </div>
                    <div>
                      <pre id="m_5484224439251412587m_-6783916119872647666m_7514939671383041717m_-2249740601380801512gmail-output" style="box-sizing:border-box;overflow:auto;font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;padding:9.5px;margin-top:0px;margin-bottom:10px;line-height:1.42857;color:rgb(0,34,0);word-break:break-all;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px;height:165px;white-space:pre-wrap">number: 17.0582
string: 17.0582
number: 5.86227
string: 3.64264
string: 17.0582kWh/100km
string: 3.64264mi/kWh
number: 17.0582
number: 5.86227</pre>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div>It still might be an idea to use 'null' as a
                      return value if the metrics is<font face="monospace"> !IsDefined() </font><font face="arial, sans-serif">but that would be
                        changing the existing behaviour slightly.</font></div>
                    <div><font face="arial, sans-serif"><br>
                      </font></div>
                    <div><font face="arial, sans-serif">//.ichael</font></div>
                    <div><br>
                    </div>
                  </div>
                  <div class="gmail_quote">
                    <div dir="ltr" class="gmail_attr">On Mon, 7 Nov 2022
                      at 08:12, Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>>
                      wrote:<br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div dir="ltr">I've worked out what the decode
                        flag is for and how it works, and I think how
                        optional params work. <br>
                        <div>I'm pretty sure I won't  need the
                          'AsFloatUnit' function; the unit would be an
                          option to AsFloat(); I'll know that soon.</div>
                        <div><br>
                        </div>
                        <div>The 'Value' function is more complicated
                          because of the optional decode bool. I guess I
                          could add the Unit to the end of that.</div>
                        <div><br>
                        </div>
                        <div>ValueUnit could be still useful then to
                          provide a 'Value + Unit'.</div>
                        <div><br>
                        </div>
                        <div>Question:  Is there a reason we shouldn't
                          be returning with  <span style="color:rgb(220,220,170);background-color:rgb(30,30,30);font-family:Consolas,"Courier New",monospace;font-size:14px;white-space:pre-wrap">duk_push_null</span> 
                            if the metric !IsDefined()  in both
                          AsFloat() and Value(metric,true) cases?</div>
                        <div><br>
                        </div>
                        <div>//.ichael</div>
                      </div>
                      <br>
                      <div class="gmail_quote">
                        <div dir="ltr" class="gmail_attr">On Sun, 6 Nov
                          2022 at 11:22, Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>>
                          wrote:<br>
                        </div>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div dir="ltr">
                            <div>Right, so I've implemented some stuff
                              that seems to work quite well. <br>
                            </div>
                            <div><br>
                            </div>
                            <div><a href="https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/764" target="_blank">https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/764</a> 
                              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).</div>
                            <div><br>
                            </div>
                            <div>The commit that will follow on from
                              that it implements the new Units:
                              kWh/100km, km/kWh  and  mi/kWh.</div>
                            <div><br>
                            </div>
                            <div>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:</div>
                            <div>  * Should some of the longer unit
                              codes be shortened  (eg mi, mins, m, ft,
                              deg, perc)</div>
                            <div>  * The unit codes could be much more
                              re<font face="arial, sans-serif">gular and
                                separated by dots  eg:  </font></div>
                            <div><font face="arial, sans-serif">       
                                watthours -> w.h</font></div>
                            <div><font face="arial, sans-serif">       
                                kwhp100km -> kw.h_100km or kw.h/100km</font></div>
                            <div><font face="arial, sans-serif">       
                                miph ->  mi_h or mi/h  (or should it
                                be mph).</font></div>
                            <div><font face="arial, sans-serif">       
                                psi -> <a href="http://p_in.in/" target="_blank">p_in.in</a>
                                or p/<a href="http://in.in/" target="_blank">in.in</a>
                                or <a href="http://lb_in.in/" target="_blank">lb_in.in</a>
                                (yes, slightly weird, but predictable)</font></div>
                            <div><font face="arial, sans-serif"> </font><br>
                            </div>
                            <b style="font-family:monospace">OVMS#
                              metric units</b><br>
                            <font face="monospace">          km : km</font><br>
                            <font face="monospace">       miles : M</font><br>
                            <font face="monospace">      meters : m</font><br>
                            <font face="monospace">        feet : ft</font><br>
                            <font face="monospace">     celcius : °C</font><br>
                            <font face="monospace">  fahrenheit : °F</font><br>
                            <font face="monospace">         kpa : kPa</font><br>
                            <font face="monospace">          pa : Pa</font><br>
                            <font face="monospace">         psi : psi</font><br>
                            <font face="monospace">       volts : V</font><br>
                            <font face="monospace">        amps : A</font><br>
                            <font face="monospace">    </font>amphours<font face="monospace"> : Ah</font><br>
                            <font face="monospace">          kw : kW</font><br>
                            <font face="monospace">         kwh : kWh</font><br>
                            <font face="monospace">       watts : W</font><br>
                            <font face="monospace">   </font>watthours<font face="monospace"> : Wh</font><br>
                            <font face="monospace">     seconds : Sec</font><br>
                            <font face="monospace">     minutes : Min </font><br>
                            <font face="monospace">       hours : Hour</font><br>
                            <font face="monospace">         utc : UTC</font><br>
                            <font face="monospace">     degrees : °</font><br>
                            <font face="monospace">        kmph : km/h</font><br>
                            <font face="monospace">        </font>miph<font face="monospace"> : Mph</font><br>
                            <font face="monospace">      </font>kmphps<font face="monospace"> : km/h/s</font><br>
                            <font face="monospace">      </font>miphps<font face="monospace"> : Mph/s</font><br>
                            <font face="monospace">        mpss : m/s²</font><br>
                            <font face="monospace">         dbm : dBm</font><br>
                            <font face="monospace">          sq : sq</font><br>
                            <font face="monospace">     percent : %</font><br>
                            <font face="monospace">       whpkm : Wh/km</font><br>
                            <font face="monospace">       </font>whpmi<font face="monospace"> : Wh/mi</font><br>
                            <font face="monospace">   kwhp100km :
                              kWh/100km</font><br>
                            <font face="monospace">      </font>kmpkwh<font face="monospace"> : km/kWh</font><br>
                            <font face="monospace">      </font>mipkwh<font face="monospace"> : mi/kWh</font><br>
                            <font face="monospace">          nm : Nm</font><br>
                            <font face="monospace"><br>
                              <b>OVMS# metric unit mi</b><br>
                                     miles : M<br>
                                   minutes : Min<br>
                                      miph : Mph<br>
                                    miphps : Mph/s<br>
                                     whpmi : Wh/mi<br>
                                    mipkwh : mi/kWh</font><br>
                            <br>
                            <b style="font-family:monospace">OVMS#
                              metric get xiq.v.trip.consumption<br>
                            </b><font face="monospace">17.0597kWh/100km</font><br>
                            <b style="font-family:monospace">OVMS#
                              metric get xiq.v.trip.consumption kpkwh<br>
                            </b><font face="monospace">5.86177km/kWh</font><br>
                            <b style="font-family:monospace">OVMS#
                              metric get xiq.v.trip.consumption mpkwh<br>
                            </b><font face="monospace">3.64233mi/kWh</font><br>
                            <br>
                            <b style="font-family:monospace">OVMS#
                              metric set xiq.c.speed 5 miph<br>
                            </b><font face="monospace">Metric set</font><br>
                            <b style="font-family:monospace">OVMS#
                              metric get xiq.c.speed<br>
                            </b><font face="monospace">8.04673km/h</font><br>
                            <b style="font-family:monospace">OVMS#
                              metric get xiq.c.speed miph<br>
                            </b><font face="monospace">5Mph</font><br>
                            <br>
                            <font face="arial, sans-serif">And then in
                              DukTape - there are some questions I have
                              about the implementation:</font>
                            <div><font face="arial, sans-serif">* Names
                                of functions? Better ideas? </font></div>
                            <div><font face="arial, sans-serif">* Should
                                ValueUnit output the units?</font></div>
                            <div><font face="arial, sans-serif">* In
                                Value() there is the line  </font>  bool
                              decode = duk_opt_boolean(ctx, 1, true);</div>
                            <div>    * What does 'decode' mean here?</div>
                            <div>    * Do I need it for ValueUnit() ?</div>
                            <div><br>
                              <div><b><br>
                                  <font face="monospace">(function() {</font><br>
                                  <font face="monospace">   print(
                                    OvmsMetrics.Value("xiq.v.trip.consumption"));</font><br>
                                  <font face="monospace">   print("\n")</font><br>
                                  <font face="monospace">   print(
                                    OvmsMetrics.ValueUnit("xiq.v.trip.consumption",""));</font><br>
                                  <font face="monospace">   print("\n")</font><br>
                                  <font face="monospace">   print(
                                    OvmsMetrics.ValueUnit("xiq.v.trip.consumption","</font>mipkwh<font face="monospace">"));</font><br>
                                  <font face="monospace">   print("\n")</font><br>
                                  <br>
                                  <font face="monospace">   print(
                                    OvmsMetrics.AsFloatUnit("xiq.v.trip.consumption","</font>kmpkwh<font face="monospace">"));</font><br>
                                  <font face="monospace">})();</font></b><br>
                                <font face="monospace">--- Output ---</font><br>
                                <font face="monospace">17.0597</font><br>
                                <font face="monospace">17.0597kWh/100km</font><br>
                                <font face="monospace">3.64233mi/kWh</font><br>
                                <font face="monospace">5.86177</font><br>
                                <font face="monospace">------</font><br>
                                <br>
                              </div>
                            </div>
                            <div>The basic stuff all works - it's just
                              quibbling over the details.. but let's get
                              them right!</div>
                            <div><br>
                            </div>
                            <div>//.ichael</div>
                          </div>
                          <br>
                          <div class="gmail_quote">
                            <div dir="ltr" class="gmail_attr">On Sat, 5
                              Nov 2022 at 20:09, Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>>
                              wrote:<br>
                            </div>
                            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                              <div dir="ltr">
                                <div>Yeah - this was copied code from
                                  kia/kona and is what triggered these
                                  ideas; I totally agree this shouldn't
                                  be doubled up on.</div>
                                <div><br>
                                </div>
                                <div>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 <span style="font-family:monospace">xiq.v.</span><span style="font-family:monospace">trip.consumption </span>metric
                                  (unless you have some ideas for the
                                  namespace) which will be much neater.</div>
                                <div><br>
                                </div>
                                <div>If it's ok with you then I might do
                                  that unit conversion proposal.</div>
                                <div>Would it ok if the unit
                                  specifications were the same as to the
                                  programatic codes in ovms_metrics.h?</div>
                                <div>(kWh,   WattHours , MetersPSS ) </div>
                                <div>I would probably add a command</div>
                                <div><font face="monospace">metric units</font>
                                  <spec> <br>
                                </div>
                                <div>to list all (matching) units and
                                  their associated Labels.</div>
                                <div><br>
                                </div>
                                <div>//.ichael </div>
                                <div><br>
                                </div>
                                <div class="gmail_quote">
                                  <div dir="ltr" class="gmail_attr">On
                                    Sat, 5 Nov 2022 at 18:48, Michael
                                    Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>>
                                    wrote:<br>
                                  </div>
                                  <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                    <div> Michael,<br>
                                      <br>
                                      adding unit conversion support to
                                      the shell and Duktape commands is
                                      a good idea.<br>
                                      <br>
                                      Metrics are not meant to provide a
                                      user interface, they should be
                                      defined to be efficient and
                                      non-redundant.<br>
                                      <br>
                                      Btw, metrics names also shall not
                                      use upper case characters, and
                                      shall only use "." as a separator.<br>
                                      <br>
                                      Regards,<br>
                                      Michael<br>
                                      <br>
                                      <br>
                                      <div>Am 05.11.22 um 11:22 schrieb
                                        Michael Geddes:<br>
                                      </div>
                                      <blockquote type="cite">
                                        <div dir="ltr">Hi all,<br>
                                          <div>Some of the code I copied
                                            from Kona/Kia code had both
                                            kwh/100km and km/kwh metrics
                                            in the code as 'Other'. </div>
                                          <div>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!</div>
                                          <div>... but it also made me
                                            think these two metrics that
                                            are (with the consumption
                                            units added) defined like
                                            this:  </div>
                                          <div><font face="monospace">m_v_trip_consumption1
                                              =
                                              MyMetrics.InitFloat("xiq.v.trip.consumption.KWh/100km",
                                              10, 0, kWHP100K);<br>
                                              m_v_trip_consumption2 =
                                              MyMetrics.InitFloat("<a href="http://xiq.v.trip.consumption.km/kWh" target="_blank">xiq.v.trip.consumption.km/kWh</a>",
                                              10, 0, kPkWH);<br>
                                            </font></div>
                                          <div><br>
                                          </div>
                                          <div>These are effectively the
                                            same metric but in different
                                            units!</div>
                                          <div>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.</div>
                                          <div><br>
                                          </div>
                                          <div>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.</div>
                                          <div><br>
                                          </div>
                                          <div>I've also got a pull
                                            request that improves the
                                            precision of the
                                            km<->mi conversions
                                            and factors it out.</div>
                                          <div><br>
                                          </div>
                                          <div>//.ichael</div>
                                        </div>
                                        <br>
                                        <fieldset></fieldset>
                                        <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
                                      </blockquote>
                                      <br>
                                      <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
                                    </div>
_______________________________________________<br>
                                    OvmsDev mailing list<br>
                                    <a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
                                    <a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
                                  </blockquote>
                                </div>
                              </div>
                            </blockquote>
                          </div>
                        </blockquote>
                      </div>
                    </blockquote>
                  </div>
                </div>
                <br>
                <fieldset></fieldset>
                <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
              </blockquote>
              <br>
              <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
            </div>
            _______________________________________________<br>
            OvmsDev mailing list<br>
            <a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
            <a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
    </blockquote>
    <br>
    <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
  </div>

</div></div><br></div></div></blockquote></div><br></div>_______________________________________________<br>
OvmsDev mailing list<br>
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
</blockquote></div>
</blockquote></div>