DomoEsp_v1/DomoEsp_v01_/MqttVarManager.h

175 lines
3.3 KiB
C++

/*#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif*/
#ifndef MqttvarManagerDef
#define MqttvarManagerDef 1
#define MAXTOPICVAR 24//maximo de caracteres de los topic de las variables
#define MAXTVARARRAY 64//maximo de variables que puede contener el amqttvarArray
class PubSubClient;
//array de topic
class MqttTopicAttay
{
public:
char str[1024];//topic de mqtt asociado
int ind[32];
int nst;
int n;
MqttTopicAttay();
char* Get(int i);
int Get(char *topic);
int Add(char *topic);
};
union MQTTvalor
{
float f;
byte i;
};
class MqttVar
{
public:
enum TipoFlags//indica el tipo de sensor
{
OUT_VAR=0x01,//variable de salida (acepta set)
IN_VAR=0x02,//variable de entrada (publica get)
PRIV_VAR=0x04,//variable privada de entrada (acepta get como si fueran set)
FLOAT_VAR=0x08,
ACCION_VAR=0x10,//variable de accion (publica en cada cambio)
};
public:
//generales---------------------------------------------------------------------
byte flags;
MQTTvalor val;//valor de la variable (tiene que ser union porque puede ser double)
byte topic;//topic de mqtt asociado
MqttVar();
};
//array de variables--------------------------------------------------------------
class MqttVarArray
{
public:
MqttVar data[64];//array de variables
int n;
MqttVarArray();
MqttVar* Get(int i);
MqttVar* GetVar(int itopic);
int Add(MqttVar* var);
};
//manager de variables------------------------------------------------------
class MqttVarManager
{
public:
MqttVarArray* vars;//variables mqtt
MqttTopicAttay* topics;
PubSubClient* client_qqtt;//cliente mqtt
unsigned long tiempo_var;
unsigned long incre_tvar;
MqttVarManager();
void config(MqttVarArray *vArray, MqttTopicAttay* t);
void inicia(PubSubClient* client_qqtt);//subscribe variables a mqtt
int OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado
void loop();//publica datos variables
//funciones auxiliares----------------------------
MqttVar* Get(int i);
int AddVar(byte flags, char*topic);
void PublicaVars();
void OnChange(int ivar);
};
/*
//clase de relacciones/operaciones************************************************
class MqttOper
{
public:
byte x;//indice a variable 1
byte y;//indice a variable 2
byte oper;
MqttOper();
bool Test(MqttVarArray* vars);
};
//array de relacciones--------------------------------------------------------------
class MqttOperArray
{
public:
MqttOper data[32];
int n;
MqttVarArray();
MqttOper* Get(int i);
bool test(int *i);
int Add(MqttRelaccion* 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(MqttOperArray *i);
};
class MqttAccion
{
public:
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 ...)
MqttAccion();
bool test(MqttOperArray *i);
};
//falta acciones y efectos
//acciones tienen valor, tipo y ivar(indice a variable)
class MqttDesencadenadorManager
{
public:
MqttDesencadenadorManager();
};
/*
*/
#endif