mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 09:49:32 +02:00
Merge pull request #1531 from dalathegreat/bugfix/reduce-flash
Improvement: Reduce flash usage
This commit is contained in:
commit
20b6ea5e85
9 changed files with 52 additions and 85 deletions
|
@ -86,9 +86,7 @@ void connectivity_loop(void*) {
|
||||||
// Init wifi
|
// Init wifi
|
||||||
init_WiFi();
|
init_WiFi();
|
||||||
|
|
||||||
if (webserver_enabled) {
|
init_webserver();
|
||||||
init_webserver();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mdns_enabled) {
|
if (mdns_enabled) {
|
||||||
init_mDNS();
|
init_mDNS();
|
||||||
|
@ -98,9 +96,7 @@ void connectivity_loop(void*) {
|
||||||
START_TIME_MEASUREMENT(wifi);
|
START_TIME_MEASUREMENT(wifi);
|
||||||
wifi_monitor();
|
wifi_monitor();
|
||||||
|
|
||||||
if (webserver_enabled) {
|
ota_monitor();
|
||||||
ota_monitor();
|
|
||||||
}
|
|
||||||
|
|
||||||
END_TIME_MEASUREMENT_MAX(wifi, datalayer.system.status.wifi_task_10s_max_us);
|
END_TIME_MEASUREMENT_MAX(wifi, datalayer.system.status.wifi_task_10s_max_us);
|
||||||
|
|
||||||
|
@ -388,11 +384,9 @@ void core_loop(void*) {
|
||||||
|
|
||||||
END_TIME_MEASUREMENT_MAX(comm, datalayer.system.status.time_comm_us);
|
END_TIME_MEASUREMENT_MAX(comm, datalayer.system.status.time_comm_us);
|
||||||
|
|
||||||
if (webserver_enabled) {
|
START_TIME_MEASUREMENT(ota);
|
||||||
START_TIME_MEASUREMENT(ota);
|
ElegantOTA.loop();
|
||||||
ElegantOTA.loop();
|
END_TIME_MEASUREMENT_MAX(ota, datalayer.system.status.time_ota_us);
|
||||||
END_TIME_MEASUREMENT_MAX(ota, datalayer.system.status.time_ota_us);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process
|
// Process
|
||||||
currentMillis = millis();
|
currentMillis = millis();
|
||||||
|
|
|
@ -201,15 +201,21 @@ void KiaHyundaiHybridBattery::transmit_can(unsigned long currentMillis) {
|
||||||
}
|
}
|
||||||
poll_data_pid++;
|
poll_data_pid++;
|
||||||
if (poll_data_pid == 1) {
|
if (poll_data_pid == 1) {
|
||||||
transmit_can_frame(&KIA_7E4_id1);
|
KIA_7E4.data.u8[2] = 0x01;
|
||||||
|
KIA_7E4.data.u8[3] = 0x00;
|
||||||
|
transmit_can_frame(&KIA_7E4);
|
||||||
} else if (poll_data_pid == 2) {
|
} else if (poll_data_pid == 2) {
|
||||||
transmit_can_frame(&KIA_7E4_id2);
|
KIA_7E4.data.u8[2] = 0x02;
|
||||||
|
transmit_can_frame(&KIA_7E4);
|
||||||
} else if (poll_data_pid == 3) {
|
} else if (poll_data_pid == 3) {
|
||||||
transmit_can_frame(&KIA_7E4_id3);
|
KIA_7E4.data.u8[2] = 0x03;
|
||||||
|
transmit_can_frame(&KIA_7E4);
|
||||||
} else if (poll_data_pid == 4) {
|
} else if (poll_data_pid == 4) {
|
||||||
|
//Group 4 not polled
|
||||||
} else if (poll_data_pid == 5) {
|
} else if (poll_data_pid == 5) {
|
||||||
transmit_can_frame(&KIA_7E4_id5);
|
KIA_7E4.data.u8[2] = 0x05;
|
||||||
|
KIA_7E4.data.u8[3] = 0x04;
|
||||||
|
transmit_can_frame(&KIA_7E4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,26 +34,11 @@ class KiaHyundaiHybridBattery : public CanBattery {
|
||||||
uint16_t min_cell_voltage_mv = 3700;
|
uint16_t min_cell_voltage_mv = 3700;
|
||||||
uint16_t max_cell_voltage_mv = 3700;
|
uint16_t max_cell_voltage_mv = 3700;
|
||||||
|
|
||||||
CAN_frame KIA_7E4_id1 = {.FD = false,
|
CAN_frame KIA_7E4 = {.FD = false,
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x7E4,
|
.ID = 0x7E4,
|
||||||
.data = {0x02, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
.data = {0x02, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
||||||
CAN_frame KIA_7E4_id2 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x7E4,
|
|
||||||
.data = {0x02, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
|
||||||
CAN_frame KIA_7E4_id3 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x7E4,
|
|
||||||
.data = {0x02, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
|
||||||
CAN_frame KIA_7E4_id5 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x7E4,
|
|
||||||
.data = {0x02, 0x21, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00}};
|
|
||||||
CAN_frame KIA_7E4_ack = {.FD = false,
|
CAN_frame KIA_7E4_ack = {.FD = false,
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
|
|
|
@ -23,9 +23,6 @@
|
||||||
extern std::string http_username;
|
extern std::string http_username;
|
||||||
extern std::string http_password;
|
extern std::string http_password;
|
||||||
|
|
||||||
bool webserver_enabled =
|
|
||||||
true; // Global flag to enable or disable the webserver //Old method to disable was with #ifdef WEBSERVER
|
|
||||||
|
|
||||||
bool webserver_auth = false;
|
bool webserver_auth = false;
|
||||||
|
|
||||||
// Create AsyncWebServer object on port 80
|
// Create AsyncWebServer object on port 80
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
#include "../../lib/ayushsharma82-ElegantOTA/src/ElegantOTA.h"
|
#include "../../lib/ayushsharma82-ElegantOTA/src/ElegantOTA.h"
|
||||||
#include "../../lib/mathieucarbou-AsyncTCPSock/src/AsyncTCP.h"
|
#include "../../lib/mathieucarbou-AsyncTCPSock/src/AsyncTCP.h"
|
||||||
|
|
||||||
extern bool webserver_enabled;
|
|
||||||
|
|
||||||
extern const char* version_number; // The current software version, shown on webserver
|
extern const char* version_number; // The current software version, shown on webserver
|
||||||
|
|
||||||
// Common charger parameters
|
// Common charger parameters
|
||||||
|
|
|
@ -139,11 +139,10 @@ void AforeCanInverter::map_can_frame_to_variable(CAN_frame rx_frame) {
|
||||||
switch (rx_frame.ID) {
|
switch (rx_frame.ID) {
|
||||||
case 0x305: // Every 1s from inverter
|
case 0x305: // Every 1s from inverter
|
||||||
datalayer.system.status.CAN_inverter_still_alive = CAN_STILL_ALIVE;
|
datalayer.system.status.CAN_inverter_still_alive = CAN_STILL_ALIVE;
|
||||||
char0 = rx_frame.data.u8[0]; // A
|
for (uint8_t i = 0; i < 5; i++) {
|
||||||
char1 = rx_frame.data.u8[0]; // F
|
datalayer.system.info.inverter_brand[i] = rx_frame.data.u8[i];
|
||||||
char2 = rx_frame.data.u8[0]; // O
|
}
|
||||||
char3 = rx_frame.data.u8[0]; // R
|
datalayer.system.info.inverter_brand[7] = '\0';
|
||||||
char4 = rx_frame.data.u8[0]; // E
|
|
||||||
inverter_status = rx_frame.data.u8[7];
|
inverter_status = rx_frame.data.u8[7];
|
||||||
time_to_send_info = true;
|
time_to_send_info = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -16,11 +16,6 @@ class AforeCanInverter : public CanInverterProtocol {
|
||||||
uint8_t inverter_status =
|
uint8_t inverter_status =
|
||||||
0; //0 = init, 1 = standby, 2 = starting, 3 = grid connected, 4 off-grid, 5 diesel generator, 6 grid connected, but disconnected, 7off grid and disconnected, 8 = power failure processing, 9 = power off, 10 = Failure
|
0; //0 = init, 1 = standby, 2 = starting, 3 = grid connected, 4 off-grid, 5 diesel generator, 6 grid connected, but disconnected, 7off grid and disconnected, 8 = power failure processing, 9 = power off, 10 = Failure
|
||||||
bool time_to_send_info = false;
|
bool time_to_send_info = false;
|
||||||
uint8_t char0 = 0;
|
|
||||||
uint8_t char1 = 0;
|
|
||||||
uint8_t char2 = 0;
|
|
||||||
uint8_t char3 = 0;
|
|
||||||
uint8_t char4 = 0;
|
|
||||||
//Actual content messages
|
//Actual content messages
|
||||||
CAN_frame AFORE_350 = {.FD = false, // Operation information
|
CAN_frame AFORE_350 = {.FD = false, // Operation information
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
|
|
|
@ -69,6 +69,10 @@ void BydCanInverter::
|
||||||
BYD_150.data.u8[6] = (fully_charged_capacity_ah >> 8);
|
BYD_150.data.u8[6] = (fully_charged_capacity_ah >> 8);
|
||||||
BYD_150.data.u8[7] = (fully_charged_capacity_ah & 0x00FF);
|
BYD_150.data.u8[7] = (fully_charged_capacity_ah & 0x00FF);
|
||||||
|
|
||||||
|
//Alarms
|
||||||
|
//TODO: BYD Alarms are not implemented yet. Investigation needed on the bits in this message
|
||||||
|
//BYD_190.data.u8[0] =
|
||||||
|
|
||||||
//Voltage (ex 370.0)
|
//Voltage (ex 370.0)
|
||||||
BYD_1D0.data.u8[0] = (datalayer.battery.status.voltage_dV >> 8);
|
BYD_1D0.data.u8[0] = (datalayer.battery.status.voltage_dV >> 8);
|
||||||
BYD_1D0.data.u8[1] = (datalayer.battery.status.voltage_dV & 0x00FF);
|
BYD_1D0.data.u8[1] = (datalayer.battery.status.voltage_dV & 0x00FF);
|
||||||
|
@ -144,21 +148,21 @@ void BydCanInverter::transmit_can(unsigned long currentMillis) {
|
||||||
if (currentMillis - previousMillis2s >= INTERVAL_2_S) {
|
if (currentMillis - previousMillis2s >= INTERVAL_2_S) {
|
||||||
previousMillis2s = currentMillis;
|
previousMillis2s = currentMillis;
|
||||||
|
|
||||||
transmit_can_frame(&BYD_110);
|
transmit_can_frame(&BYD_110); //Send Limits
|
||||||
}
|
}
|
||||||
// Send 10s CAN Message
|
// Send 10s CAN Message
|
||||||
if (currentMillis - previousMillis10s >= INTERVAL_10_S) {
|
if (currentMillis - previousMillis10s >= INTERVAL_10_S) {
|
||||||
previousMillis10s = currentMillis;
|
previousMillis10s = currentMillis;
|
||||||
|
|
||||||
transmit_can_frame(&BYD_150);
|
transmit_can_frame(&BYD_150); //Send States
|
||||||
transmit_can_frame(&BYD_1D0);
|
transmit_can_frame(&BYD_1D0); //Send Battery Info
|
||||||
transmit_can_frame(&BYD_210);
|
transmit_can_frame(&BYD_210); //Send Cell Info
|
||||||
}
|
}
|
||||||
//Send 60s message
|
//Send 60s message
|
||||||
if (currentMillis - previousMillis60s >= INTERVAL_60_S) {
|
if (currentMillis - previousMillis60s >= INTERVAL_60_S) {
|
||||||
previousMillis60s = currentMillis;
|
previousMillis60s = currentMillis;
|
||||||
|
|
||||||
transmit_can_frame(&BYD_190);
|
transmit_can_frame(&BYD_190); //Send Alarm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,8 +170,12 @@ void BydCanInverter::send_initial_data() {
|
||||||
transmit_can_frame(&BYD_250);
|
transmit_can_frame(&BYD_250);
|
||||||
transmit_can_frame(&BYD_290);
|
transmit_can_frame(&BYD_290);
|
||||||
transmit_can_frame(&BYD_2D0);
|
transmit_can_frame(&BYD_2D0);
|
||||||
transmit_can_frame(&BYD_3D0_0);
|
BYD_3D0.data = {0x00, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79}; //Battery
|
||||||
transmit_can_frame(&BYD_3D0_1);
|
transmit_can_frame(&BYD_3D0);
|
||||||
transmit_can_frame(&BYD_3D0_2);
|
BYD_3D0.data = {0x01, 0x2D, 0x42, 0x6F, 0x78, 0x20, 0x50, 0x72}; //-Box Pr
|
||||||
transmit_can_frame(&BYD_3D0_3);
|
transmit_can_frame(&BYD_3D0);
|
||||||
|
BYD_3D0.data = {0x02, 0x65, 0x6D, 0x69, 0x75, 0x6D, 0x20, 0x48}; //emium H
|
||||||
|
transmit_can_frame(&BYD_3D0);
|
||||||
|
BYD_3D0.data = {0x03, 0x56, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00}; //VS
|
||||||
|
transmit_can_frame(&BYD_3D0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,48 +40,33 @@ class BydCanInverter : public CanInverterProtocol {
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x2D0,
|
.ID = 0x2D0,
|
||||||
.data = {0x00, 0x42, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00}}; //BYD
|
.data = {0x00, 0x42, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00}}; //BYD
|
||||||
CAN_frame BYD_3D0_0 = {.FD = false,
|
CAN_frame BYD_3D0 = {.FD = false,
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x3D0,
|
.ID = 0x3D0,
|
||||||
.data = {0x00, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79}}; //Battery
|
.data = {0x00, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79}}; //Battery
|
||||||
CAN_frame BYD_3D0_1 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x3D0,
|
|
||||||
.data = {0x01, 0x2D, 0x42, 0x6F, 0x78, 0x20, 0x50, 0x72}}; //-Box Pr
|
|
||||||
CAN_frame BYD_3D0_2 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x3D0,
|
|
||||||
.data = {0x02, 0x65, 0x6D, 0x69, 0x75, 0x6D, 0x20, 0x48}}; //emium H
|
|
||||||
CAN_frame BYD_3D0_3 = {.FD = false,
|
|
||||||
.ext_ID = false,
|
|
||||||
.DLC = 8,
|
|
||||||
.ID = 0x3D0,
|
|
||||||
.data = {0x03, 0x56, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00}}; //VS
|
|
||||||
//Actual content messages
|
//Actual content messages
|
||||||
CAN_frame BYD_110 = {.FD = false,
|
CAN_frame BYD_110 = {.FD = false, //Limits
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x110,
|
.ID = 0x110,
|
||||||
.data = {0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
.data = {0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
||||||
CAN_frame BYD_150 = {.FD = false,
|
CAN_frame BYD_150 = {.FD = false, //States
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x150,
|
.ID = 0x150,
|
||||||
.data = {0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00}};
|
.data = {0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00}};
|
||||||
CAN_frame BYD_190 = {.FD = false,
|
CAN_frame BYD_190 = {.FD = false, //Alarm
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x190,
|
.ID = 0x190,
|
||||||
.data = {0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
.data = {0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}};
|
||||||
CAN_frame BYD_1D0 = {.FD = false,
|
CAN_frame BYD_1D0 = {.FD = false, //Battery Info
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x1D0,
|
.ID = 0x1D0,
|
||||||
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08}};
|
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08}};
|
||||||
CAN_frame BYD_210 = {.FD = false,
|
CAN_frame BYD_210 = {.FD = false, //Cell info
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
.DLC = 8,
|
.DLC = 8,
|
||||||
.ID = 0x210,
|
.ID = 0x210,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue