<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    I think this is pretty decent & complete now.<br>
    <br>
    I also like the approach of the 'user' unit code. Moving all user
    unit prefs into the module configuration is an old todo. Currently
    only the distance unit is defined at the module side, temperature
    and pressure are App prefs.<br>
    <br>
    Regards,<br>
    Michael<br>
    <br>
    <br>
    <div class="moz-cite-prefix">Am 11.11.22 um 09:54 schrieb Michael
      Geddes:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAH0p7u+vanL62MSNHZXuvqdjo3eJVFWyGtch9djOLXDFVbvEFA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <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"
            moz-do-not-send="true" class="moz-txt-link-freetext">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><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"
                moz-do-not-send="true" class="moz-txt-link-freetext">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"
                        moz-do-not-send="true"
                        class="moz-txt-link-freetext">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"
                                        moz-do-not-send="true"
                                        class="moz-txt-link-freetext">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"
                                          moz-do-not-send="true"
                                          class="moz-txt-link-freetext">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"
                                                  moz-do-not-send="true"
class="moz-txt-link-freetext">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"
                                                      moz-do-not-send="true"
class="moz-txt-link-freetext">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" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true">p_in.in</a> or p/<a
                                                          href="http://in.in/"
target="_blank" moz-do-not-send="true">in.in</a> or <a
                                                          href="http://lb_in.in/"
target="_blank" moz-do-not-send="true">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" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true">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" moz-do-not-send="true" class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true" class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a><br>
                                                          <a
                                                          href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
rel="noreferrer" target="_blank" moz-do-not-send="true"
                                                          class="moz-txt-link-freetext">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" moz-do-not-send="true" class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">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"
                                        moz-do-not-send="true"
                                        class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a><br>
                                      <a
                                        href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
                                        rel="noreferrer" target="_blank"
                                        moz-do-not-send="true"
                                        class="moz-txt-link-freetext">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" moz-do-not-send="true" class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true"
                class="moz-txt-link-freetext">OvmsDev@lists.openvehicles.com</a><br>
              <a
                href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
                rel="noreferrer" target="_blank" moz-do-not-send="true"
                class="moz-txt-link-freetext">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
            </blockquote>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
  </body>
</html>