DomoEsp_v1/DomoEsp_v02/MqttDesencadenadorManager.h

117 lines
2.3 KiB
C++

#ifndef MqttDesencadenadorManagerDef
#define MqttDesencadenadorManagerDef 1
#include <SPI.h>
#include "MqttDefines.h"
#include "MqttVarManager.h"
//expresiones del tipo{1}&{2}
struct MqttExeParam
{
char oper[3];
byte noper;
char var1[8];
byte nvar1;
char var2[8];
byte nvar2;
byte estado;
int i;
bool tvar1;
bool tvar2;
bool toper;
bool tcausa;
bool res;
bool sigue;
bool esAnd;
MqttExeParam()
{
noper=0;
nvar1=0;
nvar2=0;
estado=0;
i=0;
tvar1=false;
tvar2=false;
toper=false;
tcausa=false;
res=true;
sigue=true;
esAnd=true;
var1[0]=0;
var2[0]=0;
}
};
class MqttDesencadenador
{
public:
char expresion[MAXSTRDESEN];//"{1}=1 -> !{2} "
bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse
MqttDesencadenador();
bool Exe(MqttVarManager *vars);
//auxiliar----------------
void procesaVar(MqttExeParam *p);//recoge expresion de variable o float
void procesaOper(MqttExeParam *p);//recoge operador
MQTTvalor GetVarValue(char*ivar, MqttVarManager *vars);
int GetIvar(char*ivar);
MqttVar* GetVar(char*ivar, MqttVarManager *vars);
int GetElementosOper( char *oper);
bool Eval(MqttVarManager *vars, char *oper, char*x, char*y);//evalua operador
void ExeEfecto(MqttVarManager *vars, char *oper, char*x, char*y);//ejecuta efecto
float GetValue(char *ivar, MqttVarManager *vars);
};
class MqttDesencadenadorArray
{
public:
MqttDesencadenador data[MAXDESEN];
int n;
MqttDesencadenadorArray();
MqttDesencadenador* Get(int i);
int Add(MqttDesencadenador* var);
};
//falta acciones y efectos
//acciones tienen valor, tipo y ivar(indice a variable)
class MqttDesencadenadorManager: public MqttOnVarChangeListenner
{
public:
MqttVarManager *vars;
//byte ivars[24];
int nv;
MqttDesencadenadorArray des;
bool revisa;
MqttDesencadenadorManager();
//-------------------
void inicia( MqttVarManager *vars);//inicia variables si hace falta
void Suscribe();//subscribe variables a mqtt
int OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado
void loop();//publica datos variables
//add------------
void AddDes(char *expresion);
virtual void OnVarChange(int ivar);
void RevisaDesencadenadores();
};
/*
*
*/
#endif