domotic/components/washingMachineState/washingMachineState.c

87 lines
2.0 KiB
C

#include <stdio.h>
#include <cJSON.h>
#include <esp_log.h>
#include "washingMachineState.h"
#include "eventsManager.h"
#include <time.h>
#define TAG "WMS"
WashingMachineState wms;
bool stateOn; // Indique si la machine est en route
WashingMachineState traiteMessage(char* message){
cJSON *root = cJSON_Parse(message);
char* json = cJSON_PrintUnformatted(root);
ESP_LOGE(TAG, "%s", json);
bool state = cJSON_IsTrue(cJSON_GetObjectItem(root, "state"));
double timestamp = cJSON_GetNumberValue(cJSON_GetObjectItem(root, "timestamp"));
bool ack = cJSON_HasObjectItem(root,"ack") && cJSON_GetNumberValue(cJSON_GetObjectItem(root,"ack"));
//char dateStr[80] ;
//timestampToDate(timestamp,dateStr,80);
wms.etat = state?LAVEUSE_LAVAGE:LAVEUSE_ARRET;
wms.depuis = timestamp;
wms.ack = ack;
if(wms.etat==LAVEUSE_LAVAGE){
stateOn=true;
}
if(wms.etat==LAVEUSE_ARRET && stateOn){
//Fin détectée !
stateOn=false;
send_event(EVT_FIN_MACHINE, NULL);
}
cJSON_Delete(root);
return wms;
}
void timestampToDate(double timestamp, char* dateStr, size_t dateStrSize)
{
time_t ts = timestamp;
struct tm *pTime = localtime(&ts);
strftime(dateStr, dateStrSize, "%d/%m/%Y %H:%M:%S", pTime);
//printf("Date and french time : %s\n", dateStr);
}
WashingMachineState getEtatMachine(){
return wms;
}
void getEtatMachineStr(WashingMachineState wms, char* etat, size_t etatSize)
{
char* etatStr;
switch (wms.etat)
{
case LAVEUSE_ARRET:
/* code */
etatStr="Machine arretée";
break;
case LAVEUSE_LAVAGE:
/* code */
etatStr="Machine en route";
break;
default:
etatStr="Etat inconnu";
break;
}
char dateStr[30];
timestampToDate(wms.depuis,dateStr,30);
snprintf(etat,etatSize,"%s depuis %s", etatStr, dateStr);
ESP_LOGE(TAG,"%s",etat);
}
void acknoledge(){
wms.ack=true;
}