114 lines
2.2 KiB
C++
114 lines
2.2 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[24];//{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[16];
|
|
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
|