diff --git a/include/user_config_override-template.h b/include/user_config_override-template.h index a5bfdff3..db8490fc 100644 --- a/include/user_config_override-template.h +++ b/include/user_config_override-template.h @@ -134,7 +134,7 @@ // #define HASP_FONT_SIZE_4 48 // #define HASP_FONT_SIZE_5 12 -#define LV_FONT_DEFAULT &HASP_FONT_1 +// #define LV_FONT_DEFAULT &HASP_FONT_1 /*************************************************** * GPIO Settings @@ -158,4 +158,4 @@ //#define HASP_LOG_LEVEL LOG_LEVEL_VERBOSE // LOG_LEVEL_* can be DEBUG, VERBOSE, TRACE, INFO, WARNING, ERROR, CRITICAL, ALERT, FATAL, SILENT //#define HASP_LOG_TASKS // Also log the Taskname and watermark of ESP32 tasks -#endif // HASP_USER_CONFIG_OVERRIDE_H \ No newline at end of file +#endif // HASP_USER_CONFIG_OVERRIDE_H diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 085fdf7c..ce316079 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -293,6 +293,31 @@ static hasp_attribute_type_t hasp_process_label_long_mode(lv_obj_t* obj, const c return HASP_ATTR_TYPE_NOT_FOUND; } +static hasp_attribute_type_t hasp_process_cpicker_mode(lv_obj_t* obj, const char* payload, char** text, bool update) +{ + const char* arr[] = {PSTR("hue"), PSTR("saturation"), PSTR("value")}; + uint8_t count = sizeof(arr) / sizeof(arr[0]); + uint8_t i = 0; + + if(update) { + for(i = 0; i < count; i++) { + if(!strcasecmp_P(payload, arr[i])) { + lv_cpicker_set_color_mode(obj, (lv_cpicker_color_mode_t)i); + break; + } + } + } else { + i = lv_cpicker_get_color_mode(obj); + } + + if(i < count) { + strcpy_P(*text, arr[i]); + return HASP_ATTR_TYPE_STR; + } + + return HASP_ATTR_TYPE_NOT_FOUND; +} + size_t hasp_attribute_split_payload(const char* payload) { size_t pos = 0; @@ -1602,6 +1627,9 @@ static hasp_attribute_type_t attribute_common_mode(lv_obj_t* obj, const char* pa } return HASP_ATTR_TYPE_INT; + case LV_HASP_CPICKER: + return hasp_process_cpicker_mode(obj, payload, text, update); + default: break; // not found } @@ -1821,7 +1849,8 @@ static hasp_attribute_type_t specific_bool_attribute(lv_obj_t* obj, uint16_t att { // bool but obj is not const hasp_attr_update_bool_t list[] = { {LV_HASP_DROPDOWN, ATTR_SHOW_SELECTED, lv_dropdown_set_show_selected, lv_dropdown_get_show_selected}, - {LV_HASP_IMAGE, ATTR_ANTIALIAS, lv_img_set_antialias, lv_img_get_antialias}}; + {LV_HASP_IMAGE, ATTR_ANTIALIAS, lv_img_set_antialias, lv_img_get_antialias}, + {LV_HASP_CPICKER, ATTR_MODE_FIXED, lv_cpicker_set_color_mode_fixed, lv_cpicker_get_color_mode_fixed}}; if(do_attribute(list, obj, attr_hash, val, update)) return HASP_ATTR_TYPE_BOOL; } @@ -2744,6 +2773,7 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attribute, const char case ATTR_SHOW_SELECTED: case ATTR_Y_INVERT: case ATTR_ANTIALIAS: + case ATTR_MODE_FIXED: val = Parser::is_true(payload); ret = specific_bool_attribute(obj, attr_hash, val, update); break; diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index 7b7c5778..c5c1b742 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -433,6 +433,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) #define ATTR_COMMENT 62559 #define ATTR_TAG 7866 #define ATTR_JSONL 61604 +#define ATTR_MODE_FIXED 35736 // methods #define ATTR_DELETE 50027 diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index 62c579a6..686e9d5f 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -836,6 +836,7 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) /* Get the new value */ lv_color_t color = lv_cpicker_get_color(obj); + lv_cpicker_color_mode_t mode = lv_cpicker_get_color_mode(obj); if(hasp_event_id == HASP_EVENT_CHANGED && last_color_sent.full == color.full) return; // same value as before @@ -845,17 +846,19 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) Parser::get_event_name(hasp_event_id, eventname, sizeof(eventname)); lv_color32_t c32; + lv_color_hsv_t hsv; c32.full = lv_color_to32(color); + hsv = lv_color_rgb_to_hsv(c32.ch.red, c32.ch.green, c32.ch.blue); last_color_sent = color; if(const char* tag = my_obj_get_tag(obj)) snprintf_P(data, sizeof(data), - PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"tag\":%s}"), - eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, tag); + PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d,\"tag\":%s}"), + eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v, tag); else snprintf_P(data, sizeof(data), - PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d}"), eventname, - c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue); + PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d}"), eventname, + c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v); } event_send_object_data(obj, data); diff --git a/src/mqtt/hasp_mqtt.h b/src/mqtt/hasp_mqtt.h index 5ae231ea..63e9ed9e 100644 --- a/src/mqtt/hasp_mqtt.h +++ b/src/mqtt/hasp_mqtt.h @@ -73,7 +73,7 @@ bool mqttSetConfig(const JsonObject& settings); // These defaults may be overwritten with values saved by the web interface #ifndef MQTT_GROUPNAME -#define MQTT_GROUPNAME "plates"; +#define MQTT_GROUPNAME "plates" #endif #ifndef MQTT_HOSTNAME @@ -104,4 +104,4 @@ bool mqttSetConfig(const JsonObject& settings); #endif #endif -#endif // HASP_MQTT_H \ No newline at end of file +#endif // HASP_MQTT_H diff --git a/src/mqtt/hasp_mqtt_esp.cpp b/src/mqtt/hasp_mqtt_esp.cpp index 21bfbe13..8018f766 100644 --- a/src/mqtt/hasp_mqtt_esp.cpp +++ b/src/mqtt/hasp_mqtt_esp.cpp @@ -26,7 +26,7 @@ #include "esp_tls.h" #define MQTT_DEFAULT_NODE_TOPIC MQTT_PREFIX "/%hostname%/%topic%" -#define MQTT_DEFAULT_GROUP_TOPIC MQTT_PREFIX "/plates/%topic%" +#define MQTT_DEFAULT_GROUP_TOPIC MQTT_PREFIX "/" MQTT_GROUPNAME "/%topic%" #define MQTT_DEFAULT_BROADCAST_TOPIC MQTT_PREFIX "/" MQTT_TOPIC_BROADCAST "/%topic%" #define MQTT_DEFAULT_HASS_TOPIC "homeassistant/status" @@ -509,7 +509,7 @@ void mqttStart() subtopic.reserve(64); String nvsOldGroup = MQTT_PREFIX "/"; // recover group setting - nvsOldGroup += preferences.getString(FP_CONFIG_GROUP, "plates"); + nvsOldGroup += preferences.getString(FP_CONFIG_GROUP, MQTT_GROUPNAME); nvsOldGroup += "/%topic%"; subtopic = F(MQTT_TOPIC_COMMAND); @@ -700,7 +700,7 @@ bool mqttGetConfig(const JsonObject& settings) { String nvsOldGroup = MQTT_PREFIX "/"; // recover group setting - nvsOldGroup += preferences.getString(FP_CONFIG_GROUP, "plates"); + nvsOldGroup += preferences.getString(FP_CONFIG_GROUP, MQTT_GROUPNAME); nvsOldGroup += "/%topic%"; String nvsGroupTopic = @@ -784,7 +784,7 @@ bool mqttSetConfig(const JsonObject& settings) } // if(strlen(mqttGroupName) == 0) { - // strcpy_P(mqttGroupName, PSTR("plates")); + // strcpy_P(mqttGroupName, PSTR(MQTT_GROUPNAME)); // changed = true; // }