Publicar solo cuando entran set no get.

Modificacion configuraciones varias
master
Gerardo 2022-01-24 21:17:05 +01:00
parent 8fe41ffcac
commit e1dde4e137
8 changed files with 171 additions and 51 deletions

View File

@ -3,17 +3,20 @@
#define MqttDefinesDef 1 #define MqttDefinesDef 1
//generales //generales
#define DEBUG_PS 1 #define DEBUG_PS 1
#define CON_LCD 0 #define CON_LCD 1
#define MAXTOPICVAR 32//maximo de caracteres de los topic de las variables #define MAXTOPICVAR 32//maximo de caracteres de los topic de las variables
//vars-------------------- //vars--------------------
#define MAXVAR 12//maximo de variables totales #define MAXVAR 24//maximo de variables totales
#define MAXSTR 1024//maximo de caracteres para str #define MAXSTR 1024//maximo de caracteres para str
//sens-------------------- //sens--------------------
#define MAXSENS 8 #define MAXSENS 8
#define MAXINTERRUP 8 #define MAXINTERRUP 8
//desencadenadores--------
#define MAXSTRDESEN 64
#define MAXDESEN 24
//class------------------- //class-------------------
class MqttOnVarChangeListenner class MqttOnVarChangeListenner
{ {

View File

@ -4,7 +4,7 @@
MqttDesencadenador::MqttDesencadenador() MqttDesencadenador::MqttDesencadenador()
{ {
activo=true; activo=true;
} }
MQTTvalor MqttDesencadenador::GetVarValue(char*ivar, MqttVarManager *vars) MQTTvalor MqttDesencadenador::GetVarValue(char*ivar, MqttVarManager *vars)
{ {
@ -16,7 +16,7 @@ float MqttDesencadenador::GetValue(char*ivar, MqttVarManager *vars)
MqttVar *v=GetVar(ivar, vars); MqttVar *v=GetVar(ivar, vars);
if(v->flags & MqttVar::FLOAT_VAR) if(v->flags & MqttVar::FLOAT_VAR)
return v->val.f; return v->val.f;
return 1.*v->val.i; return (float)v->val.i;
} }
int MqttDesencadenador::GetIvar(char*ivar) int MqttDesencadenador::GetIvar(char*ivar)
@ -314,7 +314,6 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
//distincion de variables //distincion de variables
if(expresion[p.i]=='{') if(expresion[p.i]=='{')
{ {
p.estado=1; p.estado=1;
p.i++; p.i++;
} }
@ -323,7 +322,6 @@ void MqttDesencadenador::Exe(MqttVarManager *vars)
p.estado=2; p.estado=2;
} }
} }
} }
break; break;
case(1)://pillando var o escalar case(1)://pillando var o escalar
@ -376,7 +374,6 @@ void MqttDesencadenadorManager::inicia( MqttVarManager *v)
if(des.n>0) if(des.n>0)
{ {
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("MqttDesencadenador::inicia como listenner"); Serial.println("MqttDesencadenador::inicia como listenner");
#endif #endif
vars->AddListenner(this); vars->AddListenner(this);
@ -404,7 +401,6 @@ void MqttDesencadenadorManager::loop()
void MqttDesencadenadorManager::RevisaDesencadenadores() void MqttDesencadenadorManager::RevisaDesencadenadores()
{ {
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("MqttDesencadenadorManager::RevisaDesencadenadores"); Serial.println("MqttDesencadenadorManager::RevisaDesencadenadores");
#endif #endif
for(int i=0; i<des.n; i++) for(int i=0; i<des.n; i++)

View File

@ -45,7 +45,7 @@ struct MqttExeParam
class MqttDesencadenador class MqttDesencadenador
{ {
public: 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 bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse
MqttDesencadenador(); MqttDesencadenador();
@ -68,7 +68,7 @@ class MqttDesencadenador
class MqttDesencadenadorArray class MqttDesencadenadorArray
{ {
public: public:
MqttDesencadenador data[16]; MqttDesencadenador data[MAXDESEN];
int n; int n;

View File

@ -335,7 +335,7 @@ void MqttSensManager::procesaInterrupciones()
if(val!=v->val.i) if(val!=v->val.i)
{ {
v->val.i=val; v->val.i=val;
vars->OnChange(s->ivar); vars->OnChange(s->ivar, true);
} }
break; break;
} }
@ -345,7 +345,7 @@ void MqttSensManager::procesaInterrupciones()
if(val!=v->val.i) if(val!=v->val.i)
{ {
v->val.i=val; v->val.i=val;
vars->OnChange(s->ivar); vars->OnChange(s->ivar, true);
} }
//v->val.i=val; //v->val.i=val;

View File

@ -47,19 +47,13 @@ void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key)
espClient= espclient; espClient= espclient;
strcpy(nred, ssid); strcpy(nred, ssid);
strcpy(pass, key); strcpy(pass, key);
}
bool WifiManager::loop()
{
if((WiFi.status() == WL_CONNECTED))
{
return true;
}
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("Conectando wifi"); Serial.println("Conectando wifi");
Serial.println(nred); Serial.println(nred);
Serial.println(pass); Serial.println(pass);
#endif #endif
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(nred, pass); WiFi.begin(nred, pass);
@ -77,7 +71,23 @@ bool WifiManager::loop()
else else
Serial.println("No se pudo conectar"); Serial.println("No se pudo conectar");
#endif #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() MqttManager::MqttManager()

View File

@ -186,7 +186,7 @@ void MqttVarManager::OnMqtt(char* topic, char* payload)
} }
if(res>=0) if(res>=0)
OnChange(res); OnChange(res, isSet);
return; return;
} }
@ -207,9 +207,23 @@ void MqttVarManager::PublicaVar(int ivar)
char buffer_p[24]; char buffer_p[24];
MqttVar* v=vars->Get(ivar); MqttVar* v=vars->Get(ivar);
if(v->flags & MqttVar::CHANGE_VAR) if(v->flags & MqttVar::CHANGE_VAR)
{
sprintf(buffer_t, "%s/set",topics->Get(v->topic)); sprintf(buffer_t, "%s/set",topics->Get(v->topic));
#ifdef DEBUG_PS
Serial.print("Publica /set var: ");
Serial.println(buffer_t);
#endif
}
else else
{
sprintf(buffer_t, "%s/get",topics->Get(v->topic)); sprintf(buffer_t, "%s/get",topics->Get(v->topic));
#ifdef DEBUG_PS
Serial.print("Publica get var: ");
Serial.println(buffer_t);
#endif
}
//Publica valor //Publica valor
if(v->flags & MqttVar::FLOAT_VAR) if(v->flags & MqttVar::FLOAT_VAR)
dtostrf(v->val.f,3, 2, buffer_p); dtostrf(v->val.f,3, 2, buffer_p);
@ -301,18 +315,22 @@ int MqttVarManager::GetId(char* topic)
return -1; return -1;
} }
void MqttVarManager::OnChange(int ivar) void MqttVarManager::OnChange(int ivar, bool publica)
{ {
#ifdef DEBUG_PS #ifdef DEBUG_PS
Serial.println("MqttVarManager::OnChange"); Serial.println("MqttVarManager::OnChange");
#endif #endif
if(publica)
{
MqttVar* v=vars->Get(ivar); MqttVar* v=vars->Get(ivar);
byte f= MqttVar::ACCION_VAR; byte f= MqttVar::ACCION_VAR;
if(v->flags & f) if(v->flags & f)
{ {
PublicaVar(ivar); PublicaVar(ivar);
} }
}
for (int i=0; i<nListenner; i++) for (int i=0; i<nListenner; i++)
{ {
@ -350,7 +368,7 @@ void MqttVarManager::InvierteVar(int ivar)
} }
else else
v->val.i=1-v->val.i; v->val.i=1-v->val.i;
OnChange(ivar); OnChange(ivar, true);
} }
void MqttVarManager::SetVal(int ivar,MQTTvalor val) void MqttVarManager::SetVal(int ivar,MQTTvalor val)
{ {
@ -370,5 +388,5 @@ void MqttVarManager::SetVal(int ivar,MQTTvalor val)
Serial.print(" f: "); Serial.print(" f: ");
Serial.println( v->val.f); Serial.println( v->val.f);
#endif #endif
OnChange(ivar); OnChange(ivar, true);
} }

View File

@ -112,7 +112,7 @@ class MqttVarManager
int AddInternalVarInt( char*topic); int AddInternalVarInt( char*topic);
void PublicaVars(); void PublicaVars();
void PublicaVar(int ivar); void PublicaVar(int ivar);
void OnChange(int ivar); void OnChange(int ivar, bool publica);
void ResetVolatileVar(); void ResetVolatileVar();
void InvierteVar(int ivar); void InvierteVar(int ivar);

View File

@ -1,11 +1,11 @@
//parametros configurables************************************************* //parametros configurables*************************************************
#define DEBUG_PS 1//Descomentar para debug #define DEBUG_PS 1//Descomentar para debug
#define CON_LCD 0 #define CON_LCD 1
//va por 16
class ActualDomoConfig: public DomoConfig class AutomatismosDomoConfig: public DomoConfig
{ {
public: public:
ActualDomoConfig() AutomatismosDomoConfig()
{ {
velocidadPortSerie=115200; velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi strcpy(ssidWifi,"Idhun");//nombre wifi
@ -57,10 +57,12 @@ 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 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 pul2= vars->AddInternalVarInt( "casa/Salon/pul2");
int pul3= vars->AddInternalVarInt( "casa/Salon/pul3"); 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---------------------------------------------------------
//lcd->add(0,"T des: %s",0,0); //lcd->add(0,"T des: %s",0,0);
@ -77,19 +79,83 @@ class ActualDomoConfig: public DomoConfig
lcd->add(-1,"bueno pa goza",1,1);*/ lcd->add(-1,"bueno pa goza",1,1);*/
//desencadenaores---------- //desencadenaores----------
char st[64]; 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); 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); 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); 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); 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); 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 class PulSalonConfig: public DomoConfig
{ {
public: public:
@ -135,12 +201,12 @@ class PulSalonConfig: public DomoConfig
sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ... sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
*/ */
//sens->AddHDT22(D4, "casa/desp"); //sens->AddHDT22(D4, "casa/desp");
sens->AddDout(D1, "casa/Salon/LEnt", true); // sens->AddDout(D1, "casa/Salon/LEnt", true);
/*sens->AddDout(D7, "casa/Salon/LEnt", true); sens->AddDout(D7, "casa/Salon/LEnt", false);
sens->AddDinAccion( D1, "casa/Salon/pul1"); sens->AddDinAccion( D1, "casa/Salon/pul1");
sens->AddDinAccion( D2, "casa/Salon/pul2"); sens->AddDinAccion( D2, "casa/Salon/pul2");
sens->AddDinAccion( D5, "casa/Salon/pul3"); sens->AddDinAccion( D5, "casa/Salon/pul3");
sens->AddDinAccion( D6, "casa/Salon/pul4");*/ sens->AddDinAccion( D6, "casa/Salon/pulAll");
} }
}; };
class DespachoDomoConfig: public DomoConfig class DespachoDomoConfig: public DomoConfig
@ -179,13 +245,16 @@ class DespachoDomoConfig: public DomoConfig
sens->AddAnalogIn(0, "casa/desp/luz",true); sens->AddAnalogIn(0, "casa/desp/luz",true);
//variables---------------------------------------------------- //variables----------------------------------------------------
int temCoci= vars->AddInternalVarFloat( "casa/cocina/t");//variable privada 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---------------------------------------------------------
lcd->add(0,"T des: %s",0,0); lcd->add(0,"T des: %s",0,0);
lcd->add(1,"H des: %s",1,0); lcd->add(1,"H des: %s",1,0);
lcd->add(temCoci,"T coci: %s",0,1); 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 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-------------------------- //configuracion que se usara--------------------------
ActualDomoConfig ConfiguracionActual; DespachoDomoConfig ConfiguracionActual;