parent
8fe41ffcac
commit
e1dde4e137
|
|
@ -3,17 +3,20 @@
|
|||
#define MqttDefinesDef 1
|
||||
//generales
|
||||
#define DEBUG_PS 1
|
||||
#define CON_LCD 0
|
||||
#define CON_LCD 1
|
||||
|
||||
#define MAXTOPICVAR 32//maximo de caracteres de los topic de las variables
|
||||
|
||||
//vars--------------------
|
||||
#define MAXVAR 12//maximo de variables totales
|
||||
#define MAXVAR 24//maximo de variables totales
|
||||
#define MAXSTR 1024//maximo de caracteres para str
|
||||
|
||||
//sens--------------------
|
||||
#define MAXSENS 8
|
||||
#define MAXINTERRUP 8
|
||||
//desencadenadores--------
|
||||
#define MAXSTRDESEN 64
|
||||
#define MAXDESEN 24
|
||||
//class-------------------
|
||||
class MqttOnVarChangeListenner
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
MqttDesencadenador::MqttDesencadenador()
|
||||
{
|
||||
activo=true;
|
||||
activo=true;
|
||||
}
|
||||
MQTTvalor MqttDesencadenador::GetVarValue(char*ivar, MqttVarManager *vars)
|
||||
{
|
||||
|
|
@ -16,7 +16,7 @@ float MqttDesencadenador::GetValue(char*ivar, MqttVarManager *vars)
|
|||
MqttVar *v=GetVar(ivar, vars);
|
||||
if(v->flags & MqttVar::FLOAT_VAR)
|
||||
return v->val.f;
|
||||
return 1.*v->val.i;
|
||||
return (float)v->val.i;
|
||||
}
|
||||
|
||||
int MqttDesencadenador::GetIvar(char*ivar)
|
||||
|
|
@ -314,7 +314,6 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
|
|||
//distincion de variables
|
||||
if(expresion[p.i]=='{')
|
||||
{
|
||||
|
||||
p.estado=1;
|
||||
p.i++;
|
||||
}
|
||||
|
|
@ -323,7 +322,6 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
|
|||
p.estado=2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case(1)://pillando var o escalar
|
||||
|
|
@ -376,7 +374,6 @@ void MqttDesencadenadorManager::inicia( MqttVarManager *v)
|
|||
if(des.n>0)
|
||||
{
|
||||
#ifdef DEBUG_PS
|
||||
|
||||
Serial.println("MqttDesencadenador::inicia como listenner");
|
||||
#endif
|
||||
vars->AddListenner(this);
|
||||
|
|
@ -404,7 +401,6 @@ void MqttDesencadenadorManager::loop()
|
|||
void MqttDesencadenadorManager::RevisaDesencadenadores()
|
||||
{
|
||||
#ifdef DEBUG_PS
|
||||
|
||||
Serial.println("MqttDesencadenadorManager::RevisaDesencadenadores");
|
||||
#endif
|
||||
for(int i=0; i<des.n; i++)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct MqttExeParam
|
|||
class MqttDesencadenador
|
||||
{
|
||||
public:
|
||||
char expresion[64];//{1}=1->!{2}
|
||||
char expresion[MAXSTRDESEN];//{1}=1->!{2}
|
||||
bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse
|
||||
|
||||
MqttDesencadenador();
|
||||
|
|
@ -68,7 +68,7 @@ class MqttDesencadenador
|
|||
class MqttDesencadenadorArray
|
||||
{
|
||||
public:
|
||||
MqttDesencadenador data[16];
|
||||
MqttDesencadenador data[MAXDESEN];
|
||||
int n;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -335,7 +335,7 @@ void MqttSensManager::procesaInterrupciones()
|
|||
if(val!=v->val.i)
|
||||
{
|
||||
v->val.i=val;
|
||||
vars->OnChange(s->ivar);
|
||||
vars->OnChange(s->ivar, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -345,7 +345,7 @@ void MqttSensManager::procesaInterrupciones()
|
|||
if(val!=v->val.i)
|
||||
{
|
||||
v->val.i=val;
|
||||
vars->OnChange(s->ivar);
|
||||
vars->OnChange(s->ivar, true);
|
||||
}
|
||||
|
||||
//v->val.i=val;
|
||||
|
|
|
|||
|
|
@ -47,19 +47,13 @@ void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key)
|
|||
espClient= espclient;
|
||||
strcpy(nred, ssid);
|
||||
strcpy(pass, key);
|
||||
}
|
||||
|
||||
bool WifiManager::loop()
|
||||
{
|
||||
if((WiFi.status() == WL_CONNECTED))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#ifdef DEBUG_PS
|
||||
Serial.println("Conectando wifi");
|
||||
Serial.println(nred);
|
||||
Serial.println(pass);
|
||||
#endif
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(nred, pass);
|
||||
|
||||
|
|
@ -77,7 +71,23 @@ bool WifiManager::loop()
|
|||
else
|
||||
Serial.println("No se pudo conectar");
|
||||
#endif
|
||||
return WiFi.status() == WL_CONNECTED;
|
||||
//return WiFi.status() == WL_CONNECTED;
|
||||
}
|
||||
|
||||
bool WifiManager::loop()
|
||||
{
|
||||
if((WiFi.status() == WL_CONNECTED))
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
#ifdef DEBUG_PS
|
||||
Serial.println("Reset esp");
|
||||
#endif
|
||||
ESP.reset();
|
||||
return false;
|
||||
|
||||
|
||||
}
|
||||
//**************************************************************************************************************************************************
|
||||
MqttManager::MqttManager()
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ void MqttVarManager::OnMqtt(char* topic, char* payload)
|
|||
}
|
||||
|
||||
if(res>=0)
|
||||
OnChange(res);
|
||||
OnChange(res, isSet);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -207,9 +207,23 @@ void MqttVarManager::PublicaVar(int ivar)
|
|||
char buffer_p[24];
|
||||
MqttVar* v=vars->Get(ivar);
|
||||
if(v->flags & MqttVar::CHANGE_VAR)
|
||||
{
|
||||
|
||||
sprintf(buffer_t, "%s/set",topics->Get(v->topic));
|
||||
#ifdef DEBUG_PS
|
||||
Serial.print("Publica /set var: ");
|
||||
Serial.println(buffer_t);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
sprintf(buffer_t, "%s/get",topics->Get(v->topic));
|
||||
#ifdef DEBUG_PS
|
||||
Serial.print("Publica get var: ");
|
||||
Serial.println(buffer_t);
|
||||
#endif
|
||||
}
|
||||
//Publica valor
|
||||
if(v->flags & MqttVar::FLOAT_VAR)
|
||||
dtostrf(v->val.f,3, 2, buffer_p);
|
||||
|
|
@ -301,18 +315,22 @@ int MqttVarManager::GetId(char* topic)
|
|||
return -1;
|
||||
}
|
||||
|
||||
void MqttVarManager::OnChange(int ivar)
|
||||
void MqttVarManager::OnChange(int ivar, bool publica)
|
||||
{
|
||||
#ifdef DEBUG_PS
|
||||
|
||||
Serial.println("MqttVarManager::OnChange");
|
||||
#endif
|
||||
if(publica)
|
||||
{
|
||||
MqttVar* v=vars->Get(ivar);
|
||||
byte f= MqttVar::ACCION_VAR;
|
||||
if(v->flags & f)
|
||||
{
|
||||
PublicaVar(ivar);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int i=0; i<nListenner; i++)
|
||||
{
|
||||
|
|
@ -350,7 +368,7 @@ void MqttVarManager::InvierteVar(int ivar)
|
|||
}
|
||||
else
|
||||
v->val.i=1-v->val.i;
|
||||
OnChange(ivar);
|
||||
OnChange(ivar, true);
|
||||
}
|
||||
void MqttVarManager::SetVal(int ivar,MQTTvalor val)
|
||||
{
|
||||
|
|
@ -370,5 +388,5 @@ void MqttVarManager::SetVal(int ivar,MQTTvalor val)
|
|||
Serial.print(" f: ");
|
||||
Serial.println( v->val.f);
|
||||
#endif
|
||||
OnChange(ivar);
|
||||
OnChange(ivar, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ class MqttVarManager
|
|||
int AddInternalVarInt( char*topic);
|
||||
void PublicaVars();
|
||||
void PublicaVar(int ivar);
|
||||
void OnChange(int ivar);
|
||||
void OnChange(int ivar, bool publica);
|
||||
|
||||
void ResetVolatileVar();
|
||||
void InvierteVar(int ivar);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
//parametros configurables*************************************************
|
||||
#define DEBUG_PS 1//Descomentar para debug
|
||||
#define CON_LCD 0
|
||||
|
||||
class ActualDomoConfig: public DomoConfig
|
||||
#define CON_LCD 1
|
||||
//va por 16
|
||||
class AutomatismosDomoConfig: public DomoConfig
|
||||
{
|
||||
public:
|
||||
ActualDomoConfig()
|
||||
AutomatismosDomoConfig()
|
||||
{
|
||||
velocidadPortSerie=115200;
|
||||
strcpy(ssidWifi,"Idhun");//nombre wifi
|
||||
|
|
@ -57,10 +57,12 @@ 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");
|
||||
int pulIall= vars->AddInternalVarInt( "casa/Salon/intAll");
|
||||
int pulAll= vars->AddInternalVarInt( "casa/Salon/pulAll");
|
||||
//lcd---------------------------------------------------------
|
||||
|
||||
//lcd->add(0,"T des: %s",0,0);
|
||||
|
|
@ -77,19 +79,83 @@ class ActualDomoConfig: public DomoConfig
|
|||
lcd->add(-1,"bueno pa goza",1,1);*/
|
||||
//desencadenaores----------
|
||||
char st[64];
|
||||
sprintf(st,"{%d}>0 -> {%d}=1 & {%d}=1 & {%d}=1 ",pul1,lamb,lchim, lent);//terminar en espacios
|
||||
//Efecto Interruptor-----
|
||||
sprintf(st,"{%d}>0 -> {%d}=1 & {%d}=1 & {%d}=1 ",pulIall,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
|
||||
sprintf(st,"{%d}<1 -> {%d}=0 & {%d}=0 & {%d}=0 ",pulIall,lamb,lchim, lent);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul2,lamb);//terminar en espacios
|
||||
//Efecto Pulsadores
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pulAll,pulIall);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul3,lchim);//terminar en espacios
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul1,lamb);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul4,lent);//terminar en espacios
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul2,lchim);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",pul3,lent);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
|
||||
}
|
||||
};
|
||||
class PulCocinaConfig: public DomoConfig
|
||||
{
|
||||
public:
|
||||
PulCocinaConfig()
|
||||
{
|
||||
velocidadPortSerie=115200;
|
||||
strcpy(ssidWifi,"Idhun");//nombre wifi
|
||||
strcpy(keyWifi,"Ardileorca1234.");//key wifi
|
||||
|
||||
strcpy(ideEsp,"Esp8266_014");//idenitificador del esp (sera único)
|
||||
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
|
||||
portMQTT=1883;//puerto del servidor mqtt Broker
|
||||
|
||||
refresTimeVars=30;//tiempo de refresco en segundos de las variables
|
||||
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
|
||||
|
||||
//config lcd--------------------
|
||||
lcd.colum=16;//columnas lcd
|
||||
lcd.lines=2;//lineas
|
||||
//pines lcd
|
||||
lcd.rs=0;
|
||||
lcd.en=0;//eneable
|
||||
lcd.d0=0;
|
||||
lcd.d1=0;
|
||||
lcd.d2=0;
|
||||
lcd.d3=0;
|
||||
|
||||
}
|
||||
//configuracion de sensores, variables, lcd---------------------------------
|
||||
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
|
||||
{
|
||||
//sensores--------------------------------------------------------
|
||||
/*
|
||||
sens->AddHDT22(int pin, char* topic);
|
||||
//tempe y presion varometrica
|
||||
sens->AddBMP180(int sda,int scl, char* topic);
|
||||
//entradas digitales
|
||||
sens->AddDin(int pin, char* topic);//añade variable digital que se actualiza de manera instantanea (interruptores sensor presencia ..)
|
||||
sens->AddDinAccion(int pin, char* topic);//añade variable que solo publica en el cambio (pulsadores, ...)
|
||||
//salida digital
|
||||
sens->AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...)
|
||||
Sensor analogico
|
||||
sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
|
||||
*/
|
||||
sens->AddDout(D5, "casa/coci/lam", false);
|
||||
sens->AddDinAccion( D1, "casa/coci/inter");
|
||||
//sens->AddDinAccion( D2, "casa/Salon/pul2");
|
||||
//sens->AddDinAccion( D5, "casa/Salon/pul3");
|
||||
//sens->AddDinAccion( D6, "casa/Salon/pulAll");
|
||||
|
||||
|
||||
char st[64];
|
||||
|
||||
//Efecto Pulsadores
|
||||
sprintf(st,"{%d}>0 -> !{%d} ",1,0);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
sprintf(st,"{%d}<1 -> !{%d} ",1,0);//terminar en espacios
|
||||
des->AddDes(st);
|
||||
}
|
||||
};
|
||||
class PulSalonConfig: public DomoConfig
|
||||
{
|
||||
public:
|
||||
|
|
@ -135,12 +201,12 @@ class PulSalonConfig: public DomoConfig
|
|||
sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
|
||||
*/
|
||||
//sens->AddHDT22(D4, "casa/desp");
|
||||
sens->AddDout(D1, "casa/Salon/LEnt", true);
|
||||
/*sens->AddDout(D7, "casa/Salon/LEnt", true);
|
||||
// sens->AddDout(D1, "casa/Salon/LEnt", true);
|
||||
sens->AddDout(D7, "casa/Salon/LEnt", false);
|
||||
sens->AddDinAccion( D1, "casa/Salon/pul1");
|
||||
sens->AddDinAccion( D2, "casa/Salon/pul2");
|
||||
sens->AddDinAccion( D5, "casa/Salon/pul3");
|
||||
sens->AddDinAccion( D6, "casa/Salon/pul4");*/
|
||||
sens->AddDinAccion( D6, "casa/Salon/pulAll");
|
||||
}
|
||||
};
|
||||
class DespachoDomoConfig: public DomoConfig
|
||||
|
|
@ -179,13 +245,16 @@ class DespachoDomoConfig: public DomoConfig
|
|||
sens->AddAnalogIn(0, "casa/desp/luz",true);
|
||||
//variables----------------------------------------------------
|
||||
int temCoci= vars->AddInternalVarFloat( "casa/cocina/t");//variable privada
|
||||
int temDesp= vars->AddInternalVarFloat( "casa/cocina/h");//variable privada
|
||||
|
||||
int hcocina= vars->AddInternalVarFloat( "casa/cocina/h");//variable privada
|
||||
int temExt= vars->AddInternalVarFloat( "casa/ext/t");//variable privada
|
||||
int hExt= vars->AddInternalVarFloat( "casa/ext/h");//variable privada
|
||||
//lcd---------------------------------------------------------
|
||||
lcd->add(0,"T des: %s",0,0);
|
||||
lcd->add(1,"H des: %s",1,0);
|
||||
lcd->add(temCoci,"T coci: %s",0,1);
|
||||
lcd->add(temDesp,"H coci: %s",1,1);
|
||||
lcd->add(hcocina,"H coci: %s",1,1);
|
||||
lcd->add(temExt,"T Ext: %s",0,2);
|
||||
lcd->add(hExt,"H Ext: %s",1,2);
|
||||
}
|
||||
};
|
||||
class CocinaDomoConfig: public DomoConfig
|
||||
|
|
@ -211,6 +280,30 @@ class CocinaDomoConfig: public DomoConfig
|
|||
}
|
||||
};
|
||||
|
||||
class ExteriorDomoConfig: public DomoConfig
|
||||
{
|
||||
public:
|
||||
ExteriorDomoConfig()
|
||||
{
|
||||
velocidadPortSerie=115200;
|
||||
strcpy(ssidWifi,"Idhun");//nombre wifi
|
||||
strcpy(keyWifi,"Ardileorca1234.");//key wifi
|
||||
strcpy(ideEsp,"Esp8266_015");//idenitificador del esp (sera único)
|
||||
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
|
||||
portMQTT=1883;//puerto del servidor mqtt Broker
|
||||
refresTimeVars=30;//tiempo de refresco en segundos de las variables
|
||||
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
|
||||
}
|
||||
//configuracion de sensores---------------------------------
|
||||
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
|
||||
{
|
||||
sens->AddHDT22(D2, "casa/ext");
|
||||
sens->AddAnalogIn(0, "casa/ext/lluvia",true);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//configuracion que se usara--------------------------
|
||||
ActualDomoConfig ConfiguracionActual;
|
||||
DespachoDomoConfig ConfiguracionActual;
|
||||
|
|
|
|||
Loading…
Reference in New Issue