179 lines
4.3 KiB
C++
179 lines
4.3 KiB
C++
|
|
#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 <SimpleDHT.h>
|
|
#include <Wire.h>
|
|
#include <Adafruit_BMP085.h>
|
|
#include <PubSubClient.h>
|
|
|
|
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
|