lecture etat machine

This commit is contained in:
marc 2025-05-21 12:31:20 +02:00
parent de8d9ede17
commit 555a6c6b6a
2 changed files with 44 additions and 10 deletions

View File

@ -9,6 +9,8 @@
#include "meteofrance.h" #include "meteofrance.h"
#include "main.h" #include "main.h"
#include "bsp/esp-bsp.h" #include "bsp/esp-bsp.h"
#include "cJSON.h"
#define upEvent "monter" #define upEvent "monter"
#define downEvent "descendre" #define downEvent "descendre"
@ -93,6 +95,8 @@ static void draw_temp(char * tempHumid){
lv_obj_t* myChart; lv_obj_t* myChart;
lv_chart_series_t * ser; lv_chart_series_t * ser;
lv_obj_t *lblHauteurCuve; lv_obj_t *lblHauteurCuve;
lv_obj_t* lblEtatMachine;
void drawIhm(void *xIHMEventQueueParam) { void drawIhm(void *xIHMEventQueueParam) {
QueueHandle_t xIHMEventQueue = (QueueHandle_t)xIHMEventQueueParam; QueueHandle_t xIHMEventQueue = (QueueHandle_t)xIHMEventQueueParam;
@ -140,7 +144,6 @@ void drawIhm(void *xIHMEventQueueParam) {
break; break;
case IHM_EVT_PUISSANCE_EMISE: case IHM_EVT_PUISSANCE_EMISE:
case IHM_EVT_ETAT_MACHINE:
if (display_lock("updateChart")) { if (display_lock("updateChart")) {
int val = (int)xReceivedEvent->pvData; int val = (int)xReceivedEvent->pvData;
if (val == 0) { if (val == 0) {
@ -148,6 +151,30 @@ void drawIhm(void *xIHMEventQueueParam) {
} else { } else {
lv_chart_set_next_value(myChart, ser, val); 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"); display_unlock("updateChart");
} }
break; 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) void draw_tabMinuteur(lv_obj_t * parent)
{ {
lblEtatMachine = lv_label_create(parent); lblEtatMachine = lv_label_create(parent);
lv_label_set_text(lblEtatMachine,"Machine: "); 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); myChart = lv_chart_create(parent);
lv_chart_set_type(myChart, LV_CHART_TYPE_BAR); lv_chart_set_type(myChart, LV_CHART_TYPE_BAR);
lv_chart_set_point_count(myChart, 30); lv_chart_set_point_count(myChart, 30);

View File

@ -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){ }else if (strncmp(event->topic, topicTest, event->topic_len) == 0){
ESP_LOGD(TAG,"Msg reecu sur test"); ESP_LOGD(TAG,"Msg reecu sur test");
}else if (strncmp(event->topic, topicConsoElec, event->topic_len) == 0){ }else if (strncmp(event->topic, topicConsoElec, event->topic_len) == 0){
char* datas = malloc(event->data_len+1); //char* datas = malloc(event->data_len+1);
strncpy(datas, event->data, event->data_len); //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){ }else if (strncmp(event->topic, topicEtatMachine, event->topic_len) == 0){
char* datas = malloc(event->data_len+1); char* datas = malloc(event->data_len+1);
strncpy(datas, event->data, event->data_len); 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){ }else if (strncmp(event->topic, topicdomoticCommand, event->topic_len) == 0){
if(strncmp(event->data,"restart",7)==0){ if(strncmp(event->data,"restart",7)==0){
@ -240,9 +240,17 @@ void send_event(domo_events evt, void* pDatas) {
break; break;
case EVT_ETAT_MACHINE: 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->eEventType = IHM_EVT_ETAT_MACHINE;
ihmEvt->pvData = pDatas; ihmEvt->pvData = msg_copy2;
ihmEvt->bNeedToFreeData = false; ihmEvt->bNeedToFreeData = true;
break; break;
case EVT_HAUTEUR_CUVE: { case EVT_HAUTEUR_CUVE: {
@ -254,7 +262,6 @@ void send_event(domo_events evt, void* pDatas) {
} }
*data = *(float *)pDatas; *data = *(float *)pDatas;
ESP_LOGE(TAG, "EVENT_HANDLER -> On a recu %f", *data); ESP_LOGE(TAG, "EVENT_HANDLER -> On a recu %f", *data);
ihmEvt->eEventType = IHM_EVT_HAUTEUR_CUVE; ihmEvt->eEventType = IHM_EVT_HAUTEUR_CUVE;
ihmEvt->pvData = data; ihmEvt->pvData = data;
ihmEvt->bNeedToFreeData = true; ihmEvt->bNeedToFreeData = true;
@ -267,7 +274,7 @@ void send_event(domo_events evt, void* pDatas) {
return; return;
} }
ESP_LOGE(TAG, "Envoi d'un evt %i a l'IHM", ihmEvt->eEventType); 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"); ESP_LOGE(TAG, "La queue est pleine");
if (ihmEvt->bNeedToFreeData && ihmEvt->pvData) { if (ihmEvt->bNeedToFreeData && ihmEvt->pvData) {
free(ihmEvt->pvData); free(ihmEvt->pvData);