DomoEsp_v2.0/DomoEspSensor/Automatismos.h

105 lines
3.0 KiB
C++

#ifndef AutomatismosDefSensorV
#define AutomatismosDef 1
#include "DomoEspConfig.h"
#include "SensorDout.h"
#include "SensorDHT.h"
#include "SensorDin.h"
#include "SensorPulsante.h"
#include "SensorAin.h"
#include "SensorVF.h"
#include "SensorTimer.h"
#include "SensorLcd.h"
#include "SensorBuzzer.h"
#include "SensorBMP180.h"
#include "SensorRF.h"
#include "SensorSplitter.h"
#include "Actuador.h"
//----------------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------------
class AutomatismoPulsador//automatismo para encender luz con interruptor o pulsador
{
Actuador 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, "X");
pulsador.setId("Pulsa");
if(bloqueo)
{
pulsador.AddActivador(bloqueo,'>',0);
}
man->Add(&pulsador);
}
};
//----------------------------------------------------------------------------------------------------------------------------------------------
//automatismo para luz con sensor de presencia y de nivel de luz
class AutomatismoPresencia//automatismo para encender luz con presencia
{
Actuador presenciaOn;
Actuador presenciaOff;
Actuador 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, "1");
presenciaOn.AddActivador(nivelluz,'<',fnivelLuz, 1);//nivel de luz bajo
presenciaOn.AddActivador(out,'<',1, 0);//out apagada
presenciaOn.AddActivador(presencia,'>',0, 0);//presencia
if(bloqueo)
{
presenciaOn.AddActivador(bloqueo,'>',0);
}
presenciaOff.set(presencia->topic, out->topic,"0");
presenciaOff.AddActivador(out,'>',0,0);//out encendido
presenciaOff.AddActivador(presencia,'<',1, 0);//no presencia
if(bloqueo)
{
presenciaOff.AddActivador(bloqueo,'>',0);
}
nivelLuzOff.set(nivelluz->topic, out->topic, "0");
nivelLuzOff.AddActivador(out,'>',0, 0);//out encendido
nivelLuzOff.AddActivador(nivelluz,'>',fnivelLuz, 0);//no luz
if(bloqueo)
{
nivelLuzOff.AddActivador(bloqueo,'>',0);
}
man->Add(&presenciaOn);
man->Add(&nivelLuzOff);
man->Add(&presenciaOff);
}
};
#endif