Añadir variables virtuales y desencadenadores con condicionales varios

master
Gerardo 2022-02-01 21:16:26 +01:00
parent 877d54fe0e
commit 9630d9ce07
5 changed files with 27 additions and 17 deletions

View File

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

View File

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

View File

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

View File

@ -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();

View File

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