diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 2556cdd9..02474977 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1446,13 +1446,6 @@ bool hasp_process_obj_attribute_val(lv_obj_t * obj, const char * attr, const cha lv_roller_set_selected(obj, (uint16_t)intval, LV_ANIM_ON); } else if(check_obj_type(obj, LV_HASP_BAR)) { update ? lv_bar_set_value(obj, intval, LV_ANIM_ON) : hasp_out_int(obj, attr, lv_bar_get_value(obj)); - } else if(check_obj_type(obj, LV_HASP_CPICKER)) { - if(update) { - lv_color_t color; - if(haspPayloadToColor(payload, color)) lv_cpicker_set_color(obj, color); - } else { - hasp_out_color(obj, attr, lv_cpicker_get_color(obj)); - } } else { return false; } @@ -1612,6 +1605,19 @@ void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char hasp_process_obj_attribute_txt(obj, attr, payload, update); break; // attribute_found + case ATTR_COLOR: + if(check_obj_type(obj, LV_HASP_CPICKER)) { + if(update) { + lv_color_t color; + if(haspPayloadToColor(payload, color)) lv_cpicker_set_color(obj, color); + } else { + hasp_out_color(obj, attr, lv_cpicker_get_color(obj)); + } + } else { + goto attribute_not_found; + } + break; // attribute_found + case ATTR_VAL: if(!hasp_process_obj_attribute_val(obj, attr, payload, update)) goto attribute_not_found; break; // attribute_found diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index d4b5af63..c50fddd0 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -271,6 +271,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) #define ATTR_MIN 46130 #define ATTR_MAX 45636 #define ATTR_VAL 15809 +#define ATTR_COLOR 58979 #define ATTR_TXT 9328 #define ATTR_SRC 4964 #define ATTR_ID 6715 diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index a58a46f2..311516e8 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -269,22 +269,32 @@ void dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * { if(!attribute || !data) return; - char topic[12]; char payload[32 + strlen(data) + strlen(attribute)]; - snprintf_P(topic, sizeof(payload), PSTR("p%ub%u"), pageid, btnid); snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"%s\"}"), attribute, data); - mqtt_send_state_str(topic, payload); + + mqtt_send_object_state(pageid, btnid, payload); } void dispatch_send_obj_attribute_int(uint8_t pageid, uint8_t btnid, const char * attribute, int32_t val) { if(!attribute) return; - char topic[12]; char payload[64 + strlen(attribute)]; - snprintf_P(topic, sizeof(payload), PSTR("p%ub%u"), pageid, btnid); snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":%d}"), attribute, val); - mqtt_send_state_str(topic, payload); + + mqtt_send_object_state(pageid, btnid, payload); +} + +void dispatch_send_obj_attribute_color(uint8_t pageid, uint8_t btnid, const char * attribute, uint8_t r, uint8_t g, + uint8_t b) +{ + if(!attribute) return; + + char payload[64 + strlen(attribute)]; + snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d}"), attribute, r, g, + b, r, g, b); + + mqtt_send_object_state(pageid, btnid, payload); } #if HASP_USE_CONFIG > 0 @@ -796,7 +806,7 @@ void dispatch_factory_reset(const char *, const char *) static void dispatch_add_command(const char * p_cmdstr, void (*func)(const char *, const char *)) { if(nCommands >= sizeof(commands) / sizeof(haspCommand_t)) { - Log.fatal(TAG_MSGR, F("Dispatchcer command array overflow: %d"), nCommands); + Log.fatal(TAG_MSGR, F("CMD overflow %d"), nCommands); while(1) { } } else { diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index d5a40cba..caf497c7 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -56,7 +56,9 @@ void dispatch_normalized_group_value(uint8_t groupid, uint16_t value, lv_obj_t * void dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data); void dispatch_send_obj_attribute_int(uint8_t pageid, uint8_t btnid, const char * attribute, int32_t val); - +void dispatch_send_obj_attribute_color(uint8_t pageid, uint8_t btnid, const char * attribute, uint8_t r, uint8_t g, + uint8_t b); + /* ===== Getter and Setter Functions ===== */ /* ===== Read/Write Configuration ===== */ diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index ca9ebb4f..fa710c50 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -230,13 +230,14 @@ void hasp_send_obj_attribute_int(lv_obj_t * obj, const char * attribute, int32_t void hasp_send_obj_attribute_color(lv_obj_t * obj, const char * attribute, lv_color_t color) { - char buffer[40]; // "#ffffff","r":"255","g":"255","b":"255" - lv_color32_t c32; + uint8_t pageid; + uint8_t objid; - c32.full = lv_color_to32(color); - snprintf_P(buffer, sizeof(buffer), PSTR("#%02x%02x%02x\",\"r\":\"%d\",\"g\":\"%d\",\"b\":\"%d"), c32.ch.red, - c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue); - hasp_send_obj_attribute_str(obj, attribute, buffer); + if(hasp_find_id_from_obj(obj, &pageid, &objid)) { + lv_color32_t c32; + c32.full = lv_color_to32(color); + dispatch_send_obj_attribute_color(pageid, objid, attribute, c32.ch.red, c32.ch.green, c32.ch.blue); + } } // ##################### Value Senders ######################################################## diff --git a/src/svc/hasp_mqtt.cpp b/src/svc/hasp_mqtt.cpp index 537e61ad..73ebd3a9 100644 --- a/src/svc/hasp_mqtt.cpp +++ b/src/svc/hasp_mqtt.cpp @@ -130,45 +130,18 @@ void mqtt_send_lwt(bool online) // mqttResult(res, tmp_topic, tmp_payload); } -void IRAM_ATTR mqtt_send_state_str(char * subtopic, char * payload) +void mqtt_send_object_state(uint8_t pageid, uint8_t btnid, char * payload) { - char tmp_topic[strlen(mqttNodeTopic) + 20]; - snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/%s"), mqttNodeTopic, subtopic); - bool res = mqttPublish(tmp_topic, payload); - // mqttResult(res, tmp_topic, payload); -} - -void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload) -{ - char tmp_topic[strlen(mqttNodeTopic) + 20]; - snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/%s"), mqttNodeTopic, subtopic); - bool res = mqttPublish(tmp_topic, payload); - // mqttResult(res, tmp_topic, payload); -} - -void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) -{ - // if(mqttIsConnected()) { char tmp_topic[strlen(mqttNodeTopic) + 12]; - char payload[25 + strlen(data) + strlen(attribute)]; - - // snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/json"), mqttNodeTopic); - // unsigned int len = - // snprintf_P(payload, sizeof(payload), PSTR("{\"p[%u].b[%u].%s\":\"%s\"}"), pageid, btnid, attribute, data); snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/p%ub%u"), mqttNodeTopic, pageid, btnid); - unsigned int len = snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"%s\"}"), attribute, data); + bool res = mqttPublish(tmp_topic, payload); +} - bool res = mqttPublish(tmp_topic, payload, len); //, false); - // mqttResult(res, tmp_topic, payload); - - // } else { - // return mqtt_log_no_connection(); - // } - - // Log after char buffers are cleared - // Log.notice(TAG_MQTT_PUB, F("%sstate/json = {\"p[%u].b[%u].%s\":\"%s\"}"), mqttNodeTopic, pageid, btnid, - // attribute, - // data); +void mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload) +{ + char tmp_topic[strlen(mqttNodeTopic) + 20]; + snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/%s"), mqttNodeTopic, subtopic); + bool res = mqttPublish(tmp_topic, payload); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/svc/hasp_mqtt.h b/src/svc/hasp_mqtt.h index 16e896e9..07f92a33 100644 --- a/src/svc/hasp_mqtt.h +++ b/src/svc/hasp_mqtt.h @@ -12,9 +12,8 @@ void mqttEvery5Seconds(bool wifiIsConnected); void mqttStart(); void mqttStop(); -void IRAM_ATTR mqtt_send_state_str(char * subtopic, char * payload); -void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload); -void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data); +void mqtt_send_object_state(uint8_t pageid, uint8_t btnid, char * payload); +void mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload); bool IRAM_ATTR mqttIsConnected();