#ifndef SensorDoutDef #define SensorDoutDef 1 #include "defines.h" class SensorDout: public DomoEspSensorReceiver { bool val; uint8_t pin; bool negado; public: virtual float getVal() { return (float)val; } SensorDout() { pin=0; val=0; topic[0]=0; negado=false; } 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) { if(tiempo==2) { #ifdef DEBUG_PS Serial.print("LogDout "); 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 inicia() { pinMode(pin, OUTPUT); if(negado) digitalWrite(pin, val==0); else digitalWrite(pin, val>0); } 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=!val; else val=(atoi(payload)==1); //cambia estado relleH if(negado) digitalWrite(pin, val==0); else digitalWrite(pin, val>0); //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); } }; }; #endif