/*#if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif*/ #ifndef MqttvarManagerDef #define MqttvarManagerDef 1 #include "MqttDefines.h" class PubSubClient; //array de topic class MqttTopicAttay { public: char str[MAXSTR];//topic de mqtt asociado int ind[MAXVAR]; 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,//variable en coma flotante ACCION_VAR=0x10,//variable de accion (publica en cada cambio) VOLATILE_VAR=0x20, //marca variable que una vez revisada se cambia internamente su valor (usado en desencadenadores para variables de accion) CHANGE_VAR=0x40, //publica con set en lugar de get }; 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[MAXVAR];//array de variables int n; MqttVarArray(); MqttVar* Get(int i); MqttVar* GetVar(int itopic); int Add(MqttVar* var); }; class MqttOnVarChangeListenner; //manager de variables------------------------------------------------------ class MqttVarManager { MqttVarArray _v; MqttTopicAttay _t; MqttOnVarChangeListenner* onChangeListener[2]; int nListenner; 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=NULL, MqttTopicAttay* t=NULL); void SetTimeRefres(int seg); void inicia(PubSubClient *client_qqtt);//inicia variables si hace falta void Suscribe();//subscribe variables a mqtt void OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado void loop();//publica datos variables //funciones auxiliares---------------------------- void AddListenner(MqttOnVarChangeListenner *pOnChangeListener); MqttVar* Get(int i); int GetId(char* topic);//devuelve el id de una variable int AddVar(byte flags, char*topic); int AddVirtualOutVarInt( char*topic); int AddInternalVarFloat( char*topic); int AddInternalVarInt( char*topic); void PublicaVars(); void PublicaVar(int ivar); void OnChange(int ivar, bool publica); void ResetVolatileVar(); void InvierteVar(int ivar); void SetVal(int ivar,MQTTvalor val); }; /* */ #endif