<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" 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 face="Andale Mono" class=""><span style="font-size: 14px;" class="">#include “ovms_webserver.h"</span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 14px;" class="">OvmsVehicleTeslaModelS::OvmsVehicleTeslaModelS()</span></font></div><div class=""><font face="Andale Mono" class=""><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 face="Andale Mono" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Andale Mono" class=""><span style="font-size: 14px;" class="">OvmsVehicleTeslaModelS::~OvmsVehicleTeslaModelS()</span></font></div><div class=""><font face="Andale Mono" class=""><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><br class=""></div><div><img apple-inline="yes" id="9C966AF8-AFDF-4ABB-8EED-CABCB72F340A" width="1211" height="642" src="cid:508689C0-8D19-48C5-A438-B2AA2BD32221" class=""></div><div><br class=""></div><div>The animation is very nice.</div><div><br class=""></div><div>I am, however, getting crashes, as follows:</div></div><div class=""><div><br class=""></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div><div><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><span style="font-size: 14px;" class="">0x400935d3: invoke_abort at /home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div><div><font face="Andale Mono" class=""><span style="font-size: 14px;" class="">0x4009372b: abort at /home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div><div><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><font face="Andale Mono" class=""><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><br class=""></div><div>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><br class=""></div><div>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><br class=""></div><div>Regards, Mark.</div><div><br class=""></div><div><blockquote type="cite" class=""><div class="">On 17 Nov 2018, at 7:35 AM, Michael Balzer <<a href="mailto:dexter@expeedo.de" class="">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">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">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 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="">OvmsDev@lists.openvehicles.com</a><br class="">http://lists.openvehicles.com/mailman/listinfo/ovmsdev<br class=""></div></blockquote></div><br class=""></div></body></html>