DomoEsp_v1/DomoEsp_v01/MqttDesencadenadorManager.h

176 lines
2.9 KiB
C++

#ifndef MqttDesencadenadorManagerDef
#define MqttDesencadenadorManagerDef 1
#include <SPI.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:
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);
};
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 tipo;//tipo de accion (and or ...)
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 act;
MqttCausaManager caus;
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
virtual void OnVarChange(int ivar);
void RevisaDesencadenadores();
};
/*
*
*/
#endif