diff --git a/main/ihm.c b/main/ihm.c index 51d9ce8..41fe71f 100644 --- a/main/ihm.c +++ b/main/ihm.c @@ -9,6 +9,8 @@ #include "meteofrance.h" #include "main.h" #include "bsp/esp-bsp.h" +#include "cJSON.h" + #define upEvent "monter" #define downEvent "descendre" @@ -93,6 +95,8 @@ static void draw_temp(char * tempHumid){ lv_obj_t* myChart; lv_chart_series_t * ser; lv_obj_t *lblHauteurCuve; +lv_obj_t* lblEtatMachine; + void drawIhm(void *xIHMEventQueueParam) { QueueHandle_t xIHMEventQueue = (QueueHandle_t)xIHMEventQueueParam; @@ -140,7 +144,6 @@ void drawIhm(void *xIHMEventQueueParam) { break; case IHM_EVT_PUISSANCE_EMISE: - case IHM_EVT_ETAT_MACHINE: if (display_lock("updateChart")) { int val = (int)xReceivedEvent->pvData; if (val == 0) { @@ -148,6 +151,30 @@ void drawIhm(void *xIHMEventQueueParam) { } else { lv_chart_set_next_value(myChart, ser, val); } + display_unlock("updateChart"); + } + break; + case IHM_EVT_ETAT_MACHINE: + if (display_lock("updateChart")) { + char * etatMachine = xReceivedEvent->pvData; + ESP_LOGE(TAG,"Etat Machine : %s", etatMachine); + cJSON *root = cJSON_Parse(etatMachine); + bool enRoute = cJSON_GetObjectItem(root,"state")->valueint; + int depuisQuand= cJSON_GetObjectItem(root,"timestamp")->valueint; + ESP_LOGE(TAG,"Timestamp lu : %i", depuisQuand); + time_t rawtime = (time_t)(depuisQuand); + struct tm *heure_locale = localtime(&rawtime); + char heureFormattee[50]; + strftime(heureFormattee, sizeof(heureFormattee), "%d/%m/%Y %I:%M:%S %p", heure_locale); + ESP_LOGE(TAG,"Heure: %s", heureFormattee); + char etatFormate[90]; + if(enRoute){ + sprintf(etatFormate,"Machine en route depuis %s", heureFormattee); + }else{ + sprintf(etatFormate,"Machine : Arrêt détecté depuis %s", heureFormattee); + } + ESP_LOGE(TAG,"%s", etatFormate); + lv_label_set_text(lblEtatMachine,etatFormate); display_unlock("updateChart"); } break; @@ -709,11 +736,11 @@ static void draw_event_cb(lv_event_t * e) } } -lv_obj_t* lblEtatMachine; void draw_tabMinuteur(lv_obj_t * parent) { lblEtatMachine = lv_label_create(parent); lv_label_set_text(lblEtatMachine,"Machine: "); + lv_obj_set_style_text_font(lblEtatMachine,lv_theme_get_font_normal(lblEtatMachine),0); myChart = lv_chart_create(parent); lv_chart_set_type(myChart, LV_CHART_TYPE_BAR); lv_chart_set_point_count(myChart, 30); diff --git a/main/main.c b/main/main.c index d600785..d059459 100644 --- a/main/main.c +++ b/main/main.c @@ -153,16 +153,16 @@ void mqtt_cb(mqtt_evt evt, esp_mqtt_event_handle_t event){ }else if (strncmp(event->topic, topicTest, event->topic_len) == 0){ ESP_LOGD(TAG,"Msg reecu sur test"); }else if (strncmp(event->topic, topicConsoElec, event->topic_len) == 0){ - char* datas = malloc(event->data_len+1); - strncpy(datas, event->data, event->data_len); + //char* datas = malloc(event->data_len+1); + //strncpy(datas, event->data, event->data_len); - send_event(EVT_PUISSANCE_RECUE,(int*)atoi(datas)); + send_event(EVT_PUISSANCE_RECUE,(int*)atoi(event->data)); }else if (strncmp(event->topic, topicEtatMachine, event->topic_len) == 0){ char* datas = malloc(event->data_len+1); strncpy(datas, event->data, event->data_len); - send_event(EVT_ETAT_MACHINE,(int*)atoi(datas)); + send_event(EVT_ETAT_MACHINE,datas); }else if (strncmp(event->topic, topicdomoticCommand, event->topic_len) == 0){ if(strncmp(event->data,"restart",7)==0){ @@ -240,9 +240,17 @@ void send_event(domo_events evt, void* pDatas) { break; case EVT_ETAT_MACHINE: + const char *msg2 = (const char *)pDatas; + char *msg_copy2 = malloc(strlen(msg2) + 1); + if (!msg_copy2) { + ESP_LOGE(TAG, "malloc failed for message string"); + free(ihmEvt); + return; + } + strcpy(msg_copy2, msg2); ihmEvt->eEventType = IHM_EVT_ETAT_MACHINE; - ihmEvt->pvData = pDatas; - ihmEvt->bNeedToFreeData = false; + ihmEvt->pvData = msg_copy2; + ihmEvt->bNeedToFreeData = true; break; case EVT_HAUTEUR_CUVE: { @@ -254,7 +262,6 @@ void send_event(domo_events evt, void* pDatas) { } *data = *(float *)pDatas; ESP_LOGE(TAG, "EVENT_HANDLER -> On a recu %f", *data); - ihmEvt->eEventType = IHM_EVT_HAUTEUR_CUVE; ihmEvt->pvData = data; ihmEvt->bNeedToFreeData = true; @@ -267,7 +274,7 @@ void send_event(domo_events evt, void* pDatas) { return; } ESP_LOGE(TAG, "Envoi d'un evt %i a l'IHM", ihmEvt->eEventType); - if (xQueueSendToFront(ihm_queue, &ihmEvt, pdMS_TO_TICKS(10)) != pdPASS) { + if (ihmEvt && xQueueSendToFront(ihm_queue, &ihmEvt, pdMS_TO_TICKS(10)) != pdPASS) { ESP_LOGE(TAG, "La queue est pleine"); if (ihmEvt->bNeedToFreeData && ihmEvt->pvData) { free(ihmEvt->pvData);