/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.cpp: In member function 'void OvmsVehicleMaxed3::IncomingBmsReply(canbus*, uint16_t, uint16_t, uint8_t*, uint8_t, uint16_t)':
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.cpp:159:82: error: no matching function for call to 'OvmsMetricVector<float>::SetValue(float)'
StandardMetrics.ms_v_bat_cell_vmax->SetValue((float)value2 / 1000);
^
In file included from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle/vehicle.h:40:0,
from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.h:32,
from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.cpp:32:
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:747:18: note: candidate: bool OvmsMetricVector<ElemType, Allocator>::SetValue(std::__cxx11::string) [with ElemType = float; Allocator = std::allocator<float>; std::__cxx11::string = std::__cxx11::basic_string<char>]
virtual bool SetValue(std::string value)
^
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:747:18: note: no known conversion for argument 1 from 'float' to 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:763:10: note: candidate: bool OvmsMetricVector<ElemType, Allocator>::SetValue(const std::vector<_Tp, _Alloc>&, metric_unit_t) [with ElemType = float; Allocator = std::allocator<float>]
bool SetValue(const std::vector<ElemType, Allocator>& value, metric_unit_t units = Other)
^
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:763:10: note: no known conversion for argument 1 from 'float' to 'const std::vector<float, std::allocator<float> >&'
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.cpp:162:82: error: no matching function for call to 'OvmsMetricVector<float>::SetValue(float)'
StandardMetrics.ms_v_bat_cell_vmin->SetValue((float)value2 / 1000);
^
In file included from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle/vehicle.h:40:0,
from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.h:32,
from /Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/components/vehicle_maxus_edeliver3/src/vehicle_med3.cpp:32:
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:747:18: note: candidate: bool OvmsMetricVector<ElemType, Allocator>::SetValue(std::__cxx11::string) [with ElemType = float; Allocator = std::allocator<float>; std::__cxx11::string = std::__cxx11::basic_string<char>]
virtual bool SetValue(std::string value)
^
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:747:18: note: no known conversion for argument 1 from 'float' to 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:763:10: note: candidate: bool OvmsMetricVector<ElemType, Allocator>::SetValue(const std::vector<_Tp, _Alloc>&, metric_unit_t) [with ElemType = float; Allocator = std::allocator<float>]
bool SetValue(const std::vector<ElemType, Allocator>& value, metric_unit_t units = Other)
^
/Users/shane/Open-Vehicle-Monitoring-System-3-MGEV/vehicle/OVMS.V3/main/ovms_metrics.h:763:10: note: no known conversion for argument 1 from 'float' to 'const std::vector<float, std::allocator<float> >&'
make[1]: *** [src/vehicle_med3.o] Error 1
make: *** [component-vehicle_maxus_edeliver3-build] Error 2
shane@Shanes-MacBook-Pro OVMS.V3 %
Regards
Shane
OVMS# obd can1 request device -t1000 7e4 7ec
2102
7e4[7ec] 2102: Response:
ff ff ff ff c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c5 | ................
c5 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 | ................
c4 c4 c4 c4 | ....
OVMS# obd can1 request device -t1000 7e4 7ec 2103
7e4[7ec] 2103: Response:
ff ff ff ff c4 c4 c4 c4 c4 c4 c4 c5 c5 c4 c4 c4 | ................
c4 c4 c4 c4 c4 c5 c5 c5 c4 c5 c5 c5 c4 c5 c4 c4 | ................
c5 c4 c4 c4 | ....
OVMS# obd can1 request device -t1000 7e4 7ec 2104
7e4[7ec] 2104: Response:
ff ff ff ff c4 c4 c5 c4 c4 c4 c4 c4 c4 c4 c4 c4 | ................
c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 | ................
c4 c5 c4 c4 | ....
Your voltages obviously are 16 bit values, so you'll need to use
RXB_UINT16() and multiply your loop index by 2.
Regards,
Michael
Am 03.04.21 um 12:04 schrieb Shane @
Kilve Engineering:
Hi has anyone got a sample of the data for the cell voltages on
the ioniq vfl just so I can see how the macro is handling it? Or
is it played out the same as below?
Regards
Shane
Shane,
Am 29.03.21 um 20:17
schrieb Shane @ Kilve Engineering:
can any one tell me what the
"v.e.c.login" is and is it need for something to
work?
| v.e.c.config |
|
yes = ECU/controller in
configuration state |
It's not used by the framework currently.
also any one with any ideas how to deal
with cell voltages in a string this long? took me
blumim ages to find the bms when the tx and rx are
128 address apart!!
748[7c8]:e113 10 90 10 92 10 93 10 93 10
8e 10 92 10 8f 10 90 10 92 10 6c 10 93 10 93 10 8f
10 91 10 92 10 92 10 92 10 92 10 92 10 92 10 90 10
8e 10 90 10 92 10 8d 10 90 10 91 10 8f 10 8e 10 8f
10 91 10 90 10 90 10 91 10 8e 10 91 10 8e 10 91 10
90 10 8e 10 90 10 92 10 90 10 94 10 91 10 91 10 93
10 90 10 91 10 90 10 8f 10 93 10 92 10 8e 10 90 10
91 10 8b 10 92 10 90 10 91 10 8e 10 90 10 90 10 90
10 91 10 90 10 8f 10 90 10 90 10 8e 10 92 10 8e 10
91 10 89 10 91 10 91 10 91 10 8d 10 8f 10 8d 10 86
10 8a 10 8e 10 8f 10 91 10 90 10 92 10 94 10 88 10
8f 10 94 10 91 10 91 10 91 10 93 10 91 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00
Simply loop over the cells contained. Have a look at the
buffer macro utils, e.g.:
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/blob/master/vehicle/OVMS.V3/components/vehicle_hyundai_ioniqvfl/src/vehicle_hyundai_ioniqvfl.cpp#L44
Regards,
Michael
Shane
Shane,
OvmsVehicle::PollSetPidList(m_can1,
obdii_polls);
OvmsVehicle::PollSetState(0);
needs to be done in your vehicle init, i.e.
the constructor after RegisterCanBus().
Please read the vehicle_obdii module source
for a complete polling example.
Regards,
Michael
Am 05.03.21 um
17:59 schrieb Shane @ Kilve Engineering:
Thanks Michael,
Had a try and ended up with
this bit added but return anything
Where am I going wrong?
Shane
*******
#include "ovms_log.h"
static const char *TAG = "v-edeliver3";
#include "vehicle_edeliver3.h"
#include "metrics_standard.h"
namespace {
const OvmsVehicle::poll_pid_t obdii_polls[] =
{
{ 0x7e3,
0x7eb,
VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0xf194,
{ 10,
10,
10,
10
}, 0, ISOTP_STD }, //VIN
{ 0x7e3,
0x7eb,
VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0xe003,
{ 10, 10,
10,
10
}, 0, ISOTP_STD }, //SOH
POLL_LIST_END
};
};
OvmsVehicleEdeliver3::OvmsVehicleEdeliver3()
{
ESP_LOGI(TAG, "Start
eDeliver3 vehicle module");
RegisterCanBus(1,CAN_MODE_ACTIVE,CAN_SPEED_500KBPS);
}
OvmsVehicleEdeliver3::~OvmsVehicleEdeliver3()
{
ESP_LOGI(TAG, "Stop
eDeliver3 vehicle module");
memset(m_vin, 0, sizeof(m_vin));
}
//testing polls
void OvmsVehicleEdeliver3::IncomingPollReply(
canbus*
bus, uint16_t type, uint16_t pid,
uint8_t* data, uint8_t length, uint16_t
mlremain)
{
string& rxbuf = med_obd_rxbuf;
OvmsVehicle::PollSetPidList(m_can1,
obdii_polls);
OvmsVehicle::PollSetState(0);
// init / fill rx buffer:
if
(m_poll_ml_frame == 0) {
rxbuf.clear();
rxbuf.reserve(length + mlremain);
}
rxbuf.append((char*)data,
length);
if (mlremain)
return;
// complete:
switch (pid) {
case 0xe003:
{
unsigned int soh_raw = ((unsigned int)rxbuf[0]
<< 8) | (unsigned int)rxbuf[1];
float soh =
soh_raw / 10;
StdMetrics.ms_v_bat_soh->SetValue(soh);
break;
}
}
}
// end testing polls
Shane,
on OBD polling basics:
http://lists.openvehicles.com/pipermail/ovmsdev/2020-December/014758.html
Regards,
Michael
Am
04.03.21 um 19:45 schrieb Shane
@ Kilve Engineering:
Good evening Michael,
Or any one that
has the time to help,
Ive now
successfully retrieved as much
info as I can without polling
any info for the maxus, but I
have have now found an ecu
that responds to pid
requests.
For example if I
use the obdii pid scanner I
get the loads of data back and
I’ve decoded some of it, just
need a bit of guidance how to
write the code to get the same
info
A part of a scan
is as follows
Scan complete
(7e3 e000-e100)
Scan started :
2021-03-04 18:32:36 GMT
Last response:
2021-03-04 18:32:39 GMT
7e3[7eb]:e000 00
7e3[7eb]:e001 64
7e3[7eb]:e002 4b
7e3[7eb]:e003 26
bc
7e3[7eb]:e004 00
07
7e3[7eb]:e005 2f
7e3[7eb]:e006 2e
7e3[7eb]:e007 02
00
7e3[7eb]:e008 01
ff
7e3[7eb]:e009 02
00
7e3[7eb]:e010 02
00
I know that e003
is SOH = 26bc = 9916 /100
= 99.16% SOH
And e002 is a
temp 4b = 75 / 10 = 7.5
degrees
So if some one
can help me with an
example of how to
correctly code this one I
can work out the rest,
Ive looked
through various vehicles
but everyone uses
different methods and I
can’t seem to get one to
work for me.
Any help much
appreciated
Shane
Shane,
I forgot to mention:
if you're working on a
new vehicle module,
you'll also need to
start the bus
somewhere in your
initialization code.
Example:
RegisterCanBus(1,
CAN_MODE_ACTIVE,
CAN_SPEED_500KBPS);
Regards,
Michael
Am 15.02.21 um 08:36
schrieb Michael
Balzer:
Shane,
Am 14.02.21 um 16:42
schrieb Shane @
Kilve Engineering:
can any
one help me with a
bit of code to
retrieve ve some
data from ecu
can1/6f2 00 4c 00
00 01 97 bc 00 as
i cant poll this
ecu it just
broadcasts when
its active, ive
tried polling it
but does not
respond, i need to
choose one byte
and allocate it to
a PID.
I don't know what
you mean by
"allocating a byte
to a PID", but if
you want to process
frames received
directly, simply
override
IncomingFrameCan1()
(or …2/3/4 depending
on your bus).
Reduced example:
void
OvmsVehicleXYZ::IncomingFrameCan1(CAN_frame_t
*p_frame)
{
uint8_t *d =
p_frame->data.u8;
switch
(p_frame->MsgID)
{
case 0x6f2:
// for
example, assuming
the SOC is in byte
1:
StdMetrics.ms_v_bat_soc->SetValue(d[1]);
break;
}
}
If you're outside a
vehicle context, you
can register your
own CAN receiver by
creating a queue and
calling
MyCan.RegisterListener().
See the vehicle
module for an
example.
Regards,
Michael
--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.comhttp://lists.openvehicles.com/mailman/listinfo/ovmsdev