Añadido sensor timer y otras correcciones

main
Gerardo 2024-09-27 08:09:24 +02:00
parent 0b2a5f1fde
commit d36cbf477a
8 changed files with 159 additions and 38 deletions

View File

@ -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;

View File

@ -1,4 +1,4 @@
#ifndef AutomatismosDef
#ifndef AutomatismosDefSensorV
#define AutomatismosDef 1
#include "DomoEspConfig.h"
#include "SensorDout.h"
@ -6,9 +6,12 @@
#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
@ -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)

View File

@ -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*/
}
}

View File

@ -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

View File

@ -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=(atoi(payload)==1);
val=0;
}
else
val=atof(payload);
sprintf(buffer_p, "%d", (int)val);
sprintf(buffer_t, "%s/get",topic);
man->MqttSend(buffer_t, buffer_p);

View File

@ -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)
{

View File

@ -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

View File

@ -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()
{
@ -69,6 +70,10 @@ class ConfActual: public DomoEspConfig
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