mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-06 03:50:13 +02:00
172 lines
9.6 KiB
C++
172 lines
9.6 KiB
C++
#include "advanced_battery_html.h"
|
|
#include <Arduino.h>
|
|
#include "../../datalayer/datalayer.h"
|
|
#include "../../datalayer/datalayer_extended.h"
|
|
|
|
String advanced_battery_processor(const String& var) {
|
|
if (var == "X") {
|
|
String content = "";
|
|
//Page format
|
|
content += "<style>";
|
|
content += "body { background-color: black; color: white; }";
|
|
content += "</style>";
|
|
|
|
content += "<button onclick='goToMainPage()'>Back to main page</button>";
|
|
|
|
// Start a new block with a specific background color
|
|
content += "<div style='background-color: #303E47; padding: 10px; margin-bottom: 10px;border-radius: 50px'>";
|
|
|
|
|
|
#ifdef BMW_IX_BATTERY
|
|
content += "<h4>T30 Terminal Voltage: " + String(datalayer_extended.bmwix.T30_Voltage) + "mV</h4>";
|
|
#endif //BMW_IX_BATTERY
|
|
|
|
#ifdef BMW_I3_BATTERY
|
|
content += "<h4>SOC raw: " + String(datalayer_extended.bmwi3.SOC_raw) + "</h4>";
|
|
content += "<h4>SOC dash: " + String(datalayer_extended.bmwi3.SOC_dash) + "</h4>";
|
|
content += "<h4>SOC OBD2: " + String(datalayer_extended.bmwi3.SOC_OBD2) + "</h4>";
|
|
static const char* statusText[16] = {
|
|
"Not evaluated", "OK", "Error!", "Invalid signal", "", "", "", "", "", "", "", "", "", "", "", ""};
|
|
content += "<h4>Interlock: " + String(statusText[datalayer_extended.bmwi3.ST_interlock]) + "</h4>";
|
|
content += "<h4>Isolation external: " + String(statusText[datalayer_extended.bmwi3.ST_iso_ext]) + "</h4>";
|
|
content += "<h4>Isolation internal: " + String(statusText[datalayer_extended.bmwi3.ST_iso_int]) + "</h4>";
|
|
content += "<h4>Isolation: " + String(statusText[datalayer_extended.bmwi3.ST_isolation]) + "</h4>";
|
|
content += "<h4>Cooling valve: " + String(statusText[datalayer_extended.bmwi3.ST_valve_cooling]) + "</h4>";
|
|
content += "<h4>Emergency: " + String(statusText[datalayer_extended.bmwi3.ST_EMG]) + "</h4>";
|
|
static const char* prechargeText[16] = {"Not evaluated",
|
|
"Not active, closing not blocked",
|
|
"Error precharge blocked",
|
|
"Invalid signal",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
""};
|
|
content += "<h4>Precharge: " + String(prechargeText[datalayer_extended.bmwi3.ST_precharge]) +
|
|
"</h4>"; //Still unclear of enum
|
|
static const char* DCSWText[16] = {"Contactors open",
|
|
"Precharge ongoing",
|
|
"Contactors engaged",
|
|
"Invalid signal",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
""};
|
|
content += "<h4>Contactor status: " + String(DCSWText[datalayer_extended.bmwi3.ST_DCSW]) + "</h4>";
|
|
static const char* contText[16] = {"Contactors OK",
|
|
"One contactor welded!",
|
|
"Two contactors welded!",
|
|
"Invalid signal",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
""};
|
|
content += "<h4>Contactor weld: " + String(contText[datalayer_extended.bmwi3.ST_WELD]) + "</h4>";
|
|
static const char* valveText[16] = {"OK",
|
|
"Short circuit to GND",
|
|
"Short circuit to 12V",
|
|
"Line break",
|
|
"",
|
|
"",
|
|
"Driver error",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"Stuck",
|
|
"Stuck",
|
|
"",
|
|
"Invalid Signal"};
|
|
content += "<h4>Cold shutoff valve: " + String(contText[datalayer_extended.bmwi3.ST_cold_shutoff_valve]) + "</h4>";
|
|
|
|
#endif //BMW_I3_BATTERY
|
|
|
|
#ifdef TESLA_BATTERY
|
|
static const char* contactorText[] = {"UNKNOWN(0)", "OPEN", "CLOSING", "BLOCKED", "OPENING",
|
|
"CLOSED", "UNKNOWN(6)", "WELDED", "POS_CL", "NEG_CL",
|
|
"UNKNOWN(10)", "UNKNOWN(11)", "UNKNOWN(12)"};
|
|
content += "<h4>Contactor Status: " + String(contactorText[datalayer_extended.tesla.status_contactor]) + "</h4>";
|
|
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)"};
|
|
content += "<h4>HVIL: " + String(hvilStatusState[datalayer_extended.tesla.hvil_status]) + "</h4>";
|
|
static const char* contactorState[] = {"SNA", "OPEN", "PRECHARGE", "BLOCKED",
|
|
"PULLED_IN", "OPENING", "ECONOMIZED", "WELDED",
|
|
"UNKNOWN(8)", "UNKNOWN(9)", "UNKNOWN(10)", "UNKNOWN(11)"};
|
|
content +=
|
|
"<h4>Negative contactor: " + String(contactorState[datalayer_extended.tesla.packContNegativeState]) + "</h4>";
|
|
content +=
|
|
"<h4>Positive contactor: " + String(contactorState[datalayer_extended.tesla.packContPositiveState]) + "</h4>";
|
|
static const char* falseTrue[] = {"False", "True"};
|
|
content += "<h4>Closing allowed?: " + String(falseTrue[datalayer_extended.tesla.packCtrsClosingAllowed]) + "</h4>";
|
|
content += "<h4>Pyrotest: " + String(falseTrue[datalayer_extended.tesla.pyroTestInProgress]) + "</h4>";
|
|
#endif
|
|
|
|
#ifdef NISSAN_LEAF_BATTERY
|
|
content += "<h4>LEAF generation: " + String(datalayer_extended.nissanleaf.LEAF_gen) + "</h4>";
|
|
content += "<h4>GIDS: " + String(datalayer_extended.nissanleaf.GIDS) + "</h4>";
|
|
content += "<h4>Regen kW: " + String(datalayer_extended.nissanleaf.ChargePowerLimit) + "</h4>";
|
|
content += "<h4>Charge kW: " + String(datalayer_extended.nissanleaf.MaxPowerForCharger) + "</h4>";
|
|
content += "<h4>Interlock: " + String(datalayer_extended.nissanleaf.Interlock) + "</h4>";
|
|
content += "<h4>Relay cut request: " + String(datalayer_extended.nissanleaf.RelayCutRequest) + "</h4>";
|
|
content += "<h4>Failsafe status: " + String(datalayer_extended.nissanleaf.FailsafeStatus) + "</h4>";
|
|
content += "<h4>Fully charged: " + String(datalayer_extended.nissanleaf.Full) + "</h4>";
|
|
content += "<h4>Battery empty: " + String(datalayer_extended.nissanleaf.Empty) + "</h4>";
|
|
content += "<h4>Main relay ON: " + String(datalayer_extended.nissanleaf.MainRelayOn) + "</h4>";
|
|
content += "<h4>Heater present: " + String(datalayer_extended.nissanleaf.HeatExist) + "</h4>";
|
|
content += "<h4>Heating stopped: " + String(datalayer_extended.nissanleaf.HeatingStop) + "</h4>";
|
|
content += "<h4>Heating started: " + String(datalayer_extended.nissanleaf.HeatingStart) + "</h4>";
|
|
content += "<h4>Heating requested: " + String(datalayer_extended.nissanleaf.HeaterSendRequest) + "</h4>";
|
|
#endif
|
|
|
|
#if !defined(TESLA_BATTERY) && !defined(NISSAN_LEAF_BATTERY) && \
|
|
!defined(BMW_I3_BATTERY)&& !defined(BMW_IX_BATTERY) //Only the listed types have extra info
|
|
content += "No extra information available for this battery type";
|
|
#endif
|
|
|
|
content += "</div>";
|
|
|
|
content += "<script>";
|
|
content += "function goToMainPage() { window.location.href = '/'; }";
|
|
content += "</script>";
|
|
return content;
|
|
}
|
|
return String();
|
|
}
|