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

View File

@ -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,15 +6,18 @@
#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
{ {
Actuador pulsador;//cambia estado con pulsador Actuador pulsador;//cambia estado con pulsador
public: public:
AutomatismoPulsador(){} AutomatismoPulsador(){}
void inicia(ISensorManager* man, DomoEspSensorReceiver* tp_pul, DomoEspSensorReceiver* tpOut, DomoEspSensorReceiver* bloqueo=NULL ) 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 ) 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)

View File

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

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 #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
val=0;
}
else else
val=(atoi(payload)==1); 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);

View File

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

View File

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

View File

@ -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()
{ {
@ -66,9 +67,13 @@ class ConfActual: public DomoEspConfig
interup.set(D3,"casa/pruebas/inter"); interup.set(D3,"casa/pruebas/inter");
analog.set(0,"casa/pruebas/ana",0, 1); analog.set(0,"casa/pruebas/ana",0, 1);
//analog.set(0,"casa/pruebas/ana",0, 0);*/ //analog.set(0,"casa/pruebas/ana",0, 0);*/
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