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
//pasar funcion de configuracion de añadir sensores
des.inicia(&vars);
conf->ConfigGen(&sens, &vars, &lcdm, &des);
#ifdef DEBUG_PS
Serial.println("Inicia variables");
#endif
@ -37,8 +39,9 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
#endif
sens.inicia();
#ifdef DEBUG_PS
Serial.println("Iniciado esp");
Serial.println("Iniciado Desencadenadores");
#endif
des.inicia(&vars);
#if CON_LCD
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);
MQTTvalor val=GetVarValue(x, vars);
if(v->flags | MqttVar::FLOAT_VAR)
if(v->flags & MqttVar::FLOAT_VAR)
val.f=atof(y);
else
val.i=atoi(y);
@ -125,10 +125,10 @@ void MqttDesencadenador::procesaOper(MqttExeParam *p)
p->estado=0;
p->toper=true;
p->oper[p->noper]=0;
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.print("encontrado oper: ");
Serial.println( p->oper);
#endif
#endif*/
}
else
{
@ -165,19 +165,19 @@ void MqttDesencadenador::procesaVar(MqttExeParam *p)
{
p->var2[p->nvar2]=0;
p->tvar2=true;
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.print("encontrado var2: ");
Serial.println( p->var2);
#endif
#endif*/
}
else
{
p->var1[p->nvar1]=0;
p->tvar1=true;
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.print("encontrado var1: ");
Serial.println( p->var1);
#endif
#endif*/
}
}
}
@ -220,27 +220,28 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
if(!p.res || !activo)
{
activo=!p.res;
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.println("Fin causa sale ");
#endif
#endif*/
p.sigue=false;
break;
}
else
{
#ifdef DEBUG_PS
activo=false;
/*#ifdef DEBUG_PS
activo=false;
Serial.println("Fin causa sigue ");
#endif
#endif*/
}
}
else if(p.oper[0]=='&')
{
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.println("operador and ");
#endif
#endif*/
p.tcausa=true;
p.toper=false;
p.noper=0;
@ -249,10 +250,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
}
else if(p.oper[0]=='|')
{
#ifdef DEBUG_PS
/*#ifdef DEBUG_PS
Serial.println("operador or ");
#endif
#endif*/
p.tcausa=true;
p.toper=false;
p.noper=0;
@ -271,12 +272,12 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
else
p.res=p.res || Eval(vars, p.oper, p.var1, p.var2 );
#ifdef DEBUG_PS
/* #ifdef DEBUG_PS
Serial.print("validaCausa res: ");
Serial.print(p.res);
Serial.print(" esAnd: ");
Serial.println(p.esAnd);
#endif
#endif*/
}
else
@ -284,10 +285,10 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
//ejecuta efecto
ExeEfecto( vars,p.oper, p.var1, p.var2 );
}
#ifdef DEBUG_PS
/*#ifdef DEBUG_PS
Serial.println("Fin oper ");
#endif
#endif*/
p.tvar1=p.tvar2=p.toper=false;
p.nvar1=p.nvar2=p.noper=0;
p.var1[0]=0;
@ -333,7 +334,11 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
break;
}
}
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::Exe fin");
#endif
}
//*******************************************************************
MqttDesencadenadorArray::MqttDesencadenadorArray()
@ -349,6 +354,7 @@ MqttDesencadenador* MqttDesencadenadorArray::Get(int i)
int MqttDesencadenadorArray::Add(MqttDesencadenador* var)
{
data[n]=*var;
strcpy( data[n].expresion,var->expresion);
n++;
return n-1;
}
@ -368,8 +374,14 @@ void MqttDesencadenadorManager::inicia( MqttVarManager *v)
{
vars=v;
if(des.n>0)
{
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::inicia como listenner");
#endif
vars->AddListenner(this);
}
}
void MqttDesencadenadorManager::Suscribe()
{

View File

@ -45,7 +45,7 @@ struct MqttExeParam
class MqttDesencadenador
{
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
MqttDesencadenador();
@ -85,7 +85,7 @@ class MqttDesencadenadorManager: public MqttOnVarChangeListenner
{
public:
MqttVarManager *vars;
byte ivars[24];
//byte ivars[24];
int nv;
MqttDesencadenadorArray des;
bool revisa;

View File

@ -243,7 +243,7 @@ void MqttSensManager::procesaSensor(int i)
}
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;
else
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
{
if(s->flags | MqttSensor::FLAG_NEG)
if(s->flags & MqttSensor::FLAG_NEG)
v->val.i=(byte)(1- digitalRead(s->pin));
else
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)
{
#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);
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);
}

View File

@ -56,7 +56,11 @@ class ActualDomoConfig: public DomoConfig
*/
int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb");
int lchim= vars->AddInternalVarInt( "casa/Salon/LChime");
int lent= vars->AddInternalVarInt( "casa/Salon/LEnt");
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->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,"bueno pa goza",1,1);*/
//desencadenaores----------
char st[32];
sprintf(st,"{%d}>0 -> !{%d} & !{%d} ",pul1,lamb,lchim);//terminar en espacios
char st[64];
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);
}
};
@ -203,4 +213,4 @@ class CocinaDomoConfig: public DomoConfig
//configuracion que se usara--------------------------
PulSalonConfig ConfiguracionActual;
ActualDomoConfig ConfiguracionActual;