Solucion errores en desencadenadores y configuraciones varias

master
Gerardo 2022-01-21 23:24:07 +01:00
parent 9dbe05dbad
commit 8fe41ffcac
6 changed files with 71 additions and 32 deletions

View File

@ -25,8 +25,10 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
#endif #endif
//pasar funcion de configuracion de añadir sensores //pasar funcion de configuracion de añadir sensores
des.inicia(&vars);
conf->ConfigGen(&sens, &vars, &lcdm, &des); conf->ConfigGen(&sens, &vars, &lcdm, &des);
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Inicia variables"); Serial.println("Inicia variables");
#endif #endif
@ -37,8 +39,9 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
#endif #endif
sens.inicia(); sens.inicia();
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Iniciado esp"); Serial.println("Iniciado Desencadenadores");
#endif #endif
des.inicia(&vars);
#if CON_LCD #if CON_LCD
lcdm.inicia(&vars, lcd, conf->lcd.colum, conf->lcd.lines); lcdm.inicia(&vars, lcd, conf->lcd.colum, conf->lcd.lines);

View File

@ -55,7 +55,7 @@ void MqttDesencadenador::ExeEfecto(MqttVarManager *vars, char *oper, char*x, ch
{ {
MqttVar* v=GetVar(x, vars); MqttVar* v=GetVar(x, vars);
MQTTvalor val=GetVarValue(x, vars); MQTTvalor val=GetVarValue(x, vars);
if(v->flags | MqttVar::FLOAT_VAR) if(v->flags & MqttVar::FLOAT_VAR)
val.f=atof(y); val.f=atof(y);
else else
val.i=atoi(y); val.i=atoi(y);
@ -125,10 +125,10 @@ void MqttDesencadenador::procesaOper(MqttExeParam *p)
p->estado=0; p->estado=0;
p->toper=true; p->toper=true;
p->oper[p->noper]=0; p->oper[p->noper]=0;
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.print("encontrado oper: "); Serial.print("encontrado oper: ");
Serial.println( p->oper); Serial.println( p->oper);
#endif #endif*/
} }
else else
{ {
@ -165,19 +165,19 @@ void MqttDesencadenador::procesaVar(MqttExeParam *p)
{ {
p->var2[p->nvar2]=0; p->var2[p->nvar2]=0;
p->tvar2=true; p->tvar2=true;
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.print("encontrado var2: "); Serial.print("encontrado var2: ");
Serial.println( p->var2); Serial.println( p->var2);
#endif #endif*/
} }
else else
{ {
p->var1[p->nvar1]=0; p->var1[p->nvar1]=0;
p->tvar1=true; p->tvar1=true;
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.print("encontrado var1: "); Serial.print("encontrado var1: ");
Serial.println( p->var1); Serial.println( p->var1);
#endif #endif*/
} }
} }
} }
@ -220,27 +220,28 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
if(!p.res || !activo) if(!p.res || !activo)
{ {
activo=!p.res; activo=!p.res;
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.println("Fin causa sale "); Serial.println("Fin causa sale ");
#endif #endif*/
p.sigue=false; p.sigue=false;
break; break;
} }
else else
{ {
#ifdef DEBUG_PS activo=false;
/*#ifdef DEBUG_PS
activo=false; activo=false;
Serial.println("Fin causa sigue "); Serial.println("Fin causa sigue ");
#endif #endif*/
} }
} }
else if(p.oper[0]=='&') else if(p.oper[0]=='&')
{ {
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.println("operador and "); Serial.println("operador and ");
#endif #endif*/
p.tcausa=true; p.tcausa=true;
p.toper=false; p.toper=false;
p.noper=0; p.noper=0;
@ -249,10 +250,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
} }
else if(p.oper[0]=='|') else if(p.oper[0]=='|')
{ {
#ifdef DEBUG_PS /*#ifdef DEBUG_PS
Serial.println("operador or "); Serial.println("operador or ");
#endif #endif*/
p.tcausa=true; p.tcausa=true;
p.toper=false; p.toper=false;
p.noper=0; p.noper=0;
@ -271,12 +272,12 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
else else
p.res=p.res || Eval(vars, p.oper, p.var1, p.var2 ); p.res=p.res || Eval(vars, p.oper, p.var1, p.var2 );
#ifdef DEBUG_PS /* #ifdef DEBUG_PS
Serial.print("validaCausa res: "); Serial.print("validaCausa res: ");
Serial.print(p.res); Serial.print(p.res);
Serial.print(" esAnd: "); Serial.print(" esAnd: ");
Serial.println(p.esAnd); Serial.println(p.esAnd);
#endif #endif*/
} }
else else
@ -284,10 +285,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
//ejecuta efecto //ejecuta efecto
ExeEfecto( vars,p.oper, p.var1, p.var2 ); ExeEfecto( vars,p.oper, p.var1, p.var2 );
} }
#ifdef DEBUG_PS /*#ifdef DEBUG_PS
Serial.println("Fin oper "); Serial.println("Fin oper ");
#endif #endif*/
p.tvar1=p.tvar2=p.toper=false; p.tvar1=p.tvar2=p.toper=false;
p.nvar1=p.nvar2=p.noper=0; p.nvar1=p.nvar2=p.noper=0;
p.var1[0]=0; p.var1[0]=0;
@ -333,7 +334,11 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
break; break;
} }
} }
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::Exe fin"); Serial.println("MqttDesencadenador::Exe fin");
#endif
} }
//******************************************************************* //*******************************************************************
MqttDesencadenadorArray::MqttDesencadenadorArray() MqttDesencadenadorArray::MqttDesencadenadorArray()
@ -349,6 +354,7 @@ MqttDesencadenador* MqttDesencadenadorArray::Get(int i)
int MqttDesencadenadorArray::Add(MqttDesencadenador* var) int MqttDesencadenadorArray::Add(MqttDesencadenador* var)
{ {
data[n]=*var; data[n]=*var;
strcpy( data[n].expresion,var->expresion);
n++; n++;
return n-1; return n-1;
} }
@ -368,8 +374,14 @@ void MqttDesencadenadorManager::inicia( MqttVarManager *v)
{ {
vars=v; vars=v;
if(des.n>0) if(des.n>0)
{
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::inicia como listenner");
#endif
vars->AddListenner(this); vars->AddListenner(this);
} }
}
void MqttDesencadenadorManager::Suscribe() void MqttDesencadenadorManager::Suscribe()
{ {

View File

@ -45,7 +45,7 @@ struct MqttExeParam
class MqttDesencadenador class MqttDesencadenador
{ {
public: public:
char expresion[24];//{1}=1->!{2} char expresion[64];//{1}=1->!{2}
bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse
MqttDesencadenador(); MqttDesencadenador();
@ -85,7 +85,7 @@ class MqttDesencadenadorManager: public MqttOnVarChangeListenner
{ {
public: public:
MqttVarManager *vars; MqttVarManager *vars;
byte ivars[24]; //byte ivars[24];
int nv; int nv;
MqttDesencadenadorArray des; MqttDesencadenadorArray des;
bool revisa; bool revisa;

View File

@ -243,7 +243,7 @@ void MqttSensManager::procesaSensor(int i)
} }
case((int)MqttSensor::SENS_ANALOG_IN)://pilla temperatura y humedad case((int)MqttSensor::SENS_ANALOG_IN)://pilla temperatura y humedad
{ {
if(s->flags | MqttSensor::FLAG_NEG) if(s->flags & MqttSensor::FLAG_NEG)
v->val.f=100.*((float)(1024- analogRead(s->pin)))/1024; v->val.f=100.*((float)(1024- analogRead(s->pin)))/1024;
else else
v->val.f=100.*((float)(analogRead(s->pin)))/1024; v->val.f=100.*((float)(analogRead(s->pin)))/1024;
@ -260,7 +260,7 @@ void MqttSensManager::procesaSensor(int i)
} }
case((int)MqttSensor::SENS_DIGI_IN)://pilla temperatura y humedad case((int)MqttSensor::SENS_DIGI_IN)://pilla temperatura y humedad
{ {
if(s->flags | MqttSensor::FLAG_NEG) if(s->flags & MqttSensor::FLAG_NEG)
v->val.i=(byte)(1- digitalRead(s->pin)); v->val.i=(byte)(1- digitalRead(s->pin));
else else
v->val.i=(byte)digitalRead(s->pin); v->val.i=(byte)digitalRead(s->pin);

View File

@ -354,7 +354,21 @@ void MqttVarManager::InvierteVar(int ivar)
} }
void MqttVarManager::SetVal(int ivar,MQTTvalor val) void MqttVarManager::SetVal(int ivar,MQTTvalor val)
{ {
#ifdef DEBUG_PS
Serial.print("MqttVarManager::SetVal int i: ");
Serial.print( val.i);
Serial.print(" f: ");
Serial.println( val.f);
#endif
MqttVar* v=vars->Get(ivar); MqttVar* v=vars->Get(ivar);
v->val=val; v->val=val;
#ifdef DEBUG_PS
Serial.print("MqttVarManager::SetVal out i: ");
Serial.print( v->val.i);
Serial.print(" f: ");
Serial.println( v->val.f);
#endif
OnChange(ivar); OnChange(ivar);
} }

View File

@ -56,7 +56,11 @@ class ActualDomoConfig: public DomoConfig
*/ */
int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb"); int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb");
int lchim= vars->AddInternalVarInt( "casa/Salon/LChime"); int lchim= vars->AddInternalVarInt( "casa/Salon/LChime");
int lent= vars->AddInternalVarInt( "casa/Salon/LEnt");
int pul1= vars->AddInternalVarInt( "casa/Salon/pul1"); int pul1= vars->AddInternalVarInt( "casa/Salon/pul1");
int pul2= vars->AddInternalVarInt( "casa/Salon/pul2");
int pul3= vars->AddInternalVarInt( "casa/Salon/pul3");
int pul4= vars->AddInternalVarInt( "casa/Salon/pul4");
//lcd--------------------------------------------------------- //lcd---------------------------------------------------------
//lcd->add(0,"T des: %s",0,0); //lcd->add(0,"T des: %s",0,0);
@ -72,11 +76,17 @@ class ActualDomoConfig: public DomoConfig
lcd->add(-1,"Mi ritmo",0,1); lcd->add(-1,"Mi ritmo",0,1);
lcd->add(-1,"bueno pa goza",1,1);*/ lcd->add(-1,"bueno pa goza",1,1);*/
//desencadenaores---------- //desencadenaores----------
char st[32]; char st[64];
sprintf(st,"{%d}>0 -> !{%d} & !{%d} ",pul1,lamb,lchim);//terminar en espacios sprintf(st,"{%d}>0 -> {%d}=1 & {%d}=1 & {%d}=1 ",pul1,lamb,lchim, lent);//terminar en espacios
des->AddDes(st);
sprintf(st,"{%d}<1 -> {%d}=0 & {%d}=0 & {%d}=0 ",pul1,lamb,lchim, lent);//terminar en espacios
des->AddDes(st);
sprintf(st,"{%d}>0 -> !{%d} ",pul2,lamb);//terminar en espacios
des->AddDes(st);
sprintf(st,"{%d}>0 -> !{%d} ",pul3,lchim);//terminar en espacios
des->AddDes(st);
sprintf(st,"{%d}>0 -> !{%d} ",pul4,lent);//terminar en espacios
des->AddDes(st); des->AddDes(st);
} }
}; };
@ -203,4 +213,4 @@ class CocinaDomoConfig: public DomoConfig
//configuracion que se usara-------------------------- //configuracion que se usara--------------------------
PulSalonConfig ConfiguracionActual; ActualDomoConfig ConfiguracionActual;