<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
First implementation of general cell deviation checking and alerts
is pushed.<br>
<br>
<tt> Vehicle BMS: cell deviations & alerts</tt><tt><br>
</tt><tt> </tt><tt><br>
</tt><tt> Renamed metrics:</tt><tt><br>
</tt><tt> - v.b.c.level.* → v.b.p.level.* (for consistency)</tt><tt><br>
</tt><tt> </tt><tt><br>
</tt><tt> New metrics:</tt><tt><br>
</tt><tt> - v.b.c.(voltage,temp).(dev.max,alert)</tt><tt><br>
</tt><tt> - v.b.p.(voltage,temp).(min,max,avg,stddev,stddev.max)</tt><tt><br>
</tt><tt> </tt><tt><br>
</tt><tt> New configs:</tt><tt><br>
</tt><tt> - vehicle [bms.dev.voltage.warn] -- threshold [V]</tt><tt><br>
</tt><tt> - vehicle [bms.dev.voltage.alert] -- threshold [V]</tt><tt><br>
</tt><tt> - vehicle [bms.dev.temp.warn] -- threshold [°C]</tt><tt><br>
</tt><tt> - vehicle [bms.dev.temp.alert] -- threshold [°C]</tt><tt><br>
</tt><tt> …all optional, default: warn at 120% stddev, alert at
200% stddev</tt><tt><br>
</tt><tt> </tt><tt><br>
</tt><tt> New commands:</tt><tt><br>
</tt><tt> - bms alerts → show cells with warn/alert levels</tt><tt><br>
</tt><br>
<br>
I changed the config scheme hoping a manual configuration normally
isn't necessary with this automatic adaption to the standard
deviation.<br>
<br>
Please check and report if that idea works. If it doesn't, please
report the deviations and necessary threshold levels on your
batteries.<br>
<br>
I also omitted the overall stddev alerts for now, I don't think
those really are necessary, haven't had a single trigger on the
Twizy for this.<br>
<br>
Integration into the web chart page and historical data updates are
still todo.<br>
<br>
Migration for the Twizy battery monitor to the generalized scheme is
in progress.<br>
<br>
Regards,<br>
Michael<br>
<br>
<br>
<div class="moz-cite-prefix">Am 17.11.18 um 11:53 schrieb Mark
Webb-Johnson:<br>
</div>
<blockquote type="cite"
cite="mid:1844F7C2-3572-4F1F-B16E-2F66A8CECD28@webb-johnson.net">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">Short video showing Model S charging;</div>
<div dir="ltr"><br>
</div>
<div dir="ltr"><a href="https://youtu.be/Q4vMPSwBFAo"
moz-do-not-send="true">https://youtu.be/Q4vMPSwBFAo</a></div>
<div dir="ltr"><br>
On 17 Nov 2018, at 6:13 PM, Mark Webb-Johnson <<a
href="mailto:mark@webb-johnson.net" moz-do-not-send="true">mark@webb-johnson.net</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<div dir="ltr">Ok. Will do.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">Now you remind me, bms looks good on iPhone:</div>
<div dir="ltr"><br>
</div>
<div dir="ltr"><image1.jpeg></div>
<div dir="ltr"><br>
On 17 Nov 2018, at 6:08 PM, Michael Balzer <<a
href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
Yes, you can add a new menu to PageMenu_t like that. I
suggest introducing a general tools menu instead of a
specific one, i.e. "PageMenu_Tools".<br>
<br>
To still fit the menu on one line in tablet mode (width
down to 768 px) I suggest moving the Shell into the tools
menu then.<br>
<br>
Go ahead, I'm not working on the web framework at the
moment.<br>
<br>
Regards,<br>
Michael<br>
<br>
<br>
<div class="moz-cite-prefix">Am 17.11.18 um 10:48 schrieb
Mark Webb-Johnson:<br>
</div>
<blockquote type="cite"
cite="mid:E46F474B-C515-454C-B011-7916A84BBA87@webb-johnson.net">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
Twizy code overrides the virtual short name function, so
won’t suffer the issue.
<div class=""><br class="">
</div>
<div class="">I think it is a bug in vehicle factory (as
modifying the vehicle type is reasonable), so fixed it
there. Returning NULL is problematic. It would be so
much easier for everything to return std::string, but
concern is memory consumption and overhead.</div>
<div class=""><br class="">
</div>
<div class="">I’d like to start converting RE TOOLS to
just use the web server. First step is to work out how
to add a menu onto the web server. It seems that
the PageMenu_t is a fixed enum list (and similarly
hard-coded in the web_framework.</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class="">
<div class="">Do I just add a ‘CAN bus’ menu there, by
adding it to PageMenu_t, and supporting it where the
other top level menus are? Or do you have any other
suggestions/plans for this?</div>
<div class=""><br class="">
</div>
<div class="">I don’t want to step on anything you are
working on here.</div>
</blockquote>
<div class="">
<div><br class="">
</div>
<div>The second stage will be to add displays under
that, but I think that is fairly straight forward. I
will mostly be displaying tables, and sending those
over the web socket would be good.</div>
<div><br class="">
</div>
<div>Regards, Mark</div>
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 17 Nov 2018, at 5:37 PM, Michael
Balzer <<a href="mailto:dexter@expeedo.de"
class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">
Mark,<br class="">
<br class="">
nice, thanks.<br class="">
<br class="">
The short name is used for the menu label.
It's meant to fall back to the long name (and
seems to do so in your screenshot), so should
not be null. But I admit I haven't tested it
on a vehicle without a short name.<br class="">
<br class="">
Btw, I'm currently working on the deviations
and alerts.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 17.11.18 um
10:08 schrieb Mark Webb-Johnson:<br class="">
</div>
<blockquote type="cite"
cite="mid:096E607E-ADE6-4780-BB70-C8E5B8A7AC2D@webb-johnson.net"
class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"
class="">
Michael,
<div class=""><br class="">
</div>
<div class="">Looks good. It seems that you
did everything necessary for the Model S
already in your
commit 2a84d861403f48142d6adcc16ad7a20cd458e427:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px;
border: none;
 padding:
 0px;"
