#ifndef MqttSensManagerDef #define MqttSensManagerDef 1 /* * cambiar en lugar de a topic a variable---------- SENS_DIGI_IN y SENS_ANALOG_IN publican un topic (set) con el valor correspondiente SENS_DIGI_OUT escuchara los set de un topic y publicara el get SENS_DHT22,//sensor temperatura y humedad sensor dobles de tipo SENS_ANALOG_IN publicaran set del topic asociado pñadiendo /t/set /h/set para temperatura y humedad SENS_BMP180,//sensor presion sensor triple SENS_ANALOG_IN ublicaran set del topic asociado pñadiendo /t/set /p/set /a/set para temperatura, presion, altitud */ #include #include #include #include class PubSubClient; class MqttVarManager; struct DhtExt { byte ivarH;//puntero a variable humedad SimpleDHT22 *p; }; struct BmpExt { byte ivarP; byte ivarA; int pinScl; Adafruit_BMP085 *p; }; struct DinEx { volatile bool change; }; union MqttInfEx//informacion extra segun sensor { DhtExt dht; BmpExt bmp; DinEx din; }; class MqttSensor { public: enum Tipo_sens//indica el tipo de sensor { SENS_NO_ASIG=0,//sensor sin asignar SENS_DHT22,//sensor temperatura y humedad SENS_BMP180,//sensor presion SENS_ANALOG_IN,//sensor analogico in SENS_DIGI_IN,//sensor digital in (algo con 2 estados) SENS_DIGI_OUT,//sensor digital out SENS_DIGI_IN_PULSANTE//pensado para pulsadores (Publicara un put) //SENS_DIGI_IN_OUT//sensor doble de entrada y salida (dos pines que tienen que tener el mismo valor) }; enum Tipo_flags//indica el tipo de sensor { FLAG_NEG=0x01,//indica que el resultado del sensor hay que negarlo (valor invertido) FLAG_INMED=0x02//indica que es un sensor de actualizacion inmediata (interruptores ...) (TODO) }; byte tipo;//tipo sensor byte flags;//flags sensor int pin;//pin de conexion scl para bmp byte ivar;//indice a variable MqttInfEx ie;//informacion extra MqttSensor(); }; //array de sensores-------------------------------------------------------------- class MqttSensArray { public: MqttSensor sens[12];//array de variables int n; MqttSensArray(); MqttSensor* Get(int i); int Add(MqttSensor* var); }; //array de sensores-------------------------------------------------------------- ICACHE_RAM_ATTR void MqttSensManagerInterrupcion0(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion1(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion2(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion3(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion4(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion5(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion6(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion7(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion8(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion9(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion10(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion11(); ICACHE_RAM_ATTR void MqttSensManagerInterrupcion12(); class MqttSensManager { public: static MqttSensManager* pMqttSensManager; MqttSensArray sens;//array de variables MqttVarManager* vars; PubSubClient *client_qqtt; SimpleDHT22 cdht;//clase para leer de dht Adafruit_BMP085 *bmp;//clase bmp bool bloqueo_sens;//bloquea todos los sensores (para poder editarlos) int ind_interrup[13]; int n_inter;//numero de interrupciones unsigned long tiempo_sens; unsigned long incre_tsens; MqttSensManager(); void Config(MqttVarManager* varTopics); int Add(MqttSensor* var); void inicia(); void loop(); int OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado void AddSensor(MqttSensor* sens); // //funcion add sensor void AddHDT22(int pin, char* topic); void AddBMP180(int sda,int scl, char* topic); void AddDin(int pin, char* topic);//añade variable digital que se actualiza de manera instantanea void AddDinAccion(int pin, char* topic);//variable que solo publica en el cambio //funciones auxiliares------------ MqttSensor* Get(int i); void inicia(int i); void procesaSens(); void procesaInterrupciones(); void procesaSensor(int i); //auxiliares de interrupciones----------- void ConfiguraInterrupcion(int i); void OnInterrupcion(int i); }; /* */ #endif