175 lines
3.3 KiB
C++
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
|