#ifndef MqttDesencadenadorManagerDef #define MqttDesencadenadorManagerDef 1 #include #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(); void Exe(MqttVarManager *vars); //auxiliar---------------- void procesaVar(MqttExeParam *p); void procesaOper(MqttExeParam *p); 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); void ExeEfecto(MqttVarManager *vars, char *oper, char*x, char*y); 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