#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 "MqttDefines.h" #include class SonidoBuzzer; //class PubSubClient; class MqttVarManager; #include #include #include struct DhtExt { byte ivarH;//puntero a variable humedad SimpleDHT22 *p; }; struct BmpExt { byte ivarP; byte ivarA; int pinScl; Adafruit_BMP085 *p; }; 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_BUZZ_OUT,//sensor digital out con buzzer conectado //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(); void Set(MqttSensor *s); }; //array de sensores-------------------------------------------------------------- class MqttSensArray { public: MqttSensor sens[MAXSENS];//array de variables int n; MqttSensArray(); MqttSensor* Get(int i); MqttSensor* Ivar2Sen(int ivar); 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 MqttOnVarChangeListenner { public: MqttSensArray sens;//array de variables MqttVarManager* vars; PubSubClient *client_qqtt; SimpleDHT22 cdht;//clase para leer de dht Adafruit_BMP085 bmp;//clase bmp SonidoBuzzer *buzz; bool bloqueo_sens;//bloquea todos los sensores (para poder editarlos) int ind_interrup[MAXINTERRUP]; int n_inter;//numero de interrupciones unsigned long tiempo_sens; unsigned long incre_tsens; MqttSensManager(); void Config(MqttVarManager* varTopics); void SetTimeRefres(int seg); 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 //tempe y humedad void AddHDT22(int pin, char* topic); //tempe y presion varometrica void AddBMP180(int sda,int scl, char* topic); //entradas digitales void AddDin(int pin, char* topic);//añade variable digital que se actualiza de manera instantanea (interruptores sensor presencia ..) void AddDinAccion(int pin, char* topic);//añade variable que solo publica en el cambio (pulsadores, ...) //salida digital void AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...) void AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ... void AddBuzz(int pin, char* topic); void AddMelodia(char* m); //funciones auxiliares------------ MqttSensor* Get(int i); void inicia(int i); void procesaSens(); void procesaInterrupciones(); void procesaSensor(int i); //auxiliares de interrupciones----------- void ConfiguraInterrupcion(int isen); void OnInterrupcion(int i); virtual void OnVarChange(int ivar); }; #ifndef pMqttSensManagerdef #define pMqttSensManagerdef 1 static volatile bool MqttChangeInterrup=false; static MqttSensManager* pMqttSensManager; #endif /* */ #endif