class="">
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class="">#include “ovms_webserver.h"</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class=""><br class="">
</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class="">OvmsVehicleTeslaModelS::OvmsVehicleTeslaModelS()</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class="">MyWebServer.RegisterPage("/bms/cellmon",
"BMS cell monitor",
OvmsWebServer::HandleBmsCellMonitor,
PageMenu_Vehicle, PageAuth_Cookie);</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class=""><br class="">
</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class="">OvmsVehicleTeslaModelS::~OvmsVehicleTeslaModelS()</span></font></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size: 14px;"
class="">MyWebServer.DeregisterPage("/bms/cellmon");</span></font></div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">From my devbench, replaying a
CAN CRTD log file, I get this output:<br
class="">
<div class=""><br class="">
</div>
<div class=""><span
id="cid:part1.478CBE5C.50A27CA9@expeedo.de"><PastedGraphic-2.png></span></div>
<div class=""><br class="">
</div>
<div class="">The animation is very nice.</div>
<div class=""><br class="">
</div>
<div class="">I am, however, getting
crashes, as follows:</div>
</div>
<div class="">
<div class=""><br class="">
</div>
</div>
<blockquote style="margin: 0 0 0 40px;
border: none;
 padding:
 0px;"
class="">
<div class="">
<div class="">
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">#
xtensa-esp32-elf-addr2line
-pfiaC -e
3.1.011-25-g2a84d86.ovms3.elf
0x400935d3 0x4009372b 0x400db90c
0x4012c0f7 0x4012d0e1 0x4012d1e0
0x4012ebc1 0x4012ecbd 0x400f8b65
0x400f912d 0x400fa27c 0x400fa29a
0x400f8b65 0x400fa3e3 0x400fa7ad
0x400faa77 0x400f767e 0x400ee40a
0x400ee459</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400935d3:
invoke_abort at
/home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4009372b: abort at
/home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400db90c:
__cxx_fatal_exception_message at
/home/openvehicles/build/esp-idf/components/cxx/cxx_exception_stubs.cpp:19</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4012c0f7: void
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct<char
const*>(char const*, char
const*,
std::forward_iterator_tag) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.tcc:216</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class=""> (inlined by) void
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct_aux<char
const*>(char const*, char
const*, std::__false_type) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:195</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class=""> (inlined by) void
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct<char
const*>(char const*, char
const*) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:214</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class=""> (inlined by)
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::basic_string(char const*,
std::allocator<char>
const&) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:457</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4012d0e1:
OvmsWebServer::CreateMenu[abi:cxx11](PageContext&) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/web_framework.cpp:393</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4012d1e0:
OvmsWebServer::HandleRoot(PageEntry&,
PageContext&) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/web_framework.cpp:510</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4012ebc1:
PageEntry::Serve(PageContext&)
at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/ovms_webserver.cpp:558</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x4012ecbd:
OvmsWebServer::EventHandler(mg_connection*, int, void*) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/ovms_webserver.cpp:558</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400f8b65: mg_call at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400f912d:
mg_http_call_endpoint_handler at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400fa27c:
mg_http_handler2 at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400fa29a:
mg_http_handler at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400f8b65: mg_call at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400fa3e3:
mg_recv_common at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400fa7ad:
mg_if_recv_tcp_cb at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class=""> (inlined by)
mg_handle_tcp_read at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:3723</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class=""> (inlined by)
mg_mgr_handle_conn at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:3844</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400faa77:
mg_socket_if_poll at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400f767e: mg_mgr_poll
at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400ee40a:
OvmsNetManager::MongooseTask()
at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/main/ovms_netmanager.cpp:560</span></font></div>
<div class=""><font class=""
face="Andale Mono"><span
style="font-size: 14px;"
class="">0x400ee459:
MongooseRawTask(void*) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/main/ovms_netmanager.cpp:545</span></font></div>
</div>
</div>
</blockquote>
<div class="">
<div class=""><br class="">
</div>
<div class="">On my development bench
module I get this crash 1 in 4 times or
so. On my real car, 100% of the time.</div>
<div class=""><br class="">
</div>
<div class="">That code path leads
into MyVehicleFactory.ActiveVehicleShortName().
Those should all be ‘const char*’, but
it is possible for NULL to be returned.
I will look into it in more detail.</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
</div>
<div class="">
<blockquote type="cite" class="">
<div class="">On 17 Nov 2018, at 7:35
AM, Michael Balzer <<a
href="mailto:dexter@expeedo.de"
class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"
class="">
<div text="#000000"
bgcolor="#FFFFFF" class=""> Mark,
Tamás,<br class="">
<br class="">
I haven't had the time yet to take
care of the stddev port, but I've
just added the generalized web UI.<br
class="">
<br class="">
Please see git log for details and
send some screenshots.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am
11.11.18 um 16:47 schrieb Mark
Webb-Johnson:<br class="">
</div>
<blockquote type="cite"
cite="mid:C4AAA14F-A53C-47E7-AB38-DC5437F14037@webb-johnson.net"
class="">
<meta http-equiv="Content-Type"
content="text/html;
charset=UTF-8" class="">
OK. I spent some time on this
today, and sent in a first draft
(as a bunch of extensions to
vehicle.{h, cpp}). I migrated
the Tesla Model S code to use
it, and support came down to
just a few simple lines of code.
<div class=""><br class="">
</div>
<div class="">For the moment, I
dropped the idea of
‘readingsperrow’, as I think
that is Tesla Model S
specific, and not really
necessary. Purely
presentational.</div>
<div class=""><br class="">
</div>
<div class="">c++ std::bitset is
fixed size, so that doesn’t
work for us. The
std::vector<bool> seems
a workable alternative, but I
am not really happy with using
std::find as a way of looking
to see if we have everything.
It works as it is, but is not
very optimal. It seems there
should be a better way of
doing that. I think it is a
pretty key feature, given the
broadcast nature of the buses,
to help the vehicle module
know when it has a set of data
ready to commit to metrics, so
will need to think about this
some more.</div>
<div class=""><br class="">
</div>
<div class="">I also implemented
min and max, for voltages and
temperatures. They went in
cleanly. Haven’t tackled
stddev yet (or the
watchers/alerts, overall
aggregates, etc). There is a
very basic ‘bms status’
command implemented.</div>
<div class=""><br class="">
</div>
<div class="">Let me know what
you think of it.</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark</div>
<div class=""><br class="">
<div class="">
<blockquote type="cite"
class="">
<div class="">On 11 Nov
2018, at 5:11 PM,
Michael Balzer <<a
href="mailto:dexter@expeedo.de"
class=""
moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br
class="Apple-interchange-newline">
<div class="">
<meta
http-equiv="Content-Type"
content="text/html;
charset=UTF-8"
class="">
<div text="#000000"
bgcolor="#FFFFFF"
class=""> Mark,<br
class="">
<br class="">
yes, .min & .max
are the minimum and
maximum readings seen
since last battery
monitor reset. The
reset should be
available as…<br
class="">
<ul class="">
<li class="">OvmsVehicle::ResetCellStats();</li>
<li class="">Command:
"vehicle bms
reset" …or just
"bms reset" as we
also have other
vehicle commands
on the root level?<br
class="">
</li>
</ul>
On the Twizy I do an
auto reset each time
the vehicle is turned
on and each time a
charge starts, but
that behaviour should
be controllable by the
vehicle / user.<br
class="">
<br class="">
<br class="">
There's additionally
the overall { .stddev,
.avg } on voltages and
temperatures of the
pack. These and the
cell level statistics
can be calculated by
the framework, so the
vehicle simply needs
to provide the
readings. The
framework needs to
provide a way to reset
the readings
completion bitset,
i.e.<br class="">
<ul class="">
<li class="">OvmsVehicle::RestartCellVoltages();</li>
<li class="">OvmsVehicle::RestartCellTemperatures();</li>
</ul>
…as sometimes readings
get lost, and adding
new to the previous
readings may lead to
an inconsistent view
leading to wrong
standard deviation.<br
class="">
<br class="">
<br class="">
Speaking of standard
deviation, the
framework should also
provide warnings and
alerts flags. On the
Twizy it does so by
checking deviation
thresholds, and
there's a general
stddev warn &
alert threshold to
detect overall
condition and two
alert thresholds on
the cell level, one
for normal stddev and
one for stddev alert
mode. Warning flags on
the cell level are set
when the cell
deviation is above
stddev. On the Twizy
these thresholds are
currently fixed to…<br
class="">
<blockquote class=""><tt
class="">//
Battery cell/cmod
deviation alert
thresholds:</tt><br
class="">
<tt class="">#define
BATT_DEV_TEMP_ALERT 3 // = 3 °C</tt><br class="">
<tt class="">#define
BATT_DEV_VOLT_ALERT 6 // = 30 mV</tt><br class="">
<br class="">
<tt class="">//
...thresholds for
overall stddev:</tt><br
class="">
<tt class="">#define
BATT_STDDEV_TEMP_WATCH 2 // = 2 °C</tt><br class="">
<tt class="">#define
BATT_STDDEV_TEMP_ALERT 3 // = 3 °C</tt><br class="">
<tt class="">#define
BATT_STDDEV_VOLT_WATCH 3 // = 15 mV</tt><br class="">
<tt class="">#define
BATT_STDDEV_VOLT_ALERT 5 // = 25 mV</tt><br class="">
</blockquote>
…these are good
defaults for the Twizy
43 Ah pouch cells, but
may be too low for an
18650 pack, and will
especially not fit
cheap LFP type cells.
So these should be
configurable, i.e.<br
class="">
<ul class="">
<li class="">vehicle
bms.dev.temp.alert
[°C]</li>
<li class="">vehicle
bms.dev.voltage.alert [V]</li>
<li class="">vehicle
bms.stddev.temp.watch [°C]</li>
<li class="">vehicle
bms.stddev.temp.alert [°C]</li>
<li class="">vehicle
bms.stddev.voltage.watch [V]</li>
<li class="">vehicle
bms.stddev.voltage.alert [V]</li>
</ul>
I can generalize the
Twizy code for all of
this.<br class="">
<br class="">
<br class="">
The Twizy battery
monitoring command set
is:<br class="">
<blockquote class=""><tt
class="">OVMS# xrt
batt ?</tt><br
class="">
<tt class="">data-cell
Output cell record</tt><br
class="">
<tt class="">data-pack
Output pack record</tt><br
class="">
<tt class="">reset
Reset alerts &
watches</tt><br
class="">
<tt class="">status
Status report</tt><br
class="">
<tt class="">tdev
Show temperature
deviations</tt><br
class="">
<tt class="">temp
Show temperatures</tt><br
class="">
<tt class="">vdev
Show voltage
deviations</tt><br
class="">
<tt class="">volt
Show voltages</tt><br
class="">
</blockquote>
The "data" commands
provide the server
historical records
output. The other
commands originate
from the V2 and have
been designed to keep
the output within the
SMS msg size limit.<br
class="">
<br class="">
"status" gives an
operative overview of
the standard and max
deviation levels of
cells with warning or
alert status. "volt",
"vdev", "temp" and
"tdev" show all cells.<br
class="">
<br class="">
The Twizy generates a
battery alert
notification from the
"status" output
whenever some cell
alert flag is set.<br
class="">
<br class="">
<br class="">
The Twizy server
records also originate
from the V2 limits,
and can now better be
changed to vectors.
I've just finished a
virtual dynamometer on
the Twizy, sending a
vector metric to the
server is just a
matter of…<br class="">
<blockquote class=""><tt
class="">std::string
msg =
"RT-ENG-MotTrqDrv,0,86400,";</tt><br
class="">
<tt class="">msg.append(m_mon.m_mot_torque_drv->AsString());</tt><br
class="">
<tt class="">MyNotify.NotifyString("data",
"xrt.pwr.mon",
msg.c_str());</tt><br
class="">
</blockquote>
Neat.<br class="">
<br class="">
The Twizy sends server
records once per
minute during
drive/charge. The
server update
frequency should
become tunable as
well, as that would be
a lot of additional
data volume on large
packs.<br class="">
<br class="">
<br class="">
The Twizy layout may
be either…<br class="">
<ul
class="MailOutline">
<li class="">14 cell
groups in the pack</li>
<li class="">2 cell
groups in each
module</li>
<li class="">7
modules in the
pack</li>
<li class="">Each
cell group has 1
voltage
measurement (so,
14 individual
voltage
measurements)</li>
<li class="">Each
module has 1
temperature
measurements (so,
7 individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(14,
2, 7)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(7,
1, 7)</li>
</ul>
</ul>
<p class="">…for the
original battery, or
for an LFP type
replacement…</p>
<ul
class="MailOutline">
<li class="">16 cell
groups in the pack</li>
<li class="">16 cell
groups in each
module</li>
<li class="">1
module in the pack</li>
<li class="">Each
cell group has 1
voltage
measurement (so,
16 individual
voltage
measurements)</li>
<li class="">Each
module has 3
temperature
measurements (so,
3 individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(16,
16, 8)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(3,
3, 3)</li>
</ul>
</ul>
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div
class="moz-cite-prefix">Am
11.11.18 um 08:10
schrieb Mark
Webb-Johnson:<br
class="">
</div>
<blockquote
type="cite"
cite="mid:88AF6B7B-37D7-4698-97CD-43B6E481DBF0@webb-johnson.net"
class="">
<meta
http-equiv="Content-Type"
content="text/html; charset=UTF-8" class="">
Looking at the
discussion with
Michael back in May,
we came to some
conclusions for
this. I was happy
back then with using
‘cell’ rather than
‘module’ as the
naming, because (a)
we are talking about
cell/brick/module
level here, not
pack, and (b) it is
shorter. It seems
that the twizy has:
<div class=""><br
class="">
</div>
<blockquote
style="margin: 0
0
 0
40px;

border:

none;

padding:


0px;" class="">
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class="">xrt.b.cell.01.volt.act
3.995V</tt><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><br
class="">
</tt><tt
style="background-color:


rgb(255,
255,


255);"
class="">xrt.b.cell.01.volt.max
4.12V</tt><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><br
class="">
</tt><tt
style="background-color:


rgb(255,
255,


255);"
class="">xrt.b.cell.01.volt.maxdev
0.01V</tt><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><br
class="">
</tt><tt
style="background-color:


rgb(255,
255,


255);"
class="">xrt.b.cell.01.volt.min
3.795V</tt><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><br
class="">
</tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class="">...</tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class="">xrt.b.cell.cnt
14</tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class="">...</tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class="">xrt.b.cmod.01.temp.act
17°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.cmod.01.temp.max
23°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.cmod.01.temp.maxdev
1°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.cmod.01.temp.min
16°C</tt></tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class="">...</tt></tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class="">xrt.b.cmod.cnt
7</tt></tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class="">...</tt></tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class=""><tt
class="">xrt.b.pack.1.temp.alerts</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.temp.max
23°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.temp.min
16°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.temp.stddev.max
1°C</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.temp.watches</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.volt.alerts</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.volt.max
57.6V</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.volt.min
52.8V</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.volt.stddev.max
0.005V</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.pack.1.volt.watches
1,2,4,5,6,7,11,12,14</tt><tt class=""><br class="">
</tt><tt
class="">xrt.b.pack.cnt
1</tt></tt></tt></div>
<div class=""><tt
style="background-color:

 rgb(255,
 255,
 255);"
class=""><tt
class=""><tt
class="">...<br
class="">
</tt><tt
class="">xrt.b.soc.max
100%</tt><tt
class=""><br
class="">
</tt><tt
class="">xrt.b.soc.min
69.78%</tt></tt></tt></div>
</blockquote>
<div class="">
<div class=""><br
class="">
</div>
<div class="">Trying
to come up with
a standard
representation
for this (so
everyone can use
a shared
library, and
share output
displays), that
works across all
vehicles...
Assuming we have
one-dimensional
arrays for
different types
of measurement
(for voltage,
temperature,
etc),
measurements are
taken at the
group of cells
level (with
perhaps
different
groupings for
different
readings), and
aggregations/limits
being
automatically
calculated, I
think this has:</div>
<div class=""><br
class="">
</div>
<div class="">
<ol
class="MailOutline">
<li class="">v.b.c.voltage<br
class="">
<br class="">
Vector<float> metric type array of voltage measurements<br
class="">
<br class="">
</li>
<li class="">v.b.c.temp<br
class="">
<br class="">
Vector<float> metric type array of temperature measurements<br
class="">
<br class="">
</li>
<li class="">Aggregations
/ limits<br
class="">
<br class="">
We could have
v.b.c.voltage.min, v.b.c.voltage.max, v.b.c.voltage.maxdev,
v.b.c.temp.min,
v.b.c.temp.max, and v.b.c.temp.maxdev if we wanted to store these.
Presumably
they could be
automatically
calculated? I
am guessing
‘min’ is the
minimal value
seen, and
‘max’ the
maximum?<br
class="">
<br class="">
</li>
<li class="">Setting
as a batch<br
class="">
<br class="">
The way I’ve
implemented
the Model S is
to keep a
bitmap of
values set.
For example,
say we have 32
cell voltage
measurements.
Every time we
set a voltage
measurement,
we set the
appropriate
bit. When the
bitmap is
full, zero the
bitmap, then
set the metric
in bulk
(setting the
entire
vector). That
seems to work
well for Model
S at least.
The
aggregations/limits
would be
calculated
(and set) when
the batch is
ready. I
suggest
something
like:<br
class="">
<br class="">
</li>
<ul class="">
<li class="">OvmsVehicle::SetCellVoltage(int
index, float
value);</li>
<li class="">OvmsVehicle::SetCellTemperature(int
index, float
value);<br
class="">
<br class="">
</li>
</ul>
<li class="">Arrangement<br
class="">
<br class="">
My thinking is
that the count
of
measurements
available can
be defined
when the
module
initialises.
We can also
simply count
the size of
the vectors,
to know that.
The issue is
the
cell/brick/module/pack
arrangement;
How many
voltage or
temperature
measurements
per module,
how many
modules in the
pack, etc. I
think we need
to tell the
system (a) the
number of
readings
expected, (b)
the number of
readings per
module, and
(c) a hint to
say how many
readings to
show per row.
I suggest
something
like:<br
class="">
<br class="">
</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(int
readings, int
readingspermodule, int readingsperrow)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(int
readings, int
readingspermodule, int readingsperrow)<br class="">
<br class="">
</li>
</ul>
<li class="">Commands<br
class="">
<br class="">
Once the above
is defined we
can have a
‘vehicle bms
status’
command to
show the
status (like
the Tesla
Model S one
shown here,
albeit more
polished):</li>
</ol>
</div>
<div class=""><br
class="">
</div>
</div>
<blockquote
style="margin: 0
0
 0
40px;

border:

none;

padding:


0px;" class="">
<div class="">
<div class="">
<div class=""> <font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 1 |
3.981 V |
3.981 V |
3.981 V | 29.5
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.981 V | 30.3
C Max</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 2 |
3.981 V |
3.981 V |
3.982 V | 29.4
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.981 V | 29.8
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 3 |
3.982 V |
3.982 V |
3.981 V | 29.1
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.982 V | 29.7
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 4 |
3.982 V |
3.982 V |
3.982 V | 28.9
C Min</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.982 V |
3.982 V | 29.7
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 5 |
3.982 V |
3.982 V |
3.982 V | 29.0
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.981 V |
3.981 V | 29.6
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 6 |
3.982 V |
3.982 V |
3.982 V | 29.3
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.982 V |
3.982 V | 29.6
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 7 |
3.981 V |
3.981 V |
3.981 V | 29.0
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.981 V | 29.6
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 8 |
3.982 V |
3.983 V |
3.982 V | 29.2
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.983 V |
3.982 V |
3.982 V | 29.9
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> 9 |
3.982 V |
3.982 V |
3.981 V | 30.0
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.981 V |
3.981 V | 29.7
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">10 |
3.979 V |
3.980 V |
3.979 V | 29.1
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.980 V |
3.979 V |
3.979 V | 29.8
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">11 |
3.980 V |
3.981 V |
3.981 V | 29.1
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.981 V | 29.4
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">12 |
3.981 V |
3.982 V |
3.981 V | 29.1
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.981 V |
3.981 V |
3.982 V | 29.3
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">13 |
3.982 V |
3.983 V |
3.982 V | 28.9
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.982 V |
3.982 V | 29.4
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">14 |
3.981 V |
3.982 V |
3.982 V | 29.3
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.982 V |
3.982 V | 29.5
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">15 |
3.981 V |
3.982 V |
3.981 V | 29.6
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.981 V |
3.981 V | 29.9
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">16 |
3.982 V |
3.982 V |
3.982 V | 29.5
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""> |
3.982 V |
3.981 V |
3.981 V | 29.8
C</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
-------------------------------</span></font></div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class="">
Tmin: 28.9
Tmax: 30.3
Vmax: 3.983
Vmin: 3.979
Vmax-Vmin:
0.003 Vtot:
382.23</span></font></div>
</div>
</div>
<div class=""><font
class=""
face="Andale
Mono"><span
style="font-size:

14px;"
class=""><br
class="">
</span></font></div>
<div class="">Another
variant of this
display would
be:</div>
<div class=""><br
class="">
</div>
<div class="">
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> 1 |
3.981 V |
3.981 V |
3.981 V | </span></font><span
style="font-family:

 "Andale
 Mono";


font-size:
14px;"
class="">3.981
V | 3.981 V |
3.981 V </span><font
class=""
face="Andale


Mono"><span
style="font-size:

14px;"
class="">|
29.5 C. </span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">30.3
C Max |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> 2 |
3.981 V |
3.981 V |
3.982 V | </span></font><span
style="font-family:

 "Andale
 Mono";


font-size:
14px;"
class="">3.981
V | 3.981 V |
3.981 V | </span><font
class=""
face="Andale


Mono"><span
style="font-size:

14px;"
class="">29.4
C </span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">29.8
C |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><span
style="font-size:

 14px;

 font-family:



"Andale
 Mono";" class=""> 3 | 3.982 V | 3.982 V | 3.981 V
| </span><span
style="font-family:
 "Andale

 Mono";


font-size:
14px;"
class="">3.981
V | 3.981 V |
3.982 V | </span><span
style="font-size:
 14px;


 font-family:


"Andale


Mono";"
class="">29.1
C </span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">29.7
C |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><span
style="font-size:

 14px;

 font-family:



"Andale
 Mono";" class=""> 4 | 3.982 V | 3.982 V | 3.982 V
| </span><span
style="font-family:
 "Andale

 Mono";


font-size:
14px;"
class="">3.981
V | 3.982 V |
3.982 V | </span><span
style="font-size:
 14px;


 font-family:


"Andale


Mono";"
class="">28.9
C Min </span><span
style="font-family:

 "Andale


Mono";



font-size:
14px;"
class="">29.7
C |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> 5 |
3.982 V |
3.982 V |
3.982 V | </span></font><span
style="font-family:

 "Andale
 Mono";


font-size:
14px;"
class="">3.982
V | 3.981 V |
3.981 V | </span><font
class=""
face="Andale

Mono"><span
style="font-size:


14px;"
class="">29.0
C </span></font><span
style="font-family:
 "Andale

 Mono";


font-size:
14px;"
class="">29.6
C |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class="">...</div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class="">16 |
3.982 V |
3.982 V |
3.982 V | </span></font><span
style="font-family:

 "Andale
 Mono";


font-size:
14px;"
class="">3.982
V | 3.981 V |
3.981 V | </span><font
class=""
face="Andale


Mono"><span
style="font-size:

14px;"
class="">29.5
C </span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">29.8
C. |</span></div>
<div class=""> <font
class=""
face="Andale

Mono"><span
style="font-size:

14px;"
class=""> -------------------------------</span></font><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">-------------------------------</span><span
style="font-family:
 "Andale

 Mono";


font-size:



14px;"
class="">--------------------</span></div>
<div class=""><span
style="font-size:

 14px;

 font-family:



"Andale
 Mono";" class=""> Tmin: 28.9 Tmax: 30.3 Vmax:
3.983 Vmin:
3.979
Vmax-Vmin:
0.003 Vtot:
382.23</span></div>
</div>
<div class=""><span
style="font-size:

 14px;

 font-family:



"Andale
 Mono";" class=""><br class="">
</span></div>
<div class="">(The
vehicle itself
having the
control via the
SetCellArrangement methods)</div>
</blockquote>
<div class="">
<div class=""><br
class="">
</div>
<div class="">To
provide a
baseline usage
case, the Tesla
Model S has:</div>
<div class=""><br
class="">
</div>
<div class="">
<ul
class="MailOutline">
<li class="">96
bricks in the
pack</li>
<li class="">6
bricks in each
module</li>
<li class="">16
modules in the
pack</li>
<li class="">Each
brick has one
voltage
measurement
(so, 96
individual
voltage
measurements)</li>
<li class="">Each
module has two
temperature
measurements
(so, 32
individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(96,
6, 3)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(32,
2, 1)</li>
</ul>
</ul>
<div class=""><br
class="">
</div>
<div class="">Tesla
Model X seems
identical to
Model S.</div>
<div class=""><br
class="">
</div>
<div class="">I
am still
working on
reverse
engineering
the Tesla
Roadster, but
it seems to
have:</div>
<div class=""><br
class="">
</div>
<div class="">
<ul
class="MailOutline">
<li class="">99
bricks in the
pack</li>
<li class="">9
bricks in each
module (aka
sheet)</li>
<li class="">11
modules in the
pack</li>
<li class="">Each
brick has one
voltage
measurement
(so, 11*9 = 99
individual
voltage
measurements)</li>
<li class="">Each
module has
four
temperature
measurements
(so, 11*4 = 44
individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(99,
9, 9)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(44,
4, 4)</li>
</ul>
</ul>
</div>
<div class=""><br
class="">
</div>
<div class="">For
other cars
that support
cell-level
measurements,
do they fit
this
representation?
If so, can we
fill in the
following for
each car, to
see how it
fits in?</div>
<div class=""><br
class="">
</div>
<div class="">
<ul
class="MailOutline">
<li class="">XX
cell groups in
the pack</li>
<li class="">XX
cell groups in
each module</li>
<li class="">XX
modules in the
pack</li>
<li class="">Each
cell group has
one voltage
measurement
(so, XX
individual
voltage
measurements)</li>
<li class="">Each
module has
four
temperature
measurements
(so, XX
individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(N,
Y, Z)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(N,
Y, Z)</li>
</ul>
</ul>
<div class=""><br
class="">
</div>
<div class="">If
they don’t
fit, what
changes are
needed to make
it work?</div>
<div class=""><br
class="">
</div>
<div class="">Regards,
Mark.</div>
</div>
<div class=""><br
class="">
<blockquote
type="cite"
class="">
<div class="">On
11 Nov 2018,
at 12:16 AM,
Mark
Webb-Johnson
<<a
href="mailto:mark@webb-johnson.net"
class=""
moz-do-not-send="true">mark@webb-johnson.net</a>>
wrote:</div>
<br
class="Apple-interchange-newline">
<div class="">
<div class="">I
originally
thought
‘brick’, or
‘module’
rather than
‘cell’, but
happy with
either. These
are readings
for groups of
cells, rather
than whole
pack.<br
class="">
<br class="">
Tesla Model S
is 16 modules.
6 voltage
readings, and
2
temperatures,
per module.<br
class="">
<br class="">
What is Kia
Soul
arrangement?<br
class="">
<br class="">
Regards, Mark<br
class="">
<br class="">
<blockquote
type="cite"
class="">On 10
Nov 2018, at
11:26 PM,
Henrik Scheel
<<a
href="mailto:henrik.scheel@spjeldager.dk"
class=""
moz-do-not-send="true">henrik.scheel@spjeldager.dk</a>>
wrote:<br
class="">
<br class="">
Hi Mark.<br
class="">
<br class="">
Good idea with
a generic
array type
metric, and
standard
metrics for
common EV
features!<br
class="">
<br class="">
Just a quick
note:<br
class="">
The Kia Soul
EV vehicle
module will be
able to
utilize these
metric-arrays.
However, on
the Soul, the
voltages are
for each
physical pair
of cells
connected in
parallel, and
the
temperatures
are for 6
battery
modules, and
for the
battery
cooling air
inlet. <br
class="">
<br class="">
So, for the
Kia Soul EV,
the name
“v.b.cell.temp”
would be
misleading, as
each measured
module
temperature is
representing
the state for
16 pairs of
cells.<br
class="">
<br class="">
Aside from
that, I am all
for mapping
the values in
these new
standardized
metric types.
Currently, the
temperature
average is
calculated and
mapped to a
metric, and
the 96 cell
voltages are
unmapped for
Kia Soul EV.<br
class="">
<br class="">
Best regards,<br
class="">
Henrik<br
class="">
-- <br
class="">
<br class="">
Venlig hilsen
/ best regards
<br class="">
Henrik R.
Scheel<br
class="">
<br class="">
Spjeldager
Consult ApS<br
class="">
Spjeldager 9 <br
class="">
DK-2630
Taastrup <br
class="">
CVR: 34491399
<br class="">
T: +45 2720
9828 <br
class="">
<a
href="http://www.spjeldager.dk/"
class=""
moz-do-not-send="true">http://www.spjeldager.dk/</a><br
class="">
<br class="">
<blockquote
type="cite"
class="">Den
10. nov. 2018
kl. 15.34
skrev <a
class="moz-txt-link-abbreviated"
href="mailto:ovmsdev-request@lists.openvehicles.com"
moz-do-not-send="true">ovmsdev-request@lists.openvehicles.com</a>:<br
class="">
<br class="">
Send OvmsDev
mailing list
submissions to<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:ovmsdev@lists.openvehicles.com" moz-do-not-send="true">ovmsdev@lists.openvehicles.com</a><br
class="">
<br class="">
To subscribe
or unsubscribe
via the World
Wide Web,
visit<br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
or, via email,
send a message
with subject
or body 'help'
to<br class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:ovmsdev-request@lists.openvehicles.com"
moz-do-not-send="true">ovmsdev-request@lists.openvehicles.com</a><br
class="">
<br class="">
You can reach
the person
managing the
list at<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:ovmsdev-owner@lists.openvehicles.com"
moz-do-not-send="true">ovmsdev-owner@lists.openvehicles.com</a><br
class="">
<br class="">
When replying,
please edit
your Subject
line so it is
more specific<br
class="">
than "Re:
Contents of
OvmsDev
digest..."<br
class="">
<br class="">
<br class="">
Today's
Topics:<br
class="">
<br class="">
1. Re: Custom
metrics (Mark
Webb-Johnson)<br
class="">
<br class="">
<br class="">
----------------------------------------------------------------------<br
class="">
<br class="">
Message: 1<br
class="">
Date: Sat, 10
Nov 2018
22:34:46 +0800<br
class="">
From: Mark
Webb-Johnson <a
class="moz-txt-link-rfc2396E" href="mailto:mark@webb-johnson.net"
moz-do-not-send="true"><mark@webb-johnson.net></a><br
class="">
To: OVMS
Developers <a
class="moz-txt-link-rfc2396E"
href="mailto:ovmsdev@lists.openvehicles.com"
moz-do-not-send="true"><ovmsdev@lists.openvehicles.com></a><br
class="">
Subject: Re:
[Ovmsdev]
Custom metrics<br
class="">
Message-ID: <a
class="moz-txt-link-rfc2396E"
href="mailto:1E30255B-5CC6-4EC4-BA9F-9CA41D156B11@webb-johnson.net"
moz-do-not-send="true"><1E30255B-5CC6-4EC4-BA9F-9CA41D156B11@webb-johnson.net></a><br
class="">
Content-Type:
text/plain;
charset="utf-8"<br
class="">
<br class="">
I?ve added
UnregisterCommand()
methods to
ovms_command.{h,
cpp}. I?ve
also updated
the
vehicle_teslamodels
code to
UnregisterCommand
in the
destructor. I
think that is
cleaner. The
unregistering
of CAN buses
already seems
to be working
properly,
config
parameters
should persist
(even without
vehicle module
loaded). I am
still
considering
the situation
with metrics
(but tend to
think that
they should
disappear when
the vehicle
module is
unloaded).<br
class="">
<br class="">
I?ve also
changed the
vehicle_teslamodels
code to use
single voltage
and temperate
metric arrays
(I think my
previous dual
voltage
temperature
arrangement
was
incorrect). I
think these
can now become
standard
metrics (one
for battery
voltage, and
another for
temperature).
How about
v.b.cell.voltage
and
v.b.cell.temp?
The
interpretation
of those
vectors (how
many modules
primarily -
with the
calculation of
voltages and
temperatures
per module
being
dependent on
the realtime
size of each
array) will
still be
vehicle
dependent, and
I guess the
vehicle module
can provide
hints to our
standard
component for
this. Perhaps
we can just
implement it
in vehicle.{h,
cpp}? I think
this standard
module can
deal with:<br
class="">
<br class="">
An interface
for specific
vehicle module
to specify the
number of
modules,
number of
voltage
measurements,
and number of
temperature
measurements
available.<br
class="">
Internal
storage of
cell voltages
and
temperatures.<br
class="">
Tracking of
when all
voltages and
temperatures
have been set,
and these
should be
written to
metrics (as a
transaction).<br
class="">
Standardised
command to
display on
terminal (like
?xts bms?).<br
class="">
Web interface
extensions
(including the
charting you
have, a
textual
display, etc).<br
class="">
<br class="">
I can handle
all of the
above, except
the web
interface.
What do you
think? Can
these be
standardised?
Certainly for
Tesla Roadster
and Tesla
Model S they
appear to be
able to be
unified under
one standard
framework.<br
class="">
<br class="">
Regards, Mark.<br
class="">
<br class="">
<blockquote
type="cite"
class="">On 8
Nov 2018, at
6:49 AM,
Michael Balzer
<a
class="moz-txt-link-rfc2396E"
href="mailto:dexter@expeedo.de" moz-do-not-send="true"><dexter@expeedo.de></a>
wrote:<br
class="">
<br class="">
Mark,<br
class="">
<br class="">
1) yes, we're
approaching a
generic form
now. The chart
currently
displays
actual, min
& max
values from
the arrays,
and derives
the overall
average value.
It
automatically
adapts to the
number of
voltages and
temperatures
stored in the
arrays.<br
class="">
<br class="">
It still
lacks:<br
class="">
a) Displaying
max
deviations,
current
standard
deviation and
max standard
deviation
recorded.<br
class="">
b) Displaying
cell/module
warn &
alert status.
These are
currently set
metrics on the
Twizy, could
better be
generalized as
arrays as
well, i.e.
0=normal,
1=warn,
2=alert.<br
class="">
c) SOH /
capacity and
internal
resistance
should be
generally
available per
cell as well
(no data on
these yet on
the Twizy).<br
class="">
<br class="">
And as this
will visually
overload the
chart it will
need some
buttons to
show/hide the
parts.<br
class="">
<br class="">
A general
vehicle base
support for
these metrics
could
automatically
keep min &
max values,
calculate
deviations and
derive
warn/alert
status from
these. So
basically a
vehicle
adapter only
needs to
provide
voltages and
temperatures
(+ SOH and
internal
resistance as
available).
The reset
command then
can also
normally just
be a
generalized
version.<br
class="">
<br class="">
2) I should
add some basic
documentation
on this to the
developer
manual
(lacking
time). For the
RE tools I've
got an API to
inject
arbitrary data
into the
websocket
stream on my
todo list, so
live updates
can be
transported
without
polling.<br
class="">
<br class="">
4) Interesting
idea, similar
to a reverse
proxy. As the
channel will
be very slow
we will need
to reduce the
websocket
update
frequency,
make it
configurable
or maybe
auto-adapt to
the current
speed. Also,
the proxy
should cache
static assets
to speed up
first time
connects.<br
class="">
<br class="">
The v2
protocol using
RC4 encryption
is a bad base
for this.
What's the
current
encryption on
v3/MQTT?<br
class="">
<br class="">
Regards,<br
class="">
Michael<br
class="">
<br class="">
<br class="">
<blockquote
type="cite"
class="">Am
07.11.18 um
01:50 schrieb
Mark
Webb-Johnson:<br
class="">
Some
questions/comments:<br
class="">
<br class="">
I guess this
is fairly
generic.
Voltages and
temperatures,
with possibly
a different
number of
readings for
each. Model S
has two
temperatures,
but I guess we
can just treat
those as
interleaved.
Could it be
put into a
reusable
component? Or
could we have
standard
metrics for
this now
(battery
module
voltages and
temperatures)?
Maybe a single
component that
does all this
(functions to
set individual
voltages and
temperatures,
define the
layout for
display,
include web
interface for
chart and
table, etc)?<br
class="">
<br class="">
I really need
to look at
integration of
extensions to
the web
interface. See
how that is
done. For my
work on DBC
and RE tools,
it seems
easiest to
just create a
web interface
(rather than
messing around
with command
line).<br
class="">
<br class="">
Regarding the
registration
of commands
and metrics, I
am not sure if
that is done
correctly at
the moment. In
particular in
the case a
vehicle module
is loaded,
unloaded, then
loaded again.
It seems that
RegisterCommand doesn?t do it right, and the metric object creation
needs a guard
to make sure
the metric
doesn?t
already exist.
I will try to
tidy this up
in Model S
code, as a
reference,
before moving
on to
Roadster.<br
class="">
<br class="">
I really
haven?t used
the web
interface
much, as it is
not available
over cellular.
I was
wondering if
it could be
encapsulated
somehow within
the v2/v3
protocol, and
made available
via the
server?
Something like
<a
class="moz-txt-link-freetext"
href="https://api.openvehicles.com:8080/VEHICLEID"
moz-do-not-send="true">https://api.openvehicles.com:8080/VEHICLEID</a>
<a
class="moz-txt-link-rfc2396E"
href="https://api.openvehicles.com:8080/VEHICLEID"
moz-do-not-send="true"><https://api.openvehicles.com:8080/VEHICLEID></a>
tunnelled
through (with
authentication
at the server
level using
the normal web
server user
account).
Similarly for
SSH access.
These are both
simple tcp/ip
connections,
so presumably
could be
injected into
mongoose as
fake
connections.
One possible
approach would
be SOCKS, and
there is some
reference code
for LWIP <a
class="moz-txt-link-rfc2396E"
href="https://github.com/russdill/lwip/commit/dfeba616"
moz-do-not-send="true"><https://github.com/russdill/lwip/commit/dfeba616></a>.
Another is
TUN/TAP, again
with reference
code for LWIP
<a
class="moz-txt-link-rfc2396E"
href="https://github.com/russdill/lwip/commit/47ca42f8"
moz-do-not-send="true"><https://github.com/russdill/lwip/commit/47ca42f8></a>.
And then there
is the
standard PPP
(although that
would
technically
then be PPP
within tcp/ip
over PPP
within async
within GSM,
which is a bit
freaky).<br
class="">
<br class="">
Regards, Mark.<br
class="">
<br class="">
<blockquote
type="cite"
class="">On 7
Nov 2018, at
4:52 AM,
Michael Balzer
<<a
class="moz-txt-link-abbreviated"
href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:dexter@expeedo.de" moz-do-not-send="true"><mailto:dexter@expeedo.de></a>>
wrote:<br
class="">
<br class="">
Mark, Tam?s,<br
class="">
<br class="">
I've prepared
a more or less
generalized
array version
of my Twizy
battery chart
(OvmsVehicleRenaultTwizy::WebBattMon) for you. Easier to collect the
data from
actual arrays
than separate
metrics.<br
class="">
<br class="">
This ZIP?<br
class="">
<br class="">
<a
class="moz-txt-link-freetext"
href="https://dexters-web.de/f/ovms-dev/ovms.zip" moz-do-not-send="true">https://dexters-web.de/f/ovms-dev/ovms.zip</a>
<a
class="moz-txt-link-rfc2396E"
href="https://dexters-web.de/f/ovms-dev/ovms.zip" moz-do-not-send="true"><https://dexters-web.de/f/ovms-dev/ovms.zip></a><br
class="">
<br class="">
?contains my
local ovms web
test/development folder. Unzip it into some local web server (needs to
be run via
http for
javascript),
then open the
folder from a
browser. You
should see an
OVMS web UI
lookalike.<br
class="">
<br class="">
Config ?
CellChart
loads
"cellchart.htm".
The blue
button
generates and
injects test
data. Should
look like
this:<br
class="">
<br class="">
<eoibkbnkbpofdlab.png><br class="">
<br class="">
Assuming
you'll add
some min/max
records as
well I left
that code
including the
reset button
in there. If
you can't
provide that
yet, you can
simply set min
& max =
act in the
get_xxx_data
functions.
Other than
that you
should
basically just
need to change
the metrics
names.<br
class="">
<br class="">
To generate
C/C++ syntax
from the file,
use the script
bin/mksrc:
"bin/mksrc
cellchart.htm
>cellchart.cpp". The chart init URL needs to be changed for the
production
environment
(see comment),
and the test
data generator
can be
removed. See
OvmsVehicleRenaultTwizy::WebBattMon for reference.<br class="">
<br class="">
Maybe I should
add that stuff
to the
repository as
well?<br
class="">
<br class="">
Regards,<br
class="">
Michael<br
class="">
<br class="">
<br class="">
<blockquote
type="cite"
class="">Am
06.11.18 um
15:56 schrieb
Mark
Webb-Johnson:<br
class="">
Nice. I just
implemented
this for Model
S using your
new metric
type.<br
class="">
<br class="">
96 individual
brick voltages
for each of
the bricks,
plus two
temperatures
for each of
the 16
modules.<br
class="">
<br class="">
Works well.<br
class="">
<br class="">
<br class="">
<br class="">
<br class="">
<blockquote
type="cite"
class="">On 1
Nov 2018, at
5:58 PM,
Michael Balzer
<<a
class="moz-txt-link-abbreviated"
href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:dexter@expeedo.de" moz-do-not-send="true"><mailto:dexter@expeedo.de></a>>
wrote:<br
class="">
<br class="">
Tam?s,<br
class="">
<br class="">
I've been
creating
separate
metrics for
all cell
values on the
Twizy, but
that only has
14 cells.<br
class="">
<br class="">
We discussed
this before, a
better
approach is
introducing a
new metric
class for
arrays. I have
just done that
for you,
please pull.<br
class="">
<br class="">
Usage example:<br
class="">
OvmsMetricVector<float>* vf = new
OvmsMetricVector<float>("test.volts", SM_STALE_MIN, Volts);<br
class="">
vf->SetElemValue(3, 1.23);<br class="">
vf->SetElemValue(17, 2.34);<br class="">
float
myvals[3] = {
5.5, 6.6, 7.7
};<br class="">
vf->SetElemValues(10, 3, myvals);<br class="">
With this data
set, you get:<br
class="">
OVMS# met lis
test<br
class="">
test.volts
0,0,0,1.23,0,0,0,0,0,0,5.5,6.6,7.7,0,0,0,0,2.34V<br
class="">
?and in the
web framework:<br
class="">
metrics["test.volts"]<br class="">
(18) [0, 0, 0,
1.23, 0, 0, 0,
0, 0, 0, 5.5,
6.6, 7.7, 0,
0, 0, 0, 2.34]<br
class="">
metrics["test.volts"][11]<br class="">
6.6<br
class="">
See template
definition in
ovms_metrics.h
for more.<br
class="">
<br class="">
Regards,<br
class="">
Michael<br
class="">
<br class="">
<br class="">
<blockquote
type="cite"
class="">Am
31.10.18 um
20:08 schrieb
Tam?s Kov?cs:<br
class="">
I have a
Peugeot iOn,
and i wan't to
create own
metrics for
battery temp
(66 piece) and
voltage (88
(old) or
80(new) piece)
for all cell
(and show on
web
interface),
and i don't
understand how
can i create
it. Now my
data in
array-s from
can messages
6E1-6E4.<br
class="">
My git fork: <a
class="moz-txt-link-freetext"
href="https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot"
moz-do-not-send="true">https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot</a>
<a
class="moz-txt-link-rfc2396E"
href="https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot"
moz-do-not-send="true"><https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot></a><br
class="">
vehicle_mitsubishi<br class="">
<br class="">
</blockquote>
<br class="">
-- <br
class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br
class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br
class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a
class="moz-txt-link-rfc2396E"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br
class="">
</blockquote>
<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a
class="moz-txt-link-rfc2396E"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br
class="">
</blockquote>
<br class="">
-- <br
class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br
class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br
class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a
class="moz-txt-link-rfc2396E"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br
class="">
</blockquote>
<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a
class="moz-txt-link-rfc2396E"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a
class="moz-txt-link-rfc2396E"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br
class="">
</blockquote>
<br class="">
-- <br
class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br
class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br
class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</blockquote>
<br class="">
--------------
next part
--------------<br
class="">
An HTML
attachment was
scrubbed...<br
class="">
URL: <a
class="moz-txt-link-rfc2396E"
href="http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20181110/b17e54e7/attachment.html"
moz-do-not-send="true"><http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20181110/b17e54e7/attachment.html></a><br
class="">
<br class="">
------------------------------<br class="">
<br class="">
Subject:
Digest Footer<br
class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
<br class="">
<br class="">
------------------------------<br class="">
<br class="">
End of OvmsDev
Digest, Vol
82, Issue 10<br
class="">
***************************************<br class="">
</blockquote>
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
class="moz-txt-link-abbreviated"
href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</blockquote>
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br
class="">
<a
href="mailto:OvmsDev@lists.openvehicles.com"
class=""
moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
<br class="">
<fieldset
class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br
class="">
<a
href="mailto:OvmsDev@lists.openvehicles.com"
class=""
moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a
class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset
class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a
href="mailto:OvmsDev@lists.openvehicles.com"
class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br
class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.openvehicles.com"
class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br
class="">
<a class="moz-txt-link-freetext"
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
</blockquote>
<blockquote type="cite">
<div dir="ltr"><span>_______________________________________________</span><br>
<span>OvmsDev mailing list</span><br>
<span><a href="mailto:OvmsDev@lists.openvehicles.com"
moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a></span><br>
<span><a
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a></span><br>
</div>
</blockquote>
</div>
</blockquote>
<blockquote type="cite">
<div dir="ltr"><span>_______________________________________________</span><br>
<span>OvmsDev mailing list</span><br>
<span><a href="mailto:OvmsDev@lists.openvehicles.com"
moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a></span><br>
<span><a
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a></span><br>
</div>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></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="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</body>
</html>