/*#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