Compare commits
9 commits
63dd1e92c8
...
0cce906308
Author | SHA1 | Date | |
---|---|---|---|
Carsten Schmiemann | 0cce906308 | ||
Carsten Schmiemann | 072fb6ffe8 | ||
Carsten Schmiemann | 3c53f9c072 | ||
Carsten Schmiemann | 45eb878752 | ||
Carsten Schmiemann | 3b70fa6dcc | ||
Carsten Schmiemann | 8e2807d8aa | ||
Carsten Schmiemann | 06595b54a2 | ||
Carsten Schmiemann | c440602ada | ||
Carsten Schmiemann | 304d2219fe |
|
@ -77,7 +77,7 @@ void OvmsVehicleRenaultZoePh2::IncomingBCM(uint16_t type, uint16_t pid, const ch
|
|||
if (CAN_UINT(0) == 2 || CAN_UINT(0) == 4 || CAN_UINT(0) == 6 ) {
|
||||
StandardMetrics.ms_v_tpms_alert->SetElemValue(MS_V_TPMS_IDX_FL, 1);
|
||||
}
|
||||
ESP_LOGD(TAG, "40FF BCM tpms alert FL: %d", CAN_UINT(0));
|
||||
//ESP_LOGD(TAG, "40FF BCM tpms alert FL: %d", CAN_UINT(0));
|
||||
break;
|
||||
}
|
||||
case 0x410A: { // TPMS alert - front right
|
||||
|
@ -90,7 +90,7 @@ void OvmsVehicleRenaultZoePh2::IncomingBCM(uint16_t type, uint16_t pid, const ch
|
|||
if (CAN_UINT(0) == 2 || CAN_UINT(0) == 4 || CAN_UINT(0) == 6 ) {
|
||||
StandardMetrics.ms_v_tpms_alert->SetElemValue(MS_V_TPMS_IDX_FR, 1);
|
||||
}
|
||||
ESP_LOGD(TAG, "40FF BCM tpms alert FR: %d", CAN_UINT(0));
|
||||
//ESP_LOGD(TAG, "40FF BCM tpms alert FR: %d", CAN_UINT(0));
|
||||
break;
|
||||
}
|
||||
case 0x410B: { // TPMS alert - rear left
|
||||
|
@ -103,7 +103,7 @@ void OvmsVehicleRenaultZoePh2::IncomingBCM(uint16_t type, uint16_t pid, const ch
|
|||
if (CAN_UINT(0) == 2 || CAN_UINT(0) == 4 || CAN_UINT(0) == 6 ) {
|
||||
StandardMetrics.ms_v_tpms_alert->SetElemValue(MS_V_TPMS_IDX_RL, 1);
|
||||
}
|
||||
ESP_LOGD(TAG, "40FF BCM tpms alert RL: %d", CAN_UINT(0));
|
||||
//ESP_LOGD(TAG, "40FF BCM tpms alert RL: %d", CAN_UINT(0));
|
||||
break;
|
||||
}
|
||||
case 0x410C: { // TPMS alert - rear right
|
||||
|
@ -116,12 +116,12 @@ void OvmsVehicleRenaultZoePh2::IncomingBCM(uint16_t type, uint16_t pid, const ch
|
|||
if (CAN_UINT(0) == 2 || CAN_UINT(0) == 4 || CAN_UINT(0) == 6 ) {
|
||||
StandardMetrics.ms_v_tpms_alert->SetElemValue(MS_V_TPMS_IDX_RR, 1);
|
||||
}
|
||||
ESP_LOGD(TAG, "40FF BCM tpms alert RR: %d", CAN_UINT(0));
|
||||
//ESP_LOGD(TAG, "40FF BCM tpms alert RR: %d", CAN_UINT(0));
|
||||
break;
|
||||
}
|
||||
case 0x4081: { //Vehicle running aka ignition
|
||||
//reliability test needed
|
||||
ESP_LOGD(TAG, "4081 BCM Ignition on: %d", CAN_UINT(0));
|
||||
StandardMetrics.ms_v_env_on->SetValue((bool) CAN_UINT(0));
|
||||
//ESP_LOGD(TAG, "4081 BCM Ignition on: %d", CAN_UINT(0));
|
||||
break;
|
||||
}
|
||||
case 0x8004: { //Car secure aka vehicle locked
|
||||
|
@ -155,8 +155,8 @@ void OvmsVehicleRenaultZoePh2::IncomingBCM(uint16_t type, uint16_t pid, const ch
|
|||
break;
|
||||
}
|
||||
case 0x0495: { //Hood
|
||||
StandardMetrics.ms_v_door_hood->SetValue((bool)CAN_NIBL(0));
|
||||
//ESP_LOGD(TAG, "0495 Hood: %d", CAN_NIBL(0));
|
||||
StandardMetrics.ms_v_door_hood->SetValue((bool)CAN_NIB(0));
|
||||
ESP_LOGD(TAG, "0495 Hood: %d", CAN_NIB(0));
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,19 +46,19 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
|
|||
//ESP_LOGD(TAG, "21CF EVC mt_inv_status: %d", CAN_NIBL(0));
|
||||
if (CAN_NIBL(0) == 1) {
|
||||
mt_inv_status->SetValue("Inverter off");
|
||||
StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
//StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
} else if (CAN_NIBL(0) == 2) {
|
||||
mt_inv_status->SetValue("Inverter on");
|
||||
StandardMetrics.ms_v_env_on->SetValue(true);
|
||||
//StandardMetrics.ms_v_env_on->SetValue(true);
|
||||
} else if (CAN_NIBL(0) == 3) {
|
||||
mt_inv_status->SetValue("Inverter decharging");
|
||||
StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
//StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
} else if (CAN_NIBL(0) == 4) {
|
||||
mt_inv_status->SetValue("Inverter alternator mode");
|
||||
StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
//StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
} else if (CAN_NIBL(0) == 5) {
|
||||
mt_inv_status->SetValue("Inverter ready to sleep");
|
||||
StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
//StandardMetrics.ms_v_env_on->SetValue(false);
|
||||
} else {
|
||||
mt_inv_status->SetValue("Inverter state unknown");
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 0x2B6D: { // Charge MMI States
|
||||
case 0x2B6D: { // Charge MMI States, will be polled every 30s even car is off, because free frames are unreliable
|
||||
//ESP_LOGD(TAG, "2B6D Charge MMI States RAW: %d", CAN_NIBL(0));
|
||||
if (CAN_NIBL(0) == 0) {
|
||||
StandardMetrics.ms_v_charge_state->SetValue("stopped");
|
||||
|
@ -145,6 +145,9 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
|
|||
StandardMetrics.ms_v_charge_inprogress->SetValue(false);
|
||||
//ESP_LOGD(TAG, "2B6D Charge MMI States : Charge preparation");
|
||||
}
|
||||
if (!mt_bus_awake->AsBool()) {
|
||||
ZoeWakeUp();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0x2B7A: { // Charge type
|
||||
|
@ -178,23 +181,45 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
|
|||
}
|
||||
case 0x300D: { // AC input current
|
||||
StandardMetrics.ms_v_charge_current->SetValue((float) (CAN_UINT(0) * 0.1), Amps);
|
||||
//Power factor measured with simple power meter, using later a Janitza UMG512 Class A power analyser to get more precision
|
||||
if (StandardMetrics.ms_v_charge_current->AsFloat() > 30.0f) {
|
||||
ACInputPowerFactor = 0.9;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 25.0f) {
|
||||
ACInputPowerFactor = 0.8;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 20.0f) {
|
||||
ACInputPowerFactor = 0.7;
|
||||
//Power factor measured with a Janitza UMG512 Class A power analyser to get more precision
|
||||
//Only three phases measurement at the moment
|
||||
if (StandardMetrics.ms_v_charge_current->AsFloat() > 19.0f) {
|
||||
ACInputPowerFactor = 1.0;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 18.0f) {
|
||||
ACInputPowerFactor = 0.997;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 17.0f) {
|
||||
ACInputPowerFactor = 0.99;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 16.0f) {
|
||||
ACInputPowerFactor = 0.978;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 15.0f) {
|
||||
ACInputPowerFactor = 0.948;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 14.0f) {
|
||||
ACInputPowerFactor = 0.931;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 13.0f) {
|
||||
ACInputPowerFactor = 0.916;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 12.0f) {
|
||||
ACInputPowerFactor = 0.902;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 11.0f) {
|
||||
ACInputPowerFactor = 0.888;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 10.0f) {
|
||||
ACInputPowerFactor = 0.6;
|
||||
ACInputPowerFactor = 0.905;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 9.0f) {
|
||||
ACInputPowerFactor = 0.929;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 8.0f) {
|
||||
ACInputPowerFactor = 0.5;
|
||||
ACInputPowerFactor = 0.901;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() > 7.0f) {
|
||||
ACInputPowerFactor = 0.1;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() < 6.0f) {
|
||||
ACInputPowerFactor = 0.775;
|
||||
} else if (StandardMetrics.ms_v_charge_current->AsFloat() < 6.0f && StandardMetrics.ms_v_charge_inprogress->AsBool(false)) {
|
||||
ACInputPowerFactor = 0.05;
|
||||
ESP_LOGE(TAG, "Warning charge current too low, charging not possible");
|
||||
}
|
||||
if (mt_main_phases_num->AsFloat() == 3 && StandardMetrics.ms_v_charge_inprogress->AsBool(false)) {
|
||||
StandardMetrics.ms_v_charge_power->SetValue((StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * ACInputPowerFactor * 1.732f) * 0.001, kW);
|
||||
} else if (mt_main_phases_num->AsFloat() == 2 || mt_main_phases_num->AsFloat() == 1) {
|
||||
StandardMetrics.ms_v_charge_power->SetValue((StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * ACInputPowerFactor) * 0.001, kW);
|
||||
} else {
|
||||
StandardMetrics.ms_v_charge_power->SetValue(0);
|
||||
}
|
||||
StandardMetrics.ms_v_charge_power->SetValue((float) (StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * mt_main_phases_num->AsFloat() * ACInputPowerFactor), kW);
|
||||
//ESP_LOGD(TAG, "300D EVC mt_main_current: %f", (CAN_UINT(0) * 0.1));
|
||||
break;
|
||||
}
|
||||
|
@ -220,7 +245,6 @@ void OvmsVehicleRenaultZoePh2::IncomingEVC(uint16_t type, uint16_t pid, const ch
|
|||
}
|
||||
case 0x2B8A: { // AC mains voltage
|
||||
StandardMetrics.ms_v_charge_voltage->SetValue((float) (CAN_UINT(0) * 0.5), Volts);
|
||||
StandardMetrics.ms_v_charge_power->SetValue((float) (StandardMetrics.ms_v_charge_current->AsFloat() * StandardMetrics.ms_v_charge_voltage->AsFloat() * mt_main_phases_num->AsFloat() * ACInputPowerFactor), kW);
|
||||
//ESP_LOGD(TAG, "2B8A EVC ms_v_charge_voltage: %f", (CAN_UINT(0) * 0.5));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -48,12 +48,11 @@ static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
|
|||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2003, { 0, 60, 2, 300 }, 0, ISOTP_EXTFRAME }, // Vehicle Speed
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2005, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // 12Battery Voltage
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x21CF, { 0, 2, 10, 300 }, 0, ISOTP_EXTFRAME }, // Inverter Status
|
||||
//{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x303D, { 0, 10, 10, 3 }, 0, ISOTP_EXTFRAME }, // HV Battery Insulation Resistance
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2218, { 0, 20, 20, 20 }, 0, ISOTP_EXTFRAME }, // Ambient air temperature
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2A09, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Power usage by consumer
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2191, { 0, 10, 10, 10 }, 0, ISOTP_EXTFRAME }, // Power usage by ptc
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B85, { 0, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge plug preset
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B6D, { 60, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge MMI states
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B6D, { 30, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge MMI states
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x2B7A, { 0, 2, 300, 10 }, 0, ISOTP_EXTFRAME }, // Charge type
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x3064, { 0, 10, 3, 10 }, 0, ISOTP_EXTFRAME }, // Motor rpm
|
||||
{ 0x18dadaf1, 0x18daf1da, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x300F, { 0, 2, 300, 3 }, 0, ISOTP_EXTFRAME }, // AC charging power available
|
||||
|
@ -77,7 +76,7 @@ static const OvmsVehicle::poll_pid_t renault_zoe_polls[] = {
|
|||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x410A, { 0, 300, 300, 300 }, 0, ISOTP_STD }, // TPMS alert - front right
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x410B, { 0, 300, 300, 300 }, 0, ISOTP_STD }, // TPMS alert - rear left
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x410C, { 0, 300, 300, 300 }, 0, ISOTP_STD }, // TPMS alert - rear right
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4081, { 0, 3, 10, 60 }, 0, ISOTP_STD }, // Vehicle running aka ignition, need testing
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4081, { 0, 2, 2, 60 }, 0, ISOTP_STD }, // Vehicle running aka ignition
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x8004, { 0, 3, 3, 3 }, 0, ISOTP_STD }, // Car secure aka vehicle locked
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x6026, { 0, 3, 3, 3 }, 0, ISOTP_STD }, // Front left door
|
||||
{ 0x745, 0x765, VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x6027, { 0, 3, 3, 3 }, 0, ISOTP_STD }, // Front right door
|
||||
|
|
|
@ -84,13 +84,13 @@ OvmsVehicleRenaultZoePh2::OvmsVehicleRenaultZoePh2() {
|
|||
mt_inv_hv_current = MyMetrics.InitFloat("zph2.i.current", SM_STALE_MID, 0, Amps);
|
||||
mt_mot_temp_stator1 = MyMetrics.InitFloat("zph2.m.temp.stator1", SM_STALE_MID, 0, Celcius);
|
||||
mt_mot_temp_stator2 = MyMetrics.InitFloat("zph2.m.temp.stator2", SM_STALE_MID, 0, Celcius);
|
||||
mt_hvac_compressor_speed = MyMetrics.InitFloat("zph2.h.compressor.speed", SM_STALE_MID, 0);
|
||||
mt_hvac_compressor_pressure = MyMetrics.InitFloat("zph2.h.compressor.pressure", SM_STALE_MID, 0);
|
||||
mt_hvac_compressor_speed = MyMetrics.InitFloat("zph2.h.compressor.speed", SM_STALE_MID, 0, rpm);
|
||||
mt_hvac_compressor_pressure = MyMetrics.InitFloat("zph2.h.compressor.pressure", SM_STALE_MID, 0, Bar);
|
||||
mt_hvac_compressor_power = MyMetrics.InitFloat("zph2.h.compressor.power", SM_STALE_MID, 0, Watts);
|
||||
mt_hvac_compressor_mode = MyMetrics.InitString("zph2.h.compressor.mode", SM_STALE_MID, 0);
|
||||
mt_v_env_pressure = MyMetrics.InitFloat("zph2.v.e.pressure", SM_STALE_MIN, 0);
|
||||
mt_bat_lbc_soc = MyMetrics.InitFloat("zph2.b.lbc.soc", SM_STALE_NONE, 0, Percentage);
|
||||
mt_bat_user_soc = MyMetrics.InitFloat("zph2.b.user.soc", SM_STALE_NONE, 0, Percentage);
|
||||
mt_hvac_compressor_mode = MyMetrics.InitString("zph2.h.compressor.mode", SM_STALE_MID, 0, Other);
|
||||
mt_v_env_pressure = MyMetrics.InitFloat("zph2.v.e.pressure", SM_STALE_MIN, 0, mBar);
|
||||
mt_bat_lbc_soc = MyMetrics.InitFloat("zph2.b.lbc.soc", SM_STALE_MAX, 0, Percentage, true);
|
||||
mt_bat_user_soc = MyMetrics.InitFloat("zph2.b.user.soc", SM_STALE_MAX, 0, Percentage, true);
|
||||
|
||||
// BMS configuration:
|
||||
BmsSetCellArrangementVoltage(96, 1);
|
||||
|
@ -123,6 +123,15 @@ void OvmsVehicleRenaultZoePh2::ConfigChanged(OvmsConfigParam* param) {
|
|||
ESP_LOGI(TAG, "Renault Zoe Ph2 reload configuration: Range ideal: %d, Battery capacity: %d, Use Car trip counter: %s, Use BMS as energy counter: %s, Use BMS for SOC: %s", m_range_ideal, m_battery_capacity, m_UseCarTrip ? "Yes" : "No", m_UseBMScalculation ? "yes" : "no", m_UseBMSsoc ? "yes" : "no");
|
||||
}
|
||||
|
||||
void OvmsVehicleRenaultZoePh2::ZoeWakeUp() {
|
||||
ESP_LOGI(TAG,"Zoe woke up (CAN Bus activity detected)");
|
||||
mt_bus_awake->SetValue(true);;
|
||||
StandardMetrics.ms_v_env_awake->SetValue(true);
|
||||
StandardMetrics.ms_v_env_charging12v->SetValue(true);
|
||||
POLLSTATE_ON;
|
||||
ESP_LOGI(TAG, "Pollstate switched to ON");
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles incoming CAN-frames on bus 1
|
||||
*/
|
||||
|
@ -146,12 +155,7 @@ void OvmsVehicleRenaultZoePh2::IncomingFrameCan1(CAN_frame_t* p_frame) {
|
|||
}
|
||||
//There are some free frames on wakeup and start and stop charging.... I try to use them to see if Car is awake and charging, see /Reference/ZOE_Ph2_xxx text files
|
||||
if (!mt_bus_awake->AsBool() && (data[0] == 0x05 || data[0] == 0x06 || data[0] == 0x07)) { //listen for SingleFrames (0x0) with length of 5-7
|
||||
ESP_LOGI(TAG,"Zoe woke up (CAN Bus activity detected)");
|
||||
mt_bus_awake->SetValue(true);;
|
||||
StandardMetrics.ms_v_env_awake->SetValue(true);
|
||||
StandardMetrics.ms_v_env_charging12v->SetValue(true);
|
||||
POLLSTATE_ON;
|
||||
ESP_LOGI(TAG, "Pollstate switched to ON");
|
||||
ZoeWakeUp();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@ class OvmsVehicleRenaultZoePh2 : public OvmsVehicle {
|
|||
~OvmsVehicleRenaultZoePh2();
|
||||
static void WebCfgCommon(PageEntry_t& p, PageContext_t& c);
|
||||
void ConfigChanged(OvmsConfigParam* param);
|
||||
void ZoeWakeUp();
|
||||
void IncomingFrameCan1(CAN_frame_t* p_frame);
|
||||
void IncomingPollReply(canbus* bus, uint16_t type, uint16_t pid, uint8_t* data, uint8_t length, uint16_t remain);
|
||||
void WebInit();
|
||||
|
|
|
@ -1465,6 +1465,10 @@ const char* OvmsMetricUnitLabel(metric_unit_t units)
|
|||
case WattHoursPK: return "Wh/km";
|
||||
case WattHoursPM: return "Wh/mi";
|
||||
case Nm: return "Nm";
|
||||
case rpm: return "rpm";
|
||||
case kVA: return "kVA";
|
||||
case Bar: return "bar";
|
||||
case mBar: return "mBar";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,6 +71,8 @@ typedef enum : uint8_t
|
|||
kPa = 30,
|
||||
Pa = 31,
|
||||
PSI = 32,
|
||||
Bar = 33,
|
||||
mBar = 34,
|
||||
|
||||
Volts = 40,
|
||||
Amps = 41,
|
||||
|
@ -79,6 +81,7 @@ typedef enum : uint8_t
|
|||
kWh = 44,
|
||||
Watts = 45,
|
||||
WattHours = 46,
|
||||
kVA = 47,
|
||||
|
||||
Seconds = 50,
|
||||
Minutes = 51,
|
||||
|
@ -100,6 +103,7 @@ typedef enum : uint8_t
|
|||
sq = 81, // Signal Quality (in SQ units)
|
||||
|
||||
Percentage = 90,
|
||||
rpm = 91,
|
||||
|
||||
// Energy consumption:
|
||||
WattHoursPK = 100, // Wh/km
|
||||
|
|
Loading…
Reference in a new issue