#ifndef _VOLVO_SPA_HTML_H #define _VOLVO_SPA_HTML_H #include "../datalayer/datalayer.h" #include "../datalayer/datalayer_extended.h" #include "../devboard/webserver/BatteryHtmlRenderer.h" class VolvoSpaHtmlRenderer : public BatteryHtmlRenderer { public: String get_status_html() { String content; content += "

BECM reported number of DTCs: " + String(datalayer_extended.VolvoPolestar.DTCcount) + "

"; content += "

BECM reported SOC: " + String(datalayer_extended.VolvoPolestar.soc_bms / 10.0) + " %

"; content += "

Calculated SOC: " + String(datalayer_extended.VolvoPolestar.soc_calc / 10.0) + " %

"; content += "

Rescaled SOC: " + String(datalayer_extended.VolvoPolestar.soc_rescaled / 100.0) + " %

"; content += "

BECM reported SOH: " + String(datalayer_extended.VolvoPolestar.soh_bms / 100.0) + " %

"; content += "

BECM supply voltage: " + String(datalayer_extended.VolvoPolestar.BECMsupplyVoltage) + " mV

"; content += "

HV voltage: " + String(datalayer_extended.VolvoPolestar.BECMBatteryVoltage) + " V

"; content += "

HV current: " + String(datalayer_extended.VolvoPolestar.BECMBatteryCurrent) + " A

"; content += "

Dynamic max voltage: " + String(datalayer_extended.VolvoPolestar.BECMUDynMaxLim) + " V

"; content += "

Dynamic min voltage: " + String(datalayer_extended.VolvoPolestar.BECMUDynMinLim) + " V

"; content += "

Discharge power limit 1: " + String(datalayer_extended.VolvoPolestar.HvBattPwrLimDcha1) + " kW

"; content += "

Discharge soft power limit: " + String(datalayer_extended.VolvoPolestar.HvBattPwrLimDchaSoft) + " kW

"; content += "

Discharge power limit slow aging: " + String(datalayer_extended.VolvoPolestar.HvBattPwrLimDchaSlowAgi) + " kW

"; content += "

Charge power limit slow aging: " + String(datalayer_extended.VolvoPolestar.HvBattPwrLimChrgSlowAgi) + " kW

"; content += "

HVIL Circuit A status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x01) { case 0x01: content += String("Open"); break; default: content += String("Not valid"); } content += "

HVIL Circuit B status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x02) { case 0x02: content += String("Open"); break; default: content += String("Closed"); } content += "

HVIL Circuit C status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x04) { case 0x04: content += String("Open"); break; default: content += String("Closed"); } content += "

Precharge contactor status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x08) { case 0x08: content += String("Open"); break; default: content += String("Closed"); } content += "

Positive Contactor status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x10) { case 0x10: content += String("Open"); break; default: content += String("Closed"); } content += "

Negative Contactor status: "; switch (datalayer_extended.VolvoPolestar.HVILstatusBits & 0x20) { case 0x20: content += String("Open"); break; default: content += String("Closed"); } content += "

HV system relay status: "; switch (datalayer_extended.VolvoPolestar.HVSysRlySts) { case 0: content += String("Open"); break; case 1: content += String("Closed"); break; case 2: content += String("KeepStatus"); break; case 3: content += String("OpenAndRequestActiveDischarge"); break; default: content += String("Not valid"); } content += "

HV system relay status 1: "; switch (datalayer_extended.VolvoPolestar.HVSysDCRlySts1) { case 0: content += String("Open"); break; case 1: content += String("Closed"); break; case 2: content += String("KeepStatus"); break; case 3: content += String("Fault"); break; default: content += String("Not valid"); } content += "

HV system relay status 2: "; switch (datalayer_extended.VolvoPolestar.HVSysDCRlySts2) { case 0: content += String("Open"); break; case 1: content += String("Closed"); break; case 2: content += String("KeepStatus"); break; case 3: content += String("Fault"); break; default: content += String("Not valid"); } content += "

HV system isolation resistance monitoring status: "; switch (datalayer_extended.VolvoPolestar.HVSysIsoRMonrSts) { case 0: content += String("Not valid 1"); break; case 1: content += String("False"); break; case 2: content += String("True"); break; case 3: content += String("Not valid 2"); break; default: content += String("Not valid"); } return content; } }; #endif