From 9630d9ce0790d5a59fe770607ddc77f679e64768 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Tue, 1 Feb 2022 21:16:26 +0100 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20variables=20virtuales=20y=20desen?= =?UTF-8?q?cadenadores=20con=20condicionales=20varios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DomoEsp_v02/MqttDesencadenadorManager.cpp | 5 ++--- DomoEsp_v02/MqttSensManager.cpp | 12 +++++------- DomoEsp_v02/MqttVarManager.cpp | 8 ++++++-- DomoEsp_v02/MqttVarManager.h | 1 + DomoEsp_v02/config_rf.h | 18 +++++++++++++----- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/DomoEsp_v02/MqttDesencadenadorManager.cpp b/DomoEsp_v02/MqttDesencadenadorManager.cpp index 4824d31..8819408 100644 --- a/DomoEsp_v02/MqttDesencadenadorManager.cpp +++ b/DomoEsp_v02/MqttDesencadenadorManager.cpp @@ -43,7 +43,6 @@ void MqttDesencadenador::ExeEfecto(MqttVarManager *vars, char *oper, char*x, ch Serial.println(y); #endif - switch(oper[0]) { case('!'): @@ -242,7 +241,7 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) Serial.println("operador and "); #endif*/ - p.tcausa=true; + //p.tcausa=true; p.toper=false; p.noper=0; p.esAnd=true; @@ -254,7 +253,7 @@ void MqttDesencadenador::Exe(MqttVarManager *vars) Serial.println("operador or "); #endif*/ - p.tcausa=true; + //p.tcausa=true; p.toper=false; p.noper=0; p.esAnd=false; diff --git a/DomoEsp_v02/MqttSensManager.cpp b/DomoEsp_v02/MqttSensManager.cpp index 87853fe..4acb2c4 100644 --- a/DomoEsp_v02/MqttSensManager.cpp +++ b/DomoEsp_v02/MqttSensManager.cpp @@ -11,7 +11,7 @@ MqttSensor::MqttSensor() { - + ivar=-1; } void MqttSensor::Set(MqttSensor *s) { @@ -299,15 +299,13 @@ void MqttSensManager::procesaSensor(int i) } void MqttSensManager::OnVarChange(int ivar) { - - MqttVar *v=vars->Get(ivar); MqttSensor *s = sens.Ivar2Sen(ivar); - if(s==NULL) return; - #ifdef DEBUG_PS - Serial.println("MqttSensManager::OnChange "); - #endif + MqttVar *v=vars->Get(ivar); + #ifdef DEBUG_PS + Serial.println("MqttSensManager::OnChange "); + #endif switch(s->tipo) { case((int)MqttSensor::SENS_DIGI_OUT): diff --git a/DomoEsp_v02/MqttVarManager.cpp b/DomoEsp_v02/MqttVarManager.cpp index 13020e0..d933b21 100644 --- a/DomoEsp_v02/MqttVarManager.cpp +++ b/DomoEsp_v02/MqttVarManager.cpp @@ -280,14 +280,18 @@ int MqttVarManager::AddVar(byte flags, char*topic) v.topic=topics->Add(topic); return vars->Add(&v); } -int MqttVarManager::AddInternalVarFloat( char*topic) +int MqttVarManager::AddInternalVarFloat( char* topic) { return AddVar((byte)(MqttVar::PRIV_VAR|MqttVar::FLOAT_VAR| MqttVar::CHANGE_VAR|MqttVar::ACCION_VAR),topic); } -int MqttVarManager::AddInternalVarInt( char*topic) +int MqttVarManager::AddInternalVarInt( char* topic) { return AddVar((byte)(MqttVar::PRIV_VAR| MqttVar::CHANGE_VAR|MqttVar::ACCION_VAR),topic); } +int MqttVarManager::AddVirtualOutVarInt( char* topic) +{ + return AddVar((byte)(MqttVar::IN_VAR|MqttVar::OUT_VAR|MqttVar::ACCION_VAR),topic); +} MqttVar* MqttVarManager::Get(int i) { return vars->Get(i); diff --git a/DomoEsp_v02/MqttVarManager.h b/DomoEsp_v02/MqttVarManager.h index 6049f35..275e2ba 100644 --- a/DomoEsp_v02/MqttVarManager.h +++ b/DomoEsp_v02/MqttVarManager.h @@ -108,6 +108,7 @@ class MqttVarManager int GetId(char* topic);//devuelve el id de una variable int AddVar(byte flags, char*topic); + int AddVirtualOutVarInt( char*topic); int AddInternalVarFloat( char*topic); int AddInternalVarInt( char*topic); void PublicaVars(); diff --git a/DomoEsp_v02/config_rf.h b/DomoEsp_v02/config_rf.h index f60ff23..99f40ee 100644 --- a/DomoEsp_v02/config_rf.h +++ b/DomoEsp_v02/config_rf.h @@ -389,17 +389,25 @@ class CocinaDomoConfig: public DomoConfig { sens->AddHDT22(D4, "casa/cocina");//01 sens->AddDinRetardOff(D5, 60,"casa/cocina/mov");//2 + int mov=2; sens->AddAnalogIn(0, "casa/cocina/luz",true);//3 + int luz=3; sens->AddDin( D1, "casa/cocina/inter");//4 sens->AddDout(D2, "casa/cocina/lam", false);//5 - + int lam=5; + int lauto= vars->AddVirtualOutVarInt( "casa/cocina/luzAuto");//variable privada char st[64]; - + //Efecto Pulsadores - sprintf(st,"{%d}>0 -> !{%d} ",4,5);//terminar en espacios + sprintf(st,"{%d}>0 -> !{%d} ",4,5);//accion interruptor des->AddDes(st); - sprintf(st,"{%d}<1 -> !{%d} ",4,5);//terminar en espacios + sprintf(st,"{%d}<1 -> !{%d} ",4,5);//accion interruptor des->AddDes(st); + sprintf(st,"{%d}<1&{%d}>0&{%d}=0 -> {%d}=1 ",mov,lauto,lam,lam);//apaga luz si no hay nadie + des->AddDes(st); + sprintf(st,"{%d}<20&{%d}>0&{%d}>0 -> {%d}=0 ",luz,mov,lauto,lam);//enciende luz si hay presencia y esta oscuro + des->AddDes(st); + } }; class SalonDomoConfig: public DomoConfig @@ -481,4 +489,4 @@ class ExteriorDomoConfig: public DomoConfig //configuracion que se usara-------------------------- -ActDomoConfig ConfiguracionActual; +CocinaDomoConfig ConfiguracionActual;