From d36cbf477a0b1d9b066b07f3a502dee6b444b41e Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 27 Sep 2024 08:09:24 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20sensor=20timer=20y=20otras=20cor?= =?UTF-8?q?recciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DomoEspSensor/Actuador.h | 14 ++-- DomoEspSensor/Automatismos.h | 23 +++--- DomoEspSensor/SensorRF.h | 13 +++- DomoEspSensor/SensorTimer.h | 96 ++++++++++++++++++++++++ DomoEspSensor/{SensorVD.h => SensorVF.h} | 23 +++--- DomoEspSensor/Utiles.cpp | 5 +- DomoEspSensor/Utiles.h | 2 + DomoEspSensor/configuracionActual.h | 21 ++++-- 8 files changed, 159 insertions(+), 38 deletions(-) create mode 100644 DomoEspSensor/SensorTimer.h rename DomoEspSensor/{SensorVD.h => SensorVF.h} (77%) diff --git a/DomoEspSensor/Actuador.h b/DomoEspSensor/Actuador.h index c98bcb6..5e2576d 100644 --- a/DomoEspSensor/Actuador.h +++ b/DomoEspSensor/Actuador.h @@ -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; diff --git a/DomoEspSensor/Automatismos.h b/DomoEspSensor/Automatismos.h index 50ba1e3..61fc574 100644 --- a/DomoEspSensor/Automatismos.h +++ b/DomoEspSensor/Automatismos.h @@ -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) diff --git a/DomoEspSensor/SensorRF.h b/DomoEspSensor/SensorRF.h index a31694d..47944b3 100644 --- a/DomoEspSensor/SensorRF.h +++ b/DomoEspSensor/SensorRF.h @@ -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*/ } } diff --git a/DomoEspSensor/SensorTimer.h b/DomoEspSensor/SensorTimer.h new file mode 100644 index 0000000..21883e5 --- /dev/null +++ b/DomoEspSensor/SensorTimer.h @@ -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 \ No newline at end of file diff --git a/DomoEspSensor/SensorVD.h b/DomoEspSensor/SensorVF.h similarity index 77% rename from DomoEspSensor/SensorVD.h rename to DomoEspSensor/SensorVF.h index a8a6367..9353797 100644 --- a/DomoEspSensor/SensorVD.h +++ b/DomoEspSensor/SensorVF.h @@ -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); diff --git a/DomoEspSensor/Utiles.cpp b/DomoEspSensor/Utiles.cpp index bb77d07..08e9712 100644 --- a/DomoEspSensor/Utiles.cpp +++ b/DomoEspSensor/Utiles.cpp @@ -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) { diff --git a/DomoEspSensor/Utiles.h b/DomoEspSensor/Utiles.h index 8549bc9..c7725c2 100644 --- a/DomoEspSensor/Utiles.h +++ b/DomoEspSensor/Utiles.h @@ -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 diff --git a/DomoEspSensor/configuracionActual.h b/DomoEspSensor/configuracionActual.h index fd42bb7..9fe4a31 100644 --- a/DomoEspSensor/configuracionActual.h +++ b/DomoEspSensor/configuracionActual.h @@ -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 \ No newline at end of file