DomoEsp_v2.0/DomoEspSensor/configuracionActual.h

175 lines
4.3 KiB
C++

#ifndef DomoConfActualDef
#define DomoConfActualDef 1
#include "DomoEspConfig.h"
#include "SensorDout.h"
#include "SensorDHT.h"
#include "SensorDin.h"
#include "SensorPulsante.h"
#include "SensorAin.h"
#include "SensorVD.h"
#include "SensorRF.h"
#include "MecanismoPulso.h"
//----------------------------------------------------------------------------------------------------------------------------------------------
class AutomatismoPulsador//automatismo para encender luz con interruptor o pulsador
{
MecanismoPulso pulsador;//cambia estado con pulsador
public:
AutomatismoPulsador(){}
void inicia(ISensorManager* man, DomoEspSensorReceiver* tp_pul, DomoEspSensorReceiver* tpOut, DomoEspSensorReceiver* bloqueo=NULL )
{
inicia(man, tp_pul->topic, tpOut->topic, bloqueo);
}
void inicia(ISensorManager* man, char* tp_pul, char* tpOut, DomoEspSensorReceiver* bloqueo=NULL )
{
pulsador.set(tp_pul, tpOut, 0);
pulsador.setValSend("X");
if(bloqueo)
{
pulsador.AddActivador(bloqueo,'>',0);
}
man->Add(&pulsador);
}
};
class AutomatismoPresencia//automatismo para encender luz con presencia
{
MecanismoPulso presenciaOn;
MecanismoPulso presenciaOff;
MecanismoPulso nivelLuzOff;
float fnivelLuz;
public:
AutomatismoPresencia()
{
fnivelLuz=50;
strcpy(presenciaOn.id, "PresOn");
strcpy(presenciaOff.id, "PresOff");
strcpy(nivelLuzOff.id, "luzOff");
}
void inicia(ISensorManager* man, DomoEspSensorReceiver* presencia, DomoEspSensorReceiver* nivelluz, DomoEspSensorReceiver* out, DomoEspSensorReceiver* bloqueo=NULL )
{
presenciaOn.set(presencia->topic, out->topic, 0);
presenciaOn.setValSend("1");
presenciaOn.AddActivador(nivelluz,'<',fnivelLuz);//nivel de luz bajo
presenciaOn.AddActivador(out,'<',1);//out apagada
presenciaOn.AddActivador(presencia,'>',0);//presencia
if(bloqueo)
{
presenciaOn.AddActivador(bloqueo,'>',0);
}
presenciaOff.set(presencia->topic, out->topic, 0);
presenciaOff.setValSend("0");
presenciaOff.AddActivador(out,'>',0);//out encendido
presenciaOff.AddActivador(presencia,'<',1);//no presencia
if(bloqueo)
{
presenciaOff.AddActivador(bloqueo,'>',0);
}
nivelLuzOff.set(nivelluz->topic, out->topic, 0);
nivelLuzOff.setValSend("0");
nivelLuzOff.AddActivador(out,'>',0);//out encendido
nivelLuzOff.AddActivador(nivelluz,'>',fnivelLuz);//no luz
if(bloqueo)
{
nivelLuzOff.AddActivador(bloqueo,'>',0);
}
man->Add(&presenciaOn);
man->Add(&nivelLuzOff);
man->Add(&presenciaOff);
}
};
//configuraciones-----------------------------------------------------
class Automatismos: public DomoEspConfig
{
SensorRF presencia;
SensorRF nivelLuz;
SensorRF out;
SensorVD bloqueo;
//AutomatismoPulsador pulsadorSalon;
AutomatismoPresencia Apresen;
public:
Automatismos()
{
strcpy(ssidWifi,"IdhunAux");//nombre wifi
strcpy(ideEsp,"Esp8266_auto");//idenitificador del esp (sera único)
//pulsador sin activadores
presencia.set("casa/pruebas/inter",0);
nivelLuz.set("casa/pruebas/ana",0);
out.set("casa/pruebas/luz",0);
bloqueo.set("casa/pruebas/auto", true);
}
virtual void inicia(ISensorManager* man)
{
man->Add(&presencia);
man->Add(&nivelLuz);
man->Add(&out);
man->Add(&bloqueo);
Apresen.inicia(man,&presencia,&nivelLuz,&out,&bloqueo);
//pulsadorSalon.inicia(man,"casa/pruebas/pul", "casa/pruebas/luz");
}
};
class ConfActual: public DomoEspConfig
{
SensorDout luz;
SensorDHT dht;
SensorPulsante pul;
SensorDin interup;
SensorAin analog;
SensorVD sv;
public:
ConfActual()
{
strcpy(ssidWifi,"IdhunAux");//nombre wifi
strcpy(ideEsp,"Esp8266_pruebas");//idenitificador del esp (sera único)
luz.set(D1, "casa/pruebas/luz",0);
dht.set(D0, "casa/pruebas/dht");
pul.set(D2,"casa/pruebas/pul",1);
interup.set(D3,"casa/pruebas/inter");
analog.set(0,"casa/pruebas/ana",0, 1);
//analog.set(0,"casa/pruebas/ana",0, 0);*/
sv.set("casa/pruebas/vir",0);
}
virtual void inicia(ISensorManager* man)
{
man->Add(&luz);
man->Add(&dht);
man->Add(&pul);
man->Add(&interup);
man->Add(&analog);
man->Add(&sv);
}
};
Automatismos ConfiguracionActual;
#endif