mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-04 02:09:30 +02:00
Refactoring led handler, webserver and mqtt to all use a common BE status enum rather than relying on duplicatitng logic or using led color
This commit is contained in:
parent
980d914ffd
commit
d4f0e188fe
5 changed files with 55 additions and 44 deletions
|
@ -143,7 +143,7 @@ SensorConfig batterySensorConfigTemplate[] = {
|
||||||
SensorConfig globalSensorConfigTemplate[] = {{"bms_status", "BMS Status", "", "", "", always},
|
SensorConfig globalSensorConfigTemplate[] = {{"bms_status", "BMS Status", "", "", "", always},
|
||||||
{"pause_status", "Pause Status", "", "", "", always},
|
{"pause_status", "Pause Status", "", "", "", always},
|
||||||
{"event_level", "Event Level", "", "", "", always},
|
{"event_level", "Event Level", "", "", "", always},
|
||||||
{"event_level_color", "Event Level Color", "", "", "", always}};
|
{"emulator_status", "Emulator Status", "", "", "", always}};
|
||||||
|
|
||||||
static std::list<SensorConfig> sensorConfigs;
|
static std::list<SensorConfig> sensorConfigs;
|
||||||
|
|
||||||
|
@ -314,30 +314,8 @@ static bool publish_common_info(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EVENTS_LEVEL_TYPE event_level = get_event_level();
|
doc["event_level"] = get_event_level_string(get_event_level());
|
||||||
doc["event_level"] = String(event_level);
|
doc["emulator_status"] = get_emulator_staus_string(get_emulator_status());
|
||||||
|
|
||||||
// Use Home Assistant Colors https://github.com/home-assistant/core/blob/e2fdc6a98bdd22187688e70701fc3617423a714b/homeassistant/util/color.py#L19
|
|
||||||
String event_level_color = "";
|
|
||||||
switch (event_level)
|
|
||||||
{
|
|
||||||
case EVENT_LEVEL_INFO:
|
|
||||||
event_level_color = "green";
|
|
||||||
break;
|
|
||||||
case EVENT_LEVEL_WARNING:
|
|
||||||
event_level_color = "yellow";
|
|
||||||
break;
|
|
||||||
case EVENT_LEVEL_DEBUG:
|
|
||||||
case EVENT_LEVEL_UPDATE:
|
|
||||||
event_level_color = "blue";
|
|
||||||
break;
|
|
||||||
case EVENT_LEVEL_ERROR:
|
|
||||||
event_level_color = "red";
|
|
||||||
default:
|
|
||||||
event_level_color = "green";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
doc["event_level_color"] = event_level_color;
|
|
||||||
|
|
||||||
serializeJson(doc, mqtt_msg);
|
serializeJson(doc, mqtt_msg);
|
||||||
if (mqtt_publish(state_topic.c_str(), mqtt_msg, false) == false) {
|
if (mqtt_publish(state_topic.c_str(), mqtt_msg, false) == false) {
|
||||||
|
|
|
@ -14,6 +14,7 @@ typedef struct {
|
||||||
static EVENT_TYPE events;
|
static EVENT_TYPE events;
|
||||||
static const char* EVENTS_ENUM_TYPE_STRING[] = {EVENTS_ENUM_TYPE(GENERATE_STRING)};
|
static const char* EVENTS_ENUM_TYPE_STRING[] = {EVENTS_ENUM_TYPE(GENERATE_STRING)};
|
||||||
static const char* EVENTS_LEVEL_TYPE_STRING[] = {EVENTS_LEVEL_TYPE(GENERATE_STRING)};
|
static const char* EVENTS_LEVEL_TYPE_STRING[] = {EVENTS_LEVEL_TYPE(GENERATE_STRING)};
|
||||||
|
static const char* EMULATOR_STATUS_STRING[] = {EMULATOR_STATUS(GENERATE_STRING)};
|
||||||
|
|
||||||
/* Local function prototypes */
|
/* Local function prototypes */
|
||||||
static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched);
|
static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched);
|
||||||
|
@ -393,6 +394,11 @@ const char* get_event_level_string(EVENTS_ENUM_TYPE event) {
|
||||||
return EVENTS_LEVEL_TYPE_STRING[events.entries[event].level] + 12;
|
return EVENTS_LEVEL_TYPE_STRING[events.entries[event].level] + 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* get_event_level_string(EVENTS_LEVEL_TYPE event_level) {
|
||||||
|
// Return the event level but skip "EVENT_LEVEL_TYPE_" that should always be first
|
||||||
|
return EVENTS_LEVEL_TYPE_STRING[event_level] + 17;
|
||||||
|
}
|
||||||
|
|
||||||
const EVENTS_STRUCT_TYPE* get_event_pointer(EVENTS_ENUM_TYPE event) {
|
const EVENTS_STRUCT_TYPE* get_event_pointer(EVENTS_ENUM_TYPE event) {
|
||||||
return &events.entries[event];
|
return &events.entries[event];
|
||||||
}
|
}
|
||||||
|
@ -401,6 +407,27 @@ EVENTS_LEVEL_TYPE get_event_level(void) {
|
||||||
return events.level;
|
return events.level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EMULATOR_STATUS get_emulator_status() {
|
||||||
|
switch (events.level) {
|
||||||
|
case EVENT_LEVEL_DEBUG:
|
||||||
|
case EVENT_LEVEL_INFO:
|
||||||
|
return EMULATOR_STATUS::STATUS_OK;
|
||||||
|
case EVENT_LEVEL_WARNING:
|
||||||
|
return EMULATOR_STATUS::STATUS_WARNING;
|
||||||
|
case EVENT_LEVEL_UPDATE:
|
||||||
|
return EMULATOR_STATUS::STATUS_UPDATING;
|
||||||
|
case EVENT_LEVEL_ERROR:
|
||||||
|
return EMULATOR_STATUS::STATUS_ERROR;
|
||||||
|
default:
|
||||||
|
return EMULATOR_STATUS::STATUS_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* get_emulator_staus_string(EMULATOR_STATUS status) {
|
||||||
|
// Return the status string but skip "STATUS_" that should always be first
|
||||||
|
return EMULATOR_STATUS_STRING[status] + 7;
|
||||||
|
}
|
||||||
|
|
||||||
/* Local functions */
|
/* Local functions */
|
||||||
|
|
||||||
static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched) {
|
static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched) {
|
||||||
|
|
|
@ -126,6 +126,14 @@ typedef enum { EVENTS_ENUM_TYPE(GENERATE_ENUM) } EVENTS_ENUM_TYPE;
|
||||||
|
|
||||||
typedef enum { EVENTS_LEVEL_TYPE(GENERATE_ENUM) } EVENTS_LEVEL_TYPE;
|
typedef enum { EVENTS_LEVEL_TYPE(GENERATE_ENUM) } EVENTS_LEVEL_TYPE;
|
||||||
|
|
||||||
|
#define EMULATOR_STATUS(XX) \
|
||||||
|
XX(STATUS_OK) \
|
||||||
|
XX(STATUS_WARNING) \
|
||||||
|
XX(STATUS_ERROR) \
|
||||||
|
XX(STATUS_UPDATING) \
|
||||||
|
|
||||||
|
typedef enum { EMULATOR_STATUS(GENERATE_ENUM) } EMULATOR_STATUS;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
EVENT_STATE_PENDING = 0,
|
EVENT_STATE_PENDING = 0,
|
||||||
EVENT_STATE_INACTIVE,
|
EVENT_STATE_INACTIVE,
|
||||||
|
@ -151,8 +159,11 @@ struct EventData {
|
||||||
const char* get_event_enum_string(EVENTS_ENUM_TYPE event);
|
const char* get_event_enum_string(EVENTS_ENUM_TYPE event);
|
||||||
String get_event_message_string(EVENTS_ENUM_TYPE event);
|
String get_event_message_string(EVENTS_ENUM_TYPE event);
|
||||||
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
||||||
|
const char* get_event_level_string(EVENTS_LEVEL_TYPE event_level);
|
||||||
|
|
||||||
EVENTS_LEVEL_TYPE get_event_level(void);
|
EVENTS_LEVEL_TYPE get_event_level(void);
|
||||||
|
EMULATOR_STATUS get_emulator_status();
|
||||||
|
const char* get_emulator_staus_string(EMULATOR_STATUS status);
|
||||||
|
|
||||||
void init_events(void);
|
void init_events(void);
|
||||||
void set_event_latched(EVENTS_ENUM_TYPE event, uint8_t data);
|
void set_event_latched(EVENTS_ENUM_TYPE event, uint8_t data);
|
||||||
|
|
|
@ -53,27 +53,25 @@ void LED::exe(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set color
|
// Set color
|
||||||
switch (get_event_level()) {
|
switch (get_emulator_status()) {
|
||||||
case EVENT_LEVEL_INFO:
|
case EMULATOR_STATUS::STATUS_OK:
|
||||||
color = led_color::GREEN;
|
color = led_color::GREEN;
|
||||||
pixels.setPixelColor(COLOR_GREEN(brightness)); // Green pulsing LED
|
pixels.setPixelColor(COLOR_GREEN(brightness)); // Green pulsing LED
|
||||||
break;
|
break;
|
||||||
case EVENT_LEVEL_WARNING:
|
case EMULATOR_STATUS::STATUS_WARNING:
|
||||||
color = led_color::YELLOW;
|
color = led_color::YELLOW;
|
||||||
pixels.setPixelColor(COLOR_YELLOW(brightness)); // Yellow pulsing LED
|
pixels.setPixelColor(COLOR_YELLOW(brightness)); // Yellow pulsing LED
|
||||||
break;
|
break;
|
||||||
case EVENT_LEVEL_DEBUG:
|
case EMULATOR_STATUS::STATUS_ERROR:
|
||||||
case EVENT_LEVEL_UPDATE:
|
|
||||||
color = led_color::BLUE;
|
|
||||||
pixels.setPixelColor(COLOR_BLUE(brightness)); // Blue pulsing LED
|
|
||||||
break;
|
|
||||||
case EVENT_LEVEL_ERROR:
|
|
||||||
color = led_color::RED;
|
color = led_color::RED;
|
||||||
pixels.setPixelColor(COLOR_RED(esp32hal->LED_MAX_BRIGHTNESS())); // Red LED full brightness
|
pixels.setPixelColor(COLOR_RED(esp32hal->LED_MAX_BRIGHTNESS())); // Red LED full brightness
|
||||||
break;
|
break;
|
||||||
default:
|
case EMULATOR_STATUS::STATUS_UPDATING:
|
||||||
|
color = led_color::BLUE;
|
||||||
|
pixels.setPixelColor(COLOR_BLUE(brightness)); // Blue pulsing LED
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pixels.show(); // This sends the updated pixel color to the hardware.
|
pixels.show(); // This sends the updated pixel color to the hardware.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -943,21 +943,18 @@ String processor(const String& var) {
|
||||||
content += "<div style='background-color: ";
|
content += "<div style='background-color: ";
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (led_get_color()) {
|
switch (get_emulator_status()) {
|
||||||
case led_color::GREEN:
|
case EMULATOR_STATUS::STATUS_OK:
|
||||||
content += "#2D3F2F;";
|
content += "#2D3F2F;";
|
||||||
break;
|
break;
|
||||||
case led_color::YELLOW:
|
case EMULATOR_STATUS::STATUS_WARNING:
|
||||||
content += "#F5CC00;";
|
content += "#F5CC00;";
|
||||||
break;
|
break;
|
||||||
case led_color::BLUE:
|
case EMULATOR_STATUS::STATUS_ERROR:
|
||||||
content += "#2B35AF;"; // Blue in test mode
|
|
||||||
break;
|
|
||||||
case led_color::RED:
|
|
||||||
content += "#A70107;";
|
content += "#A70107;";
|
||||||
break;
|
break;
|
||||||
default: // Some new color, make background green
|
case EMULATOR_STATUS::STATUS_UPDATING:
|
||||||
content += "#2D3F2F;";
|
content += "#2B35AF;"; // Blue in test mode
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue