190 lines
3.3 KiB
C++
190 lines
3.3 KiB
C++
|
|
#ifndef MqttDesencadenadorManagerDef
|
|
#define MqttDesencadenadorManagerDef 1
|
|
#include <SPI.h>
|
|
#include "MqttDefines.h"
|
|
#include "MqttVarManager.h"
|
|
//clase de relacciones/operaciones************************************************
|
|
class MqttOper
|
|
{
|
|
//
|
|
public:
|
|
enum TipoOperacion
|
|
{
|
|
Igual_val_oper,
|
|
Menor_val_oper,
|
|
Mayor_val_oper,
|
|
};
|
|
byte x;//indice a variable 1
|
|
byte y;//indice a variable 2
|
|
MQTTvalor val;
|
|
byte oper;//tipo de operacion
|
|
|
|
MqttOper();
|
|
|
|
bool Test(MqttVarManager* vars);
|
|
|
|
};
|
|
|
|
//array de operaciones--------------------------------------------------------------
|
|
class MqttOperArray
|
|
{
|
|
public:
|
|
MqttOper data[32];
|
|
int n;
|
|
|
|
|
|
MqttOperArray();
|
|
|
|
MqttOper* Get(int i);
|
|
|
|
int Add(MqttOper* var);
|
|
|
|
};
|
|
|
|
class MqttCausa
|
|
{
|
|
public:
|
|
enum TipoCausa
|
|
{
|
|
AND_CAUSA=1,
|
|
OR_CAUSA,
|
|
};
|
|
byte ini;//indice a primer oper
|
|
byte n;//numero de operadores totales
|
|
byte tipo;//tipo de causa (and or ...)
|
|
|
|
MqttCausa();
|
|
|
|
bool Test(MqttVarManager *i);
|
|
|
|
};
|
|
|
|
class MqttCausaArray
|
|
{
|
|
public:
|
|
MqttCausa data[16];
|
|
int n;
|
|
MqttCausaArray();
|
|
|
|
|
|
MqttCausa* Get(int i);
|
|
|
|
int Add(MqttCausa* var);;
|
|
|
|
};
|
|
|
|
class MqttCausaManager
|
|
{
|
|
public:
|
|
MqttCausaArray caus;
|
|
MqttOperArray oper;
|
|
MqttCausaManager();
|
|
bool IsTrue(int icau, MqttVarManager *vars);
|
|
int AddCausa(byte tipo);
|
|
int AddEfecto(int icau,byte tipo, int ivar, MQTTvalor *val);
|
|
|
|
};
|
|
|
|
class MqttEfecto
|
|
{
|
|
public:
|
|
enum TipoEfecto
|
|
{
|
|
InvierteValVar=1,//invierte valor a variable
|
|
SetValVar//setea el valor asignado en el efecto a la variable
|
|
};
|
|
|
|
MQTTvalor val;
|
|
byte ia;//indice externo (dependiendo del tipo puede ser a una variable o topic o sensor ...)
|
|
byte tipo;//tipo de accion (and or ...)
|
|
|
|
|
|
MqttEfecto();
|
|
|
|
void Exe(MqttVarManager *i);
|
|
|
|
};
|
|
|
|
class MqttEfectoArray
|
|
{
|
|
public:
|
|
MqttEfecto data[16];
|
|
int n;
|
|
|
|
|
|
MqttEfectoArray();
|
|
|
|
MqttEfecto* Get(int i);
|
|
|
|
int Add(MqttEfecto* var);
|
|
|
|
};
|
|
|
|
|
|
class MqttDesencadenador
|
|
{
|
|
public:
|
|
MQTTvalor val;
|
|
byte ie;//indice a efecto
|
|
byte ic;//indice a causa
|
|
byte ne;//numero de efectos total
|
|
|
|
|
|
MqttDesencadenador();
|
|
|
|
void Exe(MqttVarManager *i, MqttEfectoArray *act, MqttCausaManager* caus);
|
|
};
|
|
|
|
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;
|
|
MqttEfectoArray efec;
|
|
MqttCausaManager caus;
|
|
MqttDesencadenadorArray des;
|
|
bool revisa;
|
|
MqttDesencadenadorManager();
|
|
|
|
//add---------------------
|
|
int addDesencadenador(byte tipoCausa);
|
|
int addEfecto(int ides,byte tipo, char *topic);//añade efecto al desencadenador (devuelve id efecto)
|
|
int addOperCausaI(int ides, char *topic, byte tipo, byte val );
|
|
int addOperCausaF(int ides, char *topic, int tipo, float val );
|
|
//-------------------
|
|
|
|
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
|
|
|
|
|
|
|
|
virtual void OnVarChange(int ivar);
|
|
|
|
|
|
|
|
void RevisaDesencadenadores();
|
|
|
|
};
|
|
/*
|
|
*
|
|
*/
|
|
#endif
|