DomoEsp_v2.0/DomoEspSensor/SensorPotenI2c.h

95 lines
2.0 KiB
C++

#ifndef SensorPotenI2cDef
#define SensorPotenI2cDef 1
#include "defines.h"
#include "PotenciometroI2C.h"
class SensorPotenI2c: public DomoEspSensorReceiver
{
float val;
PotenciometroI2C poten;
bool negado;
public:
virtual float getVal()
{
return (float)val;
}
SensorPotenI2c()
{
val=0;
topic[0]=0;
negado=false;
}
void IniciaWire(uint8_t _pin_SDA, uint8_t _pin_SCL)
{
Wire.begin(_pin_SDA, _pin_SCL);
initDS1803();
}
void set( const char* topic_id, int valdef,bool _negado=false)
{
val=valdef;
negado=_negado;
strcpy(topic, topic_id);
}
virtual void procesa(IMqttManager * man, int tiempo)
{
if(tiempo==2)
{
#ifdef DEBUG_PS
Serial.print("SensorPotenI2c ");
Serial.println(val);
#endif
//loguea------------
//char buffer_t[MAXTOPICVAR];
//char buffer_p[MAXTOPICVAR];
sprintf(buffer_p, "%d", (int)val);
sprintf(buffer_t, "%s/get",topic);
man->MqttSend(buffer_t, buffer_p);
}
}
virtual void SubscribeMqtt(IMqttManager* man){
//char buffer_t[MAXTOPICVAR];
sprintf(buffer_t, "%s/set",topic);
man->MqttSubs(buffer_t);
}
virtual void OnMqtt(IMqttManager * man, char* _topic, char* payload, int tipo)
{
if(tipo!=Topic::SET)
return;
if(!strcmp(_topic, topic))
{
if(payload[0]=='X')
val=100-val;
else
val=atoi(payload);
if(val<0)
val=0;
else if(val>100)
val=100;
//cambia estado relleH
setPotenciometro();
//loguea------------
//char buffer_t[MAXTOPICVAR];
//char buffer_p[MAXTOPICVAR];
sprintf(buffer_p, "%d", (int)val);
sprintf(buffer_t, "%s/get",topic);
man->MqttSend(buffer_t, buffer_p);
}
}
void setPotenciometro()
{
if(negado)
poten.setv(100-val);
else
poten.setv(val);
};
};
#endif