Update TESLA-BATTERY.cpp Update advance_battery_html.cpp

This commit is contained in:
josiahhiggs 2024-12-21 21:54:14 +13:00
parent dd510f40ca
commit 320416e204
2 changed files with 205 additions and 86 deletions

View file

@ -1288,12 +1288,22 @@ void receive_can_battery(CAN_frame rx_frame) {
(0x1FU)); //0 "PWR_UP_INIT" 1 "STANDBY" 2 "12V_SUPPORT_ACTIVE" 3 "DIS_HVBUS" 4 "PCHG_FAST_DIS_HVBUS" 5 "PCHG_SLOW_DIS_HVBUS" 6 "PCHG_DWELL_CHARGE" 7 "PCHG_DWELL_WAIT" 8 "PCHG_DI_RECOVERY_WAIT" 9 "PCHG_ACTIVE" 10 "PCHG_FLT_FAST_DIS_HVBUS" 11 "SHUTDOWN" 12 "12V_SUPPORT_FAULTED" 13 "DIS_HVBUS_FAULTED" 14 "PCHG_FAULTED" 15 "CLEAR_FAULTS" 16 "FAULTED" 17 "NUM" ;
break;
case 0x252: //Limit //594 BMS_powerAvailable:
BMS_maxRegenPower = ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[0]); //0|16@1+ (0.01,0) [0|655.35] "kW" //Example 4715 * 0.01 = 47.15kW
BMS_maxDischargePower = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.013,0) [0|655.35] "kW" //Example 2009 * 0.013 = 26.117???
BMS_maxStationaryHeatPower = (((rx_frame.data.u8[5] & 0x03) << 8) | rx_frame.data.u8[4]); //32|10@1+ (0.01,0) [0|10.23] "kW" //Example 500 * 0.01 = 5kW
BMS_hvacPowerBudget = (((rx_frame.data.u8[7] << 6) | ((rx_frame.data.u8[6] & 0xFC) >> 2))); //50|10@1+ (0.02,0) [0|20.46] "kW" //Example 1000 * 0.02 = 20kW?
BMS_notEnoughPowerForHeatPump = ((rx_frame.data.u8[5] >> 2) & (0x01U)); //BMS_notEnoughPowerForHeatPump : 42|1@1+ (1,0) [0|1] "" Receiver
BMS_powerLimitState = (rx_frame.data.u8[6] & (0x01U)); //BMS_powerLimitsState : 48|1@1+ (1,0) [0|1] 0 "NOT_CALCULATED_FOR_DRIVE" 1 "CALCULATED_FOR_DRIVE"
BMS_maxRegenPower = ((rx_frame.data.u8[1] << 8) |
rx_frame.data.u8[0]); //0|16@1+ (0.01,0) [0|655.35] "kW" //Example 4715 * 0.01 = 47.15kW
BMS_maxDischargePower =
((rx_frame.data.u8[3] << 8) |
rx_frame.data.u8[2]); //16|16@1+ (0.013,0) [0|655.35] "kW" //Example 2009 * 0.013 = 26.117???
BMS_maxStationaryHeatPower =
(((rx_frame.data.u8[5] & 0x03) << 8) |
rx_frame.data.u8[4]); //32|10@1+ (0.01,0) [0|10.23] "kW" //Example 500 * 0.01 = 5kW
BMS_hvacPowerBudget =
(((rx_frame.data.u8[7] << 6) |
((rx_frame.data.u8[6] & 0xFC) >> 2))); //50|10@1+ (0.02,0) [0|20.46] "kW" //Example 1000 * 0.02 = 20kW?
BMS_notEnoughPowerForHeatPump =
((rx_frame.data.u8[5] >> 2) & (0x01U)); //BMS_notEnoughPowerForHeatPump : 42|1@1+ (1,0) [0|1] "" Receiver
BMS_powerLimitState =
(rx_frame.data.u8[6] &
(0x01U)); //BMS_powerLimitsState : 48|1@1+ (1,0) [0|1] 0 "NOT_CALCULATED_FOR_DRIVE" 1 "CALCULATED_FOR_DRIVE"
BMS_inverterTQF = ((rx_frame.data.u8[7] >> 4) & (0x03U));
break;
case 0x132: //battery amps/volts //HVBattAmpVolt

View file

