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