/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.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev