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 "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);

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){
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);