Añadido sensor timer y otras correcciones
parent
0b2a5f1fde
commit
d36cbf477a
|
|
@ -31,12 +31,17 @@ class Actuador: public DomoEspSensorReceiver
|
|||
activador[i].sen=0;
|
||||
}
|
||||
}
|
||||
void set(char* topic_id, char* topic_id_out, int valdef)
|
||||
void set(char* topic_id, char* topic_id_out, char* _valSend)
|
||||
{
|
||||
val=valdef;
|
||||
val=0;
|
||||
strcpy(valSend, _valSend);
|
||||
strcpy(topic, topic_id);
|
||||
strcpy(topicOut, topic_id_out);
|
||||
}
|
||||
void setId(char* st)
|
||||
{
|
||||
strcpy(id, st);
|
||||
}
|
||||
void AddActivador(DomoEspSensorReceiver *sen, char oper, float umbral, bool onchange=false)
|
||||
{
|
||||
int i=0;
|
||||
|
|
@ -59,10 +64,7 @@ class Actuador: public DomoEspSensorReceiver
|
|||
#endif
|
||||
}
|
||||
}
|
||||
void setValSend(char* _valSend)
|
||||
{
|
||||
strcpy(valSend, _valSend);
|
||||
}
|
||||
|
||||
virtual float getVal()
|
||||
{
|
||||
return val;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef AutomatismosDef
|
||||
#ifndef AutomatismosDefSensorV
|
||||
#define AutomatismosDef 1
|
||||
#include "DomoEspConfig.h"
|
||||
#include "SensorDout.h"
|
||||
|
|
@ -6,15 +6,18 @@
|
|||
#include "SensorDin.h"
|
||||
#include "SensorPulsante.h"
|
||||
#include "SensorAin.h"
|
||||
#include "SensorVD.h"
|
||||
#include "SensorVF.h"
|
||||
#include "SensorRF.h"
|
||||
#include "SensorTimer.h"
|
||||
|
||||
#include "Actuador.h"
|
||||
//----------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------------------------------
|
||||
class AutomatismoPulsador//automatismo para encender luz con interruptor o pulsador
|
||||
{
|
||||
|
||||
Actuador pulsador;//cambia estado con pulsador
|
||||
Actuador pulsador;//cambia estado con pulsador
|
||||
public:
|
||||
AutomatismoPulsador(){}
|
||||
void inicia(ISensorManager* man, DomoEspSensorReceiver* tp_pul, DomoEspSensorReceiver* tpOut, DomoEspSensorReceiver* bloqueo=NULL )
|
||||
|
|
@ -23,9 +26,8 @@ class AutomatismoPulsador//automatismo para encender luz con interruptor o pulsa
|
|||
}
|
||||
void inicia(ISensorManager* man, char* tp_pul, char* tpOut, DomoEspSensorReceiver* bloqueo=NULL )
|
||||
{
|
||||
pulsador.set(tp_pul, tpOut, 0);
|
||||
pulsador.setValSend("X");
|
||||
strcpy(pulsador.id, "pulsa");
|
||||
pulsador.set(tp_pul, tpOut, "X");
|
||||
pulsador.setId("Pulsa");
|
||||
if(bloqueo)
|
||||
{
|
||||
pulsador.AddActivador(bloqueo,'>',0);
|
||||
|
|
@ -60,8 +62,7 @@ class AutomatismoPresencia//automatismo para encender luz con presencia
|
|||
void inicia(ISensorManager* man, DomoEspSensorReceiver* presencia, DomoEspSensorReceiver* nivelluz, DomoEspSensorReceiver* out, DomoEspSensorReceiver* bloqueo=NULL )
|
||||
{
|
||||
|
||||
presenciaOn.set(presencia->topic, out->topic, 0);
|
||||
presenciaOn.setValSend("1");
|
||||
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
|
||||
|
|
@ -69,8 +70,7 @@ class AutomatismoPresencia//automatismo para encender luz con presencia
|
|||
{
|
||||
presenciaOn.AddActivador(bloqueo,'>',0);
|
||||
}
|
||||
presenciaOff.set(presencia->topic, out->topic, 0);
|
||||
presenciaOff.setValSend("0");
|
||||
presenciaOff.set(presencia->topic, out->topic,"0");
|
||||
presenciaOff.AddActivador(out,'>',0,0);//out encendido
|
||||
presenciaOff.AddActivador(presencia,'<',1, 0);//no presencia
|
||||
if(bloqueo)
|
||||
|
|
@ -78,8 +78,7 @@ class AutomatismoPresencia//automatismo para encender luz con presencia
|
|||
presenciaOff.AddActivador(bloqueo,'>',0);
|
||||
}
|
||||
|
||||
nivelLuzOff.set(nivelluz->topic, out->topic, 0);
|
||||
nivelLuzOff.setValSend("0");
|
||||
nivelLuzOff.set(nivelluz->topic, out->topic, "0");
|
||||
nivelLuzOff.AddActivador(out,'>',0, 0);//out encendido
|
||||
nivelLuzOff.AddActivador(nivelluz,'>',fnivelLuz, 0);//no luz
|
||||
if(bloqueo)
|
||||
|
|
|
|||
|
|
@ -5,15 +5,17 @@
|
|||
class SensorRF: public DomoEspSensorReceiver
|
||||
{
|
||||
float val;
|
||||
|
||||
bool negado;
|
||||
public:
|
||||
SensorRF()
|
||||
{
|
||||
negado=0;
|
||||
val=0;
|
||||
topic[0]=0;
|
||||
}
|
||||
void set(char* topic_id, float valdef)
|
||||
void set(char* topic_id,bool _negado=0, float valdef=0)
|
||||
{
|
||||
negado=_negado;
|
||||
val=valdef;
|
||||
strcpy(topic, topic_id);
|
||||
}
|
||||
|
|
@ -33,12 +35,15 @@ class SensorRF: public DomoEspSensorReceiver
|
|||
if(!strcmp(_topic, topic))
|
||||
{
|
||||
val=atof(payload);
|
||||
#ifdef DEBUG_PS
|
||||
if(negado && val>0)
|
||||
val=0;
|
||||
|
||||
/*#ifdef DEBUG_PS
|
||||
Serial.print(" RF-> ");
|
||||
Serial.print(topic);
|
||||
Serial.print(" -> ");
|
||||
Serial.println(val);
|
||||
#endif
|
||||
#endif*/
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
#ifndef SensorTimerDef
|
||||
#define SensorTimerDef 1
|
||||
#include "defines.h"
|
||||
//sensor virtual
|
||||
class SensorTimer: public DomoEspSensorReceiver
|
||||
{
|
||||
bool val;
|
||||
bool valDef;
|
||||
unsigned long tiempo_sens;
|
||||
unsigned long incre_tsens;
|
||||
|
||||
public:
|
||||
SensorTimer()
|
||||
{
|
||||
val=0;
|
||||
topic[0]=0;
|
||||
}
|
||||
void set(char* topic_id, bool _valdef, int segTime)
|
||||
{
|
||||
incre_tsens=1000*segTime;
|
||||
|
||||
valDef=_valdef;
|
||||
val=valDef;
|
||||
strcpy(topic, topic_id);
|
||||
}
|
||||
virtual float getVal()
|
||||
{
|
||||
return (float)val;
|
||||
}
|
||||
virtual void procesa(IMqttManager * man, int tiempo)
|
||||
{
|
||||
if(val!=valDef)
|
||||
{
|
||||
if(MqttUtiles::pasa_incre(&tiempo_sens, incre_tsens))
|
||||
{
|
||||
val=valDef;
|
||||
tiempo=2;
|
||||
}
|
||||
}
|
||||
if(tiempo==2)
|
||||
{
|
||||
#ifdef DEBUG_PS
|
||||
Serial.print("LogTm ");
|
||||
Serial.println(val);
|
||||
#endif
|
||||
//loguea------------
|
||||
//char buffer_t[MAXTOPICVAR];
|
||||
//char buffer_p[MAXTOPICVAR];
|
||||
sprintf(buffer_p, "%d", (int)val);
|
||||
sprintf(buffer_t, "%s/get",topic);
|
||||
man->MqttSend(buffer_t, buffer_p);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void SubscribeMqtt(IMqttManager* man){
|
||||
//char buffer_t[MAXTOPICVAR];
|
||||
sprintf(buffer_t, "%s/set",topic);
|
||||
man->MqttSubs(buffer_t);
|
||||
sprintf(buffer_t, "%s/pul",topic);
|
||||
man->MqttSubs(buffer_t);
|
||||
}
|
||||
virtual void OnMqtt(IMqttManager * man, char* _topic, char* payload, int tipo)
|
||||
{
|
||||
if((tipo!=Topic::PUL && tipo!=Topic::SET) || strcmp(_topic, topic))
|
||||
return;
|
||||
float valOld=val;
|
||||
if(tipo==Topic::PUL)
|
||||
{
|
||||
if(valDef==0)
|
||||
val=1;
|
||||
else
|
||||
val=0;
|
||||
|
||||
MqttUtiles::reinicia_incre(&tiempo_sens, incre_tsens);
|
||||
}
|
||||
else if(tipo==Topic::SET)
|
||||
{
|
||||
if(payload[0]=='X')
|
||||
val=!(val>0);
|
||||
else
|
||||
val=atof(payload);
|
||||
if(val!=valDef)
|
||||
MqttUtiles::reinicia_incre(&tiempo_sens, incre_tsens);
|
||||
}
|
||||
|
||||
if(valOld!=val)
|
||||
{
|
||||
sprintf(buffer_p, "%d", (int)val);
|
||||
sprintf(buffer_t, "%s/get",topic);
|
||||
man->MqttSend(buffer_t, buffer_p);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
#ifndef SensorVDDef
|
||||
#define SensorVDDef 1
|
||||
#ifndef SensorVFDef
|
||||
#define SensorVFDDef 1
|
||||
#include "defines.h"
|
||||
//sensor virtual
|
||||
class SensorVD: public DomoEspSensorReceiver
|
||||
class SensorVF: public DomoEspSensorReceiver
|
||||
{
|
||||
bool val;
|
||||
float val;
|
||||
|
||||
public:
|
||||
SensorVD()
|
||||
SensorVF()
|
||||
{
|
||||
val=0;
|
||||
topic[0]=0;
|
||||
}
|
||||
void set(char* topic_id, bool valdef)
|
||||
void set(char* topic_id, float valdef)
|
||||
{
|
||||
val=valdef;
|
||||
strcpy(topic, topic_id);
|
||||
|
|
@ -26,7 +26,7 @@ class SensorVD: public DomoEspSensorReceiver
|
|||
if(tiempo==2)
|
||||
{
|
||||
#ifdef DEBUG_PS
|
||||
Serial.print("LogSV ");
|
||||
Serial.print("LogSF ");
|
||||
Serial.println(val);
|
||||
#endif
|
||||
//loguea------------
|
||||
|
|
@ -50,9 +50,14 @@ class SensorVD: public DomoEspSensorReceiver
|
|||
if(!strcmp(_topic, topic))
|
||||
{
|
||||
if(payload[0]=='X')
|
||||
val=!val;
|
||||
{
|
||||
if(val==0)
|
||||
val=1;
|
||||
else
|
||||
val=0;
|
||||
}
|
||||
else
|
||||
val=(atoi(payload)==1);
|
||||
val=atof(payload);
|
||||
sprintf(buffer_p, "%d", (int)val);
|
||||
sprintf(buffer_t, "%s/get",topic);
|
||||
man->MqttSend(buffer_t, buffer_p);
|
||||
|
|
@ -10,7 +10,10 @@
|
|||
#include "Utiles.h"
|
||||
//**************************************************************************************************************************************************
|
||||
|
||||
|
||||
void MqttUtiles::reinicia_incre( unsigned long *tt, unsigned long incre)
|
||||
{
|
||||
*tt=millis();
|
||||
}
|
||||
|
||||
bool MqttUtiles::pasa_incre( unsigned long *tt, unsigned long incre)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,8 +8,10 @@ class MqttUtiles
|
|||
{
|
||||
public:
|
||||
static bool pasa_incre( unsigned long *tt, unsigned long incre);
|
||||
static void reinicia_incre( unsigned long *tt, unsigned long incre);
|
||||
static bool pasa_incre( volatile unsigned long *tt, unsigned long incre);
|
||||
static void resetFunc();
|
||||
|
||||
};
|
||||
|
||||
class MqttOnVarChangeListenner
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class ConfAutomatismos: public DomoEspConfig
|
|||
SensorRF presencia;
|
||||
SensorRF nivelLuz;
|
||||
SensorRF out;
|
||||
SensorVD bloqueo;
|
||||
SensorVF bloqueo;
|
||||
|
||||
AutomatismoPulsador pulsador;
|
||||
AutomatismoPresencia Apresen;
|
||||
|
|
@ -52,8 +52,9 @@ class ConfActual: public DomoEspConfig
|
|||
SensorPulsante pul;
|
||||
SensorDin interup;
|
||||
SensorAin analog;
|
||||
SensorVD sv;
|
||||
|
||||
SensorVF sv;
|
||||
Actuador actTimer;
|
||||
SensorTimer st;
|
||||
public:
|
||||
ConfActual()
|
||||
{
|
||||
|
|
@ -66,9 +67,13 @@ class ConfActual: public DomoEspConfig
|
|||
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);
|
||||
|
||||
|
||||
st.set("casa/pruebas/timer", 0, 5);
|
||||
actTimer.set("casa/pruebas/inter", "casa/pruebas/timer", "1");
|
||||
actTimer.setId("aTimer");
|
||||
actTimer.AddActivador(&interup, '<', 1);
|
||||
|
||||
}
|
||||
virtual void inicia(ISensorManager* man)
|
||||
|
|
@ -79,12 +84,16 @@ class ConfActual: public DomoEspConfig
|
|||
man->Add(&interup);
|
||||
man->Add(&analog);
|
||||
man->Add(&sv);
|
||||
man->Add(&st);
|
||||
man->Add(&actTimer);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
ConfAutomatismos ConfiguracionActual;
|
||||
ConfActual ConfiguracionActual;
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue