arreglos spliter y configuraciones pulsador salon. negacion de dout

main
Gerardo 2024-09-30 22:03:36 +02:00
parent e963db4213
commit 7a256eb46f
3 changed files with 194 additions and 18 deletions

View File

@ -6,7 +6,7 @@ class SensorDout: public DomoEspSensorReceiver
{
bool val;
uint8_t pin;
bool negado;
public:
virtual float getVal()
{
@ -17,11 +17,13 @@ class SensorDout: public DomoEspSensorReceiver
pin=0;
val=0;
topic[0]=0;
negado=false;
}
void set(uint8_t _pin, char* topic_id, bool valdef)
void set(uint8_t _pin, char* topic_id, bool valdef,bool _negado=false)
{
pin=_pin;
val=valdef;
negado=_negado;
strcpy(topic, topic_id);
}
virtual void procesa(IMqttManager * man, int tiempo)
@ -44,7 +46,10 @@ class SensorDout: public DomoEspSensorReceiver
virtual void inicia()
{
pinMode(pin, OUTPUT);
digitalWrite(pin, val);
if(negado)
digitalWrite(pin, val==0);
else
digitalWrite(pin, val>0);
}
virtual void SubscribeMqtt(IMqttManager* man){
//char buffer_t[MAXTOPICVAR];
@ -62,8 +67,10 @@ class SensorDout: public DomoEspSensorReceiver
else
val=(atoi(payload)==1);
//cambia estado relle
digitalWrite(pin, val);
if(negado)
digitalWrite(pin, val==0);
else
digitalWrite(pin, val>0);
//loguea------------
//char buffer_t[MAXTOPICVAR];
//char buffer_p[MAXTOPICVAR];

View File

@ -22,9 +22,9 @@ class SensorSplitter: public DomoEspSensorReceiver
for(int i=0; i<MAX_ACTIVADORES; i++)
sensorSend[i].sen=0;
}
void set(char* topic_id, float valdef)
void set(char* topic_id, float =0)
{
val=valdef;
val=0;
strcpy(topic, topic_id);
}
void AddSens(DomoEspSensorReceiver* sen)
@ -49,12 +49,13 @@ class SensorSplitter: public DomoEspSensorReceiver
virtual void SubscribeMqtt(IMqttManager* man){
//char buffer_t[MAXTOPICVAR];
sprintf(buffer_t, "%s/set",topic);
man->MqttSubs(buffer_t);
sprintf(buffer_t, "%s/pul",topic);
man->MqttSubs(buffer_t);
}
virtual void OnMqtt(IMqttManager * man, char* _topic, char* payload, int tipo)
{
if(tipo!=Topic::SET || tipo!=Topic::PUL)
if(tipo!=Topic::SET && tipo!=Topic::PUL)
return;
if(strcmp(_topic, topic))
return;
@ -66,7 +67,8 @@ class SensorSplitter: public DomoEspSensorReceiver
if(val==0)
val=1;
else
val=0; }
val=0;
}
else
val=atof(payload);
for(int i=0; i<MAX_ACTIVADORES; i++)
@ -77,6 +79,7 @@ class SensorSplitter: public DomoEspSensorReceiver
man->MqttSend(buffer_t, payload);
}
}
}
else if(tipo==Topic::PUL )
{

View File

@ -43,7 +43,42 @@ class ConfAutomatismos: public DomoEspConfig
}
};
class ConfSpliter: public DomoEspConfig
{
SensorDout luz;
SensorDout luz2;
SensorSplitter sp;
public:
ConfSpliter()
{
strcpy(ssidWifi,"IdhunAux");//nombre wifi
strcpy(ideEsp,"Esp8266_pruebas");//idenitificador del esp (sera único)
luz.set(D1, "casa/pruebas/luz",0);
luz2.set(D5, "casa/pruebas/luz2",0);
sp.set("casa/pruebas/sp");
sp.AddSens(&luz2);
sp.AddSens(&luz);
}
virtual void inicia(ISensorManager* man)
{
man->Add(&luz);
man->Add(&luz2);
man->Add(&sp);
}
};
class ConfActual: public DomoEspConfig
{
@ -120,7 +155,7 @@ class Confdespacho: public DomoEspConfig
strcpy(ideEsp,"Esp8266_Despacho");//idenitificador del esp (sera único)
dht.set(D4, "casa/desp");
nivelLuz.set(0,"casa/desp/luz",0, 0);
nivelLuz.set(0,"casa/desp/luz",1, 0);
senlcd.set("casa/desp/lcd", &lcd, 16,2, 7);
tcocina.set("casa/cocina/t");
@ -151,10 +186,141 @@ class Confdespacho: public DomoEspConfig
}
};
class ConfigSalon: public DomoEspConfig
{
SensorDHT dht;
SensorAin nivelLuz;
SensorDin presencia;
SensorTimer presenciaTimer;
Actuador actTimer;
public:
ConfigSalon()
{
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(ideEsp,"Esp8266_Salon");//idenitificador del esp (sera único)
dht.set(D4, "casa/Salon");
nivelLuz.set(0,"casa/Salon/luz",1, 0);
presencia.set(D5, "casa/Salon/movEven");
presenciaTimer.set("casa/Salon/mov",0,60);
actTimer.set("casa/Salon/movEven", "casa/Salon/mov","1");
actTimer.AddActivador(&presencia, '>', 0);
}
virtual void inicia(ISensorManager* man)
{
man->Add(&dht);
man->Add(&nivelLuz);
man->Add(&presencia);
man->Add(&presenciaTimer);
man->Add(&actTimer);
}
};
class ConfPulSalon: public DomoEspConfig
{
SensorPulsante pul1;
SensorPulsante pul2;
SensorPulsante pul3;
SensorPulsante pul4;
SensorRF lchimenea;
SensorDout lentrada;
SensorRF lambiente;
Actuador actp1;
Actuador actp2on;
Actuador actp2off;
Actuador actp3on;
Actuador actp3off;
Actuador actAllOn;
Actuador actAllOff;
SensorSplitter sp;
public:
ConfPulSalon()
{
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(ideEsp,"Esp8266_PulSalon");//idenitificador del esp (sera único)
lchimenea.set("casa/Salon/LChime");
lambiente.set("casa/Salon/LAmb");
lentrada.set(D7,"casa/Salon/LEnt",1, 1);
pul1.set(D1,"casa/Salon/pul1",0);
pul2.set(D2,"casa/Salon/pul2",0);
pul3.set(D5,"casa/Salon/pul3",0);
pul4.set(D6,"casa/Salon/pulAll",0);
actp1.set("casa/Salon/pul1","casa/Salon/LEnt","X");
actp2on.set("casa/Salon/pul2","casa/Salon/LAmb","0");
actp2off.set("casa/Salon/pul2","casa/Salon/LAmb","1");
actp3on.set("casa/Salon/pul3","casa/Salon/LChime","0");
actp3off.set("casa/Salon/pul3","casa/Salon/LChime","1");
actp2on.AddActivador(&lambiente, '>', 0);
actp2off.AddActivador(&lambiente, '<', 1);
actp3on.AddActivador(&lchimenea, '>', 0);
actp3off.AddActivador(&lchimenea, '<', 1);
sp.set("casa/Salon/pulAllSP");
sp.AddSens(&lchimenea);
sp.AddSens(&lambiente);
sp.AddSens(&lentrada);
actAllOn.set("casa/Salon/pulAll", "casa/Salon/pulAllSP","0");
actAllOff.set("casa/Salon/pulAll", "casa/Salon/pulAllSP","1");
actAllOn.AddActivador(&lentrada, '>', 0);
actAllOff.AddActivador(&lentrada, '<', 1);
}
virtual void inicia(ISensorManager* man)
{
man->Add(&lambiente);
man->Add(&lentrada);
man->Add(&lchimenea);
man->Add(&pul1);
man->Add(&pul2);
man->Add(&pul3);
man->Add(&pul4);
man->Add(&actp1);
man->Add(&actp2on);
man->Add(&actp2off);
man->Add(&actp3on);
man->Add(&actp3off);
man->Add(&sp);
man->Add(&actAllOn);
man->Add(&actAllOff);
}
};
ConfActual ConfiguracionActual;
ConfPulSalon ConfiguracionActual;
#endif