dashboard: highlight battery card on alarms
This commit is contained in:
@@ -14,6 +14,7 @@ using namespace esp_panel::board;
|
||||
|
||||
static DashboardStatus status_model;
|
||||
|
||||
static lv_obj_t *battery_card_obj = nullptr;
|
||||
static lv_obj_t *battery_soc_arc = nullptr;
|
||||
static lv_obj_t *battery_charge_pulse_arc = nullptr;
|
||||
static lv_obj_t *battery_current_label = nullptr;
|
||||
@@ -61,6 +62,7 @@ static bool pending_relay_previous_state = false;
|
||||
static String last_battery_current_text;
|
||||
static String last_battery_estimate_text;
|
||||
static String last_battery_soc_text;
|
||||
static bool last_battery_card_alert = false;
|
||||
static String last_temp_tile_value_text[2];
|
||||
static String last_temp_tile_name_text[2];
|
||||
static String last_system_status_text;
|
||||
@@ -627,6 +629,34 @@ static void update_temp_tile_alert_style(int index, bool alert)
|
||||
lvgl_port_unlock();
|
||||
}
|
||||
|
||||
|
||||
static void update_battery_card_alert_style(bool alert)
|
||||
{
|
||||
if (battery_card_obj == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (last_battery_card_alert == alert) {
|
||||
return;
|
||||
}
|
||||
|
||||
last_battery_card_alert = alert;
|
||||
|
||||
lvgl_port_lock(-1);
|
||||
|
||||
if (alert) {
|
||||
lv_obj_set_style_bg_color(battery_card_obj, lv_color_hex(0x7A271A), 0);
|
||||
lv_obj_set_style_border_color(battery_card_obj, lv_color_hex(0xF97066), 0);
|
||||
lv_obj_set_style_border_width(battery_card_obj, 3, 0);
|
||||
} else {
|
||||
lv_obj_set_style_bg_color(battery_card_obj, lv_color_hex(0x1F2933), 0);
|
||||
lv_obj_set_style_border_color(battery_card_obj, lv_color_hex(0x3A4652), 0);
|
||||
lv_obj_set_style_border_width(battery_card_obj, 2, 0);
|
||||
}
|
||||
|
||||
lvgl_port_unlock();
|
||||
}
|
||||
|
||||
static void update_overview_widgets()
|
||||
{
|
||||
String current_text = "Idle";
|
||||
@@ -680,6 +710,21 @@ static void parse_status_json(const String &body)
|
||||
|
||||
status_model.api_ok = true;
|
||||
|
||||
bool battery_alarm_active = false;
|
||||
|
||||
if (doc["alarms"].is<JsonObject>()) {
|
||||
JsonObject alarms = doc["alarms"];
|
||||
battery_alarm_active =
|
||||
(alarms["low_soc"] | false) ||
|
||||
(alarms["critical_soc"] | false) ||
|
||||
(alarms["low_voltage"] | false) ||
|
||||
(alarms["high_battery_temp"] | false) ||
|
||||
(alarms["cell_imbalance"] | false) ||
|
||||
(alarms["bms_disconnected"] | false);
|
||||
}
|
||||
|
||||
update_battery_card_alert_style(battery_alarm_active);
|
||||
|
||||
if (doc["battery"].is<JsonObject>()) {
|
||||
JsonObject battery = doc["battery"];
|
||||
status_model.bms_connected = battery["connected"] | status_model.bms_connected;
|
||||
@@ -986,6 +1031,7 @@ static void create_overland_overview_screen()
|
||||
|
||||
lv_obj_t *system_card = create_card(screen, "", 960, 48, LV_ALIGN_TOP_MID, 0, 12);
|
||||
lv_obj_t *battery_card = create_card(screen, "", 380, 310, LV_ALIGN_TOP_LEFT, 32, 76);
|
||||
battery_card_obj = battery_card;
|
||||
lv_obj_t *temp_card = create_card(screen, "", 260, 310, LV_ALIGN_TOP_LEFT, 426, 76);
|
||||
lv_obj_t *vehicle_card = create_card(screen, "", 274, 310, LV_ALIGN_TOP_RIGHT, -32, 76);
|
||||
lv_obj_t *relay_card = create_card(screen, "", 960, 205, LV_ALIGN_BOTTOM_MID, 0, -8);
|
||||
|
||||
Reference in New Issue
Block a user