@ -294,21 +294,30 @@ String advanced_battery_processor(const String& var) {
float dcdcLvBusVolt = static_cast<float>(datalayer_extended.tesla.battery_dcdcLvBusVolt) * 0.0390625;
float dcdcHvBusVolt = static_cast<float>(datalayer_extended.tesla.battery_dcdcHvBusVolt) * 0.146484;
float dcdcLvOutputCurrent = static_cast<float>(datalayer_extended.tesla.battery_dcdcLvOutputCurrent) * 0.1;
float nominal_full_pack_energy = static_cast<float>(datalayer_extended.tesla.battery_nominal_full_pack_energy) * 0.1;
float nominal_full_pack_energy_m0 = static_cast<float>(datalayer_extended.tesla.battery_nominal_full_pack_energy_m0) * 0.02;
float nominal_energy_remaining = static_cast<float>(datalayer_extended.tesla.battery_nominal_energy_remaining) * 0.1;
float nominal_energy_remaining_m0 = static_cast<float>(datalayer_extended.tesla.battery_nominal_energy_remaining_m0) * 0.02;
float nominal_full_pack_energy =
static_cast<float>(datalayer_extended.tesla.battery_nominal_full_pack_energy) * 0.1;
float nominal_full_pack_energy_m0 =
static_cast<float>(datalayer_extended.tesla.battery_nominal_full_pack_energy_m0) * 0.02;
float nominal_energy_remaining =
static_cast<float>(datalayer_extended.tesla.battery_nominal_energy_remaining) * 0.1;
float nominal_energy_remaining_m0 =
static_cast<float>(datalayer_extended.tesla.battery_nominal_energy_remaining_m0) * 0.02;
float ideal_energy_remaining = static_cast<float>(datalayer_extended.tesla.battery_ideal_energy_remaining) * 0.1;
float ideal_energy_remaining_m0 = static_cast<float>(datalayer_extended.tesla.battery_ideal_energy_remaining_m0) * 0.02;
float energy_to_charge_complete = static_cast<float>(datalayer_extended.tesla.battery_energy_to_charge_complete) * 0.1;
float energy_to_charge_complete_m1 = static_cast<float>(datalayer_extended.tesla.battery_energy_to_charge_complete_m1) * 0.02;
float ideal_energy_remaining_m0 =
static_cast<float>(datalayer_extended.tesla.battery_ideal_energy_remaining_m0) * 0.02;
float energy_to_charge_complete =
static_cast<float>(datalayer_extended.tesla.battery_energy_to_charge_complete) * 0.1;
float energy_to_charge_complete_m1 =
static_cast<float>(datalayer_extended.tesla.battery_energy_to_charge_complete_m1) * 0.02;
float energy_buffer = static_cast<float>(datalayer_extended.tesla.battery_energy_buffer) * 0.1;
float energy_buffer_m1 = static_cast<float>(datalayer_extended.tesla.battery_energy_buffer_m1) * 0.01;
float expected_energy_remaining_m1 = static_cast<float>(datalayer_extended.tesla.battery_expected_energy_remaining_m1) * 0.02;
float expected_energy_remaining_m1 =
static_cast<float>(datalayer_extended.tesla.battery_expected_energy_remaining_m1) * 0.02;
float total_discharge = static_cast<float>(datalayer_extended.tesla.battery_total_discharge);
float total_charge = static_cast<float>(datalayer_extended.tesla.battery_total_charge);
float packMass = static_cast<float>(datalayer_extended.tesla.battery_packMass);
float platformMaxBusVoltage = static_cast<float>(datalayer_extended.tesla.battery_platformMaxBusVoltage) * 0.1 + 375;
float platformMaxBusVoltage =
static_cast<float>(datalayer_extended.tesla.battery_platformMaxBusVoltage) * 0.1 + 375;
float bms_min_voltage = static_cast<float>(datalayer_extended.tesla.battery_bms_min_voltage) * 0.01 * 2;
float bms_max_voltage = static_cast<float>(datalayer_extended.tesla.battery_bms_max_voltage) * 0.01 * 2;
float max_charge_current = static_cast<float>(datalayer_extended.tesla.battery_max_charge_current);
@ -322,7 +331,8 @@ String advanced_battery_processor(const String& var) {
float BrickModelTMax = static_cast<float>(datalayer_extended.tesla.battery_BrickTempMinNum) * 0.5 - 40;
float BrickModelTMin = static_cast<float>(datalayer_extended.tesla.battery_BrickModelTMin) * 0.5 - 40;
float isolationResistance = static_cast<float>(datalayer_extended.tesla.battery_BMS_isolationResistance) * 10;
float PCS_dcdcMaxOutputCurrentAllowed = static_cast<float>(datalayer_extended.tesla.battery_PCS_dcdcMaxOutputCurrentAllowed) * 0.1;
float PCS_dcdcMaxOutputCurrentAllowed =
static_cast<float>(datalayer_extended.tesla.battery_PCS_dcdcMaxOutputCurrentAllowed) * 0.1;
float PCS_dcdcTemp = static_cast<float>(datalayer_extended.tesla.PCS_dcdcTemp * 0.1 + 40);
float PCS_ambientTemp = static_cast<float>(datalayer_extended.tesla.PCS_ambientTemp) * 0.1 + 40;
float BMS_maxRegenPower = static_cast<float>(datalayer_extended.tesla.BMS_maxRegenPower) * 0.01;
@ -331,16 +341,20 @@ String advanced_battery_processor(const String& var) {
float BMS_hvacPowerBudget = static_cast<float>(datalayer_extended.tesla.BMS_hvacPowerBudget) * 0.02;
float BMS_powerDissipation = static_cast<float>(datalayer_extended.tesla.BMS_powerDissipation) * 0.02;
float BMS_flowRequest = static_cast<float>(datalayer_extended.tesla.BMS_flowRequest) * 0.3;
float BMS_inletActiveCoolTargetT = static_cast<float>(datalayer_extended.tesla.BMS_inletActiveCoolTargetT) * 0.25 - 25;
float BMS_inletActiveCoolTargetT =
static_cast<float>(datalayer_extended.tesla.BMS_inletActiveCoolTargetT) * 0.25 - 25;
float BMS_inletPassiveTargetT = static_cast<float>(datalayer_extended.tesla.BMS_inletPassiveTargetT) * 0.25 - 25;
float BMS_inletActiveHeatTargetT = static_cast<float>(datalayer_extended.tesla.BMS_inletActiveHeatTargetT) * 0.25 - 25;
float BMS_inletActiveHeatTargetT =
static_cast<float>(datalayer_extended.tesla.BMS_inletActiveHeatTargetT) * 0.25 - 25;
float BMS_packTMin = static_cast<float>(datalayer_extended.tesla.BMS_packTMin);
float BMS_packTMax = static_cast<float>(datalayer_extended.tesla.BMS_packTMax);
float PCS_dcdcMaxLvOutputCurrent = static_cast<float>(datalayer_extended.tesla.PCS_dcdcMaxLvOutputCurrent) * 0.1;
float PCS_dcdcCurrentLimit = static_cast<float>(datalayer_extended.tesla.PCS_dcdcCurrentLimit) * 0.1;
float PCS_dcdcLvOutputCurrentTempLimit = static_cast<float>(datalayer_extended.tesla.PCS_dcdcLvOutputCurrentTempLimit) * 0.1;
float PCS_dcdcLvOutputCurrentTempLimit =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcLvOutputCurrentTempLimit) * 0.1;
float PCS_dcdcUnifiedCommand = static_cast<float>(datalayer_extended.tesla.PCS_dcdcUnifiedCommand) * 0.001;
float PCS_dcdcCLAControllerOutput = static_cast<float>(datalayer_extended.tesla.PCS_dcdcCLAControllerOutput * 0.001);
float PCS_dcdcCLAControllerOutput =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcCLAControllerOutput * 0.001);
float PCS_dcdcTankVoltage = static_cast<float>(datalayer_extended.tesla.PCS_dcdcTankVoltage);
float PCS_dcdcTankVoltageTarget = static_cast<float>(datalayer_extended.tesla.PCS_dcdcTankVoltageTarget);
float PCS_dcdcClaCurrentFreq = static_cast<float>(datalayer_extended.tesla.PCS_dcdcClaCurrentFreq) * 0.0976563;
@ -348,14 +362,21 @@ String advanced_battery_processor(const String& var) {
float PCS_dcdcShortTimeUs = static_cast<float>(datalayer_extended.tesla.PCS_dcdcShortTimeUs) * 0.000488281;
float PCS_dcdcHalfPeriodUs = static_cast<float>(datalayer_extended.tesla.PCS_dcdcHalfPeriodUs) * 0.000488281;
float PCS_dcdcIntervalMaxFrequency = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxFrequency);
float PCS_dcdcIntervalMaxHvBusVolt = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxHvBusVolt) * 0.1;
float PCS_dcdcIntervalMaxLvBusVolt = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxLvBusVolt) * 0.1;
float PCS_dcdcIntervalMaxLvOutputCurr = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxLvOutputCurr);
float PCS_dcdcIntervalMaxHvBusVolt =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxHvBusVolt) * 0.1;
float PCS_dcdcIntervalMaxLvBusVolt =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxLvBusVolt) * 0.1;
float PCS_dcdcIntervalMaxLvOutputCurr =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMaxLvOutputCurr);
float PCS_dcdcIntervalMinFrequency = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinFrequency);
float PCS_dcdcIntervalMinHvBusVolt = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinHvBusVolt) * 0.1;
float PCS_dcdcIntervalMinLvBusVolt = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinLvBusVolt) * 0.1;
float PCS_dcdcIntervalMinLvOutputCurr = static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinLvOutputCurr);
float PCS_dcdc12vSupportLifetimekWh = static_cast<float>(datalayer_extended.tesla.PCS_dcdc12vSupportLifetimekWh) * 0.01;
float PCS_dcdcIntervalMinHvBusVolt =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinHvBusVolt) * 0.1;
float PCS_dcdcIntervalMinLvBusVolt =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinLvBusVolt) * 0.1;
float PCS_dcdcIntervalMinLvOutputCurr =
static_cast<float>(datalayer_extended.tesla.PCS_dcdcIntervalMinLvOutputCurr);
float PCS_dcdc12vSupportLifetimekWh =
static_cast<float>(datalayer_extended.tesla.PCS_dcdc12vSupportLifetimekWh) * 0.01;
float HVP_hvp1v5Ref = static_cast<float>(datalayer_extended.tesla.HVP_hvp1v5Ref) * 0.1;
float HVP_shuntCurrentDebug = static_cast<float>(datalayer_extended.tesla.HVP_shuntCurrentDebug) * 0.1;
float HVP_dcLinkVoltage = static_cast<float>(datalayer_extended.tesla.HVP_dcLinkVoltage) * 0.1;
@ -380,16 +401,57 @@ String advanced_battery_processor(const String& var) {
float HVP_shuntBarTempDbg = static_cast<float>(datalayer_extended.tesla.HVP_shuntBarTempDbg) * 0.01;
float HVP_shuntAsicTempDbg = static_cast<float>(datalayer_extended.tesla.HVP_shuntAsicTempDbg) * 0.01;
static const char* contactorText[] = {"UNKNOWN(0)", "OPEN", "CLOSING", "BLOCKED", "OPENING", "CLOSED", "UNKNOWN(6)", "WELDED", "POS_CL", "NEG_CL", "UNKNOWN(10)", "UNKNOWN(11)", "UNKNOWN(12)"};
static const char* hvilStatusState[] = {"NOT Ok", "STATUS_OK", "CURRENT_SOURCE_FAULT", "INTERNAL_OPEN_FAULT", "VEHICLE_OPEN_FAULT", "PENTHOUSE_LID_OPEN_FAULT", "UNKNOWN_LOCATION_OPEN_FAULT", "VEHICLE_NODE_FAULT", "NO_12V_SUPPLY", "VEHICLE_OR_PENTHOUSE_LID_OPENFAULT", "UNKNOWN(10)", "UNKNOWN(11)", "UNKNOWN(12)", "UNKNOWN(13)", "UNKNOWN(14)", "UNKNOWN(15)"};
static const char* contactorState[] = {"SNA", "OPEN", "PRECHARGE", "BLOCKED", "PULLED_IN", "OPENING", "ECONOMIZED", "WELDED", "UNKNOWN(8)", "UNKNOWN(9)", "UNKNOWN(10)", "UNKNOWN(11)"};
static const char* BMS_state[] = {"STANDBY", "DRIVE", "SUPPORT", "CHARGE", "FEIM", "CLEAR_FAULT", "FAULT", "WELD", "TEST", "SNA"};
static const char* contactorText[] = {"UNKNOWN(0)", "OPEN", "CLOSING", "BLOCKED", "OPENING",
"CLOSED", "UNKNOWN(6)", "WELDED", "POS_CL", "NEG_CL",
"UNKNOWN(10)", "UNKNOWN(11)", "UNKNOWN(12)"};
static const char* hvilStatusState[] = {"NOT Ok",
"STATUS_OK",
"CURRENT_SOURCE_FAULT",
"INTERNAL_OPEN_FAULT",
"VEHICLE_OPEN_FAULT",
"PENTHOUSE_LID_OPEN_FAULT",
"UNKNOWN_LOCATION_OPEN_FAULT",
"VEHICLE_NODE_FAULT",
"NO_12V_SUPPLY",
"VEHICLE_OR_PENTHOUSE_LID_OPENFAULT",
"UNKNOWN(10)",
"UNKNOWN(11)",
"UNKNOWN(12)",
"UNKNOWN(13)",
"UNKNOWN(14)",
"UNKNOWN(15)"};
static const char* contactorState[] = {"SNA", "OPEN", "PRECHARGE", "BLOCKED",
"PULLED_IN", "OPENING", "ECONOMIZED", "WELDED",
"UNKNOWN(8)", "UNKNOWN(9)", "UNKNOWN(10)", "UNKNOWN(11)"};
static const char* BMS_state[] = {"STANDBY", "DRIVE", "SUPPORT", "CHARGE", "FEIM",
"CLEAR_FAULT", "FAULT", "WELD", "TEST", "SNA"};
static const char* BMS_contactorState[] = {"SNA", "OPEN", "OPENING", "CLOSING", "CLOSED", "WELDED", "BLOCKED"};
static const char* BMS_hvState[] = {"DOWN", "COMING_UP", "GOING_DOWN", "UP_FOR_DRIVE", "UP_FOR_CHARGE", "UP_FOR_DC_CHARGE", "UP"};
static const char* BMS_uiChargeStatus[] = {"DISCONNECTED", "NO_POWER", "ABOUT_TO_CHARGE", "CHARGING", "CHARGE_COMPLETE", "CHARGE_STOPPED"};
static const char* BMS_hvState[] = {"DOWN", "COMING_UP", "GOING_DOWN", "UP_FOR_DRIVE",
"UP_FOR_CHARGE", "UP_FOR_DC_CHARGE", "UP"};
static const char* BMS_uiChargeStatus[] = {"DISCONNECTED", "NO_POWER", "ABOUT_TO_CHARGE",
"CHARGING", "CHARGE_COMPLETE", "CHARGE_STOPPED"};
static const char* PCS_dcdcStatus[] = {"IDLE", "ACTIVE", "FAULTED"};
static const char* PCS_dcdcMainState[] = {"STANDBY", "12V_SUPPORT_ACTIVE", "PRECHARGE_STARTUP", "PRECHARGE_ACTIVE", "DIS_HVBUS_ACTIVE", "SHUTDOWN", "FAULTED"};
static const char* PCS_dcdcSubState[] = {"PWR_UP_INIT", "STANDBY", "12V_SUPPORT_ACTIVE", "DIS_HVBUS", "PCHG_FAST_DIS_HVBUS", "PCHG_SLOW_DIS_HVBUS", "PCHG_DWELL_CHARGE", "PCHG_DWELL_WAIT", "PCHG_DI_RECOVERY_WAIT", "PCHG_ACTIVE", "PCHG_FLT_FAST_DIS_HVBUS", "SHUTDOWN", "12V_SUPPORT_FAULTED", "DIS_HVBUS_FAULTED", "PCHG_FAULTED", "CLEAR_FAULTS", "FAULTED", "NUM"};
static const char* PCS_dcdcMainState[] = {"STANDBY", "12V_SUPPORT_ACTIVE", "PRECHARGE_STARTUP",
"PRECHARGE_ACTIVE", "DIS_HVBUS_ACTIVE", "SHUTDOWN",
"FAULTED"};
static const char* PCS_dcdcSubState[] = {"PWR_UP_INIT",
"STANDBY",
"12V_SUPPORT_ACTIVE",
"DIS_HVBUS",
"PCHG_FAST_DIS_HVBUS",
"PCHG_SLOW_DIS_HVBUS",
"PCHG_DWELL_CHARGE",
"PCHG_DWELL_WAIT",
"PCHG_DI_RECOVERY_WAIT",
"PCHG_ACTIVE",
"PCHG_FLT_FAST_DIS_HVBUS",
"SHUTDOWN",
"12V_SUPPORT_FAULTED",
"DIS_HVBUS_FAULTED",
"PCHG_FAULTED",
"CLEAR_FAULTS",
"FAULTED",
"NUM"};
static const char* BMS_powerLimitState[] = {"NOT_CALCULATED_FOR_DRIVE", "CALCULATED_FOR_DRIVE"};
static const char* HVP_status[] = {"INVALID", "NOT_AVAILABLE", "STALE", "VALID"};
static const char* falseTrue[] = {"False", "True"};
@ -397,15 +459,22 @@ String advanced_battery_processor(const String& var) {
//0x20A 522 HVP_contatorState
content += "<h4>Contactor Status: " + String(contactorText[datalayer_extended.tesla.status_contactor]) + "</h4>";
content += "<h4>HVIL: " + String(hvilStatusState[datalayer_extended.tesla.hvil_status]) + "</h4>";
content += "<h4>Negative contactor: " + String(contactorState[datalayer_extended.tesla.packContNegativeState]) + "</h4>";
content += "<h4>Positive contactor: " + String(contactorState[datalayer_extended.tesla.packContPositiveState]) + "</h4>";
content +=
"<h4>Negative contactor: " + String(contactorState[datalayer_extended.tesla.packContNegativeState]) + "</h4>";
content +=
"<h4>Positive contactor: " + String(contactorState[datalayer_extended.tesla.packContPositiveState]) + "</h4>";
content += "<h4>Closing allowed?: " + String(falseTrue[datalayer_extended.tesla.packCtrsClosingAllowed]) + "</h4>";
content += "<h4>Pyrotest in Progress: " + String(falseTrue[datalayer_extended.tesla.pyroTestInProgress]) + "</h4>";
content += "<h4>Contactors Open Now Requested: " + String(falseTrue[datalayer_extended.tesla.battery_packCtrsOpenNowRequested]) + "</h4>";
content += "<h4>Contactors Open Requested; " + String(falseTrue[datalayer_extended.tesla.battery_packCtrsOpenRequested]) + "</h4>";
content += "<h4>Contactors Request Status; " + String(falseTrue[datalayer_extended.tesla.battery_packCtrsRequestStatus]) + "</h4>";
content += "<h4>Contactors Reset Request Required; " + String(falseTrue[datalayer_extended.tesla.battery_packCtrsResetRequestRequired]) + "</h4>";
content += "<h4>DC Link Allowed to Energize;" + String(falseTrue[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + "</h4>";
content += "<h4>Contactors Open Now Requested: " +
String(falseTrue[datalayer_extended.tesla.battery_packCtrsOpenNowRequested]) + "</h4>";
content += "<h4>Contactors Open Requested; " +
String(falseTrue[datalayer_extended.tesla.battery_packCtrsOpenRequested]) + "</h4>";
content += "<h4>Contactors Request Status; " +
String(falseTrue[datalayer_extended.tesla.battery_packCtrsRequestStatus]) + "</h4>";
content += "<h4>Contactors Reset Request Required; " +
String(falseTrue[datalayer_extended.tesla.battery_packCtrsResetRequestRequired]) + "</h4>";
content += "<h4>DC Link Allowed to Energize;" +
String(falseTrue[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + "</h4>";
// Comment what data you would like to dislay, order can be changed.
//0x292 658 BMS_socStates
content += "<h4>Battery Beginning of Life: " + String(beginning_of_life) + " KWh</h4>";
@ -422,21 +491,37 @@ String advanced_battery_processor(const String& var) {
content += "<h4>PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC</h4>";
content += "<h4>PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC</h4>";
//0x224 548 PCS_dcdcStatus
content += "<h4>Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) + "</h4>";
content += "<h4>12V Support Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdc12VSupportStatus]) + "</h4>";
content += "<h4>HV Bus Discharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcHvBusDischargeStatus]) + "</h4>";
content += "<h4>Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "</h4>";
content += "<h4>Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "</h4>";
content +=
"<h4>Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) +
"</h4>";
content +=
"<h4>12V Support Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdc12VSupportStatus]) +
"</h4>";
content += "<h4>HV Bus Discharge Status: " +
String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcHvBusDischargeStatus]) + "</h4>";
content +=
"<h4>Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "</h4>";
content +=
"<h4>Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "</h4>";
content += "<h4>PCS Faulted: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcFaulted]) + "</h4>";
content += "<h4>Output Is Limited: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + "</h4>";
content +=
"<h4>Output Is Limited: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + "</h4>";
content += "<h4>Max Output Current Allowed: " + String(PCS_dcdcMaxOutputCurrentAllowed) + " A</h4>";
content += "<h4>Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) + "</h4>";
content += "<h4>12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) + "</h4>";
content += "<h4>Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) + "</h4>";
content += "<h4>PWM Enable Line: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + "</h4>";
content += "<h4>Supporting Fixed LV Target: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcSupportingFixedLvTarget]) + "</h4>";
content += "<h4>Precharge Restart Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRestartCnt]) + "</h4>";
content += "<h4>Initial Precharge Substate: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcInitialPrechargeSubState]) + "</h4>";
content += "<h4>Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) +
"</h4>";
content +=
"<h4>12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) +
"</h4>";
content += "<h4>Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) +
"</h4>";
content +=
"<h4>PWM Enable Line: " + String(noYes[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + "</h4>";
content += "<h4>Supporting Fixed LV Target: " +
String(noYes[datalayer_extended.tesla.battery_PCS_dcdcSupportingFixedLvTarget]) + "</h4>";
content += "<h4>Precharge Restart Cnt: " +
String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRestartCnt]) + "</h4>";
content += "<h4>Initial Precharge Substate: " +
String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcInitialPrechargeSubState]) + "</h4>";
//0x2C4 708 PCS_logging
content += "<h4>PCS_dcdcMaxLvOutputCurrent: " + String(PCS_dcdcMaxLvOutputCurrent) + " A</h4>";
content += "<h4>PCS_dcdcCurrentLimit: " + String(PCS_dcdcCurrentLimit) + " A</h4>";
@ -463,11 +548,15 @@ String advanced_battery_processor(const String& var) {
content += "<h4>Total Charge: " + String(total_charge) + " KWh</h4>";
//0x212 530 BMS_status
content += "<h4>Isolation Resistance: " + String(isolationResistance) + " kOhms</h4>";
content += "<h4>BMS Contactor State: " + String(BMS_contactorState[datalayer_extended.tesla.battery_BMS_contactorState]) + "</h4>";
content +=
"<h4>BMS Contactor State: " + String(BMS_contactorState[datalayer_extended.tesla.battery_BMS_contactorState]) +
"</h4>";
content += "<h4>BMS State: " + String(BMS_state[datalayer_extended.tesla.battery_BMS_state]) + "</h4>";
content += "<h4>BMS HV State: " + String(BMS_hvState[datalayer_extended.tesla.battery_BMS_hvState]) + "</h4>";
content += "<h4>BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + "</h4>";
content += "<h4>BMS PCS PWM Enabled: " + String(noYes[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "</h4>";
content += "<h4>BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) +
"</h4>";
content +=
"<h4>BMS PCS PWM Enabled: " + String(noYes[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "</h4>";
//0x352 850 BMS_energyStatus
content += "<h3>Early BMS 0x352</h3"; //if using older BMS <2021 and comment 0x352 without MUX
content += "<h4>Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh</h4>";
@ -475,7 +564,8 @@ String advanced_battery_processor(const String& var) {
content += "<h4>Ideal Energy Remaining: " + String(ideal_energy_remaining) + " KWh</h4>";
content += "<h4>Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh</h4>";
content += "<h4>Energy Buffer: " + String(energy_buffer) + " KWh</h4>";
content += "<h4>Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + "</h4>";
content +=
"<h4>Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + "</h4>";
//0x352 850 BMS_energyStatus
content += "<h3>Late BMS 0x352 with Mux</h3"; //if using newer BMS >2021 and comment 0x352 with MUX
content += "<h4>Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh</h4>";
@ -508,8 +598,11 @@ String advanced_battery_processor(const String& var) {
content += "<h4>Max Discharge Power: " + String(BMS_maxDischargePower) + " KW</h4>";
content += "<h4>Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh</h4>";
content += "<h4>HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW</h4>";
content += "<h4>Not Enough Power For Heat Pump: " + String(noYes[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + " KW</h4>";
content += "<h4>Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "</h4>";
content +=
"<h4>Not Enough Power For Heat Pump: " + String(noYes[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) +
" KW</h4>";
content +=
"<h4>Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "</h4>";
content += "<h4>Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "</h4>";
//0x312 786 BMS_thermalStatus
content += "<h4>Power Dissipation: " + String(BMS_powerDissipation) + " kW</h4>";
@ -522,28 +615,41 @@ String advanced_battery_processor(const String& var) {
content += "<h4>PCS No Flow Request: " + String(falseTrue[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "</h4>";
content += "<h4>BMS No Flow Request: " + String(falseTrue[datalayer_extended.tesla.BMS_noFlowRequest]) + "</h4>";
//0x7AA 1962 HVP_debugMessage
content += "<h4>HVP_gpioPassivePyroDepl: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "</h4>";
content +=
"<h4>HVP_gpioPassivePyroDepl: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "</h4>";
content += "<h4>HVP_gpioPyroIsoEn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPyroIsoEn]) + "</h4>";
content += "<h4>HVP_gpioCpFaultIn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioCpFaultIn]) + "</h4>";
content += "<h4>HVP_gpioPackContPowerEn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + "</h4>";
content +=
"<h4>HVP_gpioPackContPowerEn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + "</h4>";
content += "<h4>HVP_gpioHvCablesOk: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioHvCablesOk]) + "</h4>";
content += "<h4>HVP_gpioHvpSelfEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioHvpSelfEnable]) + "</h4>";
content +=
"<h4>HVP_gpioHvpSelfEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioHvpSelfEnable]) + "</h4>";
content += "<h4>HVP_gpioLed: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioLed]) + "</h4>";
content += "<h4>HVP_gpioCrashSignal: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioCrashSignal]) + "</h4>";
content += "<h4>HVP_gpioShuntDataReady: " + String(falseTrue[ datalayer_extended.tesla.HVP_gpioShuntDataReady]) + "</h4>";
content += "<h4>HVP_gpioFcContPosAux: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioFcContPosAux]) + "</h4>";
content += "<h4>HVP_gpioFcContNegAux: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioFcContNegAux]) + "</h4>";
content +=
"<h4>HVP_gpioShuntDataReady: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioShuntDataReady]) + "</h4>";
content +=
"<h4>HVP_gpioFcContPosAux: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioFcContPosAux]) + "</h4>";
content +=
"<h4>HVP_gpioFcContNegAux: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioFcContNegAux]) + "</h4>";
content += "<h4>HVP_gpioBmsEout: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioBmsEout]) + "</h4>";
content += "<h4>HVP_gpioCpFaultOut: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioCpFaultOut]) + "</h4>";
content += "<h4>HVP_gpioPyroPor: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPyroPor]) + "</h4>";
content += "<h4>HVP_gpioShuntEn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioShuntEn]) + "</h4>";
content += "<h4>HVP_gpioHvpVerEn: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioHvpVerEn]) + "</h4>";
content += "<h4>HVP_gpioPackCoontPosFlywheel: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + "</h4>";
content += "<h4>HVP_gpioCpLatchEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioCpLatchEnable]) + "</h4>";
content += "<h4>HVP_gpioPackCoontPosFlywheel: " +
String(falseTrue[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + "</h4>";
content +=
"<h4>HVP_gpioCpLatchEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioCpLatchEnable]) + "</h4>";
content += "<h4>HVP_gpioPcsEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPcsEnable]) + "</h4>";
content += "<h4>HVP_gpioPcsDcdcPwmEnable: " + String(falseTrue[ datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) + "</h4>";
content += "<h4>HVP_gpioPcsChargePwmEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) + "</h4>";
content += "<h4>HVP_gpioFcContPowerEnable: " + String(falseTrue[ datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) + "</h4>";
content += "<h4>HVP_gpioPcsDcdcPwmEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) +
"</h4>";
content +=
"<h4>HVP_gpioPcsChargePwmEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) +
"</h4>";
content +=
"<h4>HVP_gpioFcContPowerEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) +
"</h4>";
content += "<h4>HVP_gpioHvilEnable: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioHvilEnable]) + "</h4>";
content += "<h4>HVP_gpioSecDrdy: " + String(falseTrue[datalayer_extended.tesla.HVP_gpioSecDrdy]) + "</h4>";
content += "<h4>HVP_hvp1v5Ref: " + String(HVP_hvp1v5Ref) + " V</h4>";
@ -551,8 +657,11 @@ String advanced_battery_processor(const String& var) {
content += "<h4>HVP_packCurrentMia: " + String(falseTrue[datalayer_extended.tesla.HVP_packCurrentMia]) + "</h4>";
content += "<h4>HVP_auxCurrentMia: " + String(falseTrue[datalayer_extended.tesla.HVP_auxCurrentMia]) + "</h4>";
content += "<h4>HVP_currentSenseMia: " + String(falseTrue[datalayer_extended.tesla.HVP_currentSenseMia]) + "</h4>";
content += "<h4>HVP_shuntRefVoltageMismatch: " + String(falseTrue[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) + "</h4>";
content += "<h4>HVP_shuntThermistorMia: " + String(falseTrue[datalayer_extended.tesla.HVP_shuntThermistorMia]) + "</h4>";
content +=
"<h4>HVP_shuntRefVoltageMismatch: " + String(falseTrue[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) +
"</h4>";
content +=
"<h4>HVP_shuntThermistorMia: " + String(falseTrue[datalayer_extended.tesla.HVP_shuntThermistorMia]) + "</h4>";
content += "<h4>HVP_shuntHwMia: " + String(falseTrue[datalayer_extended.tesla.HVP_shuntHwMia]) + "</h4>";
content += "<h4>HVP_dcLinkVoltage: " + String(HVP_dcLinkVoltage) + " V</h4>";
content += "<h4>HVP_packVoltage: " + String(HVP_packVoltage) + " V</h4